さて、私は自分の質問に答えるつもりです。 プラグインを作成するのが正しい方法でした。
私は、次のプラグインを書いて、動作しているようです。
public class PrivateMemberPlugin
extends Plugin
{
@Override
public String getOptionName()
{
return "Xpm";
}
@Override
public String getUsage()
{
return " -Xpm : Change members visibility to private";
}
@Override
public boolean run(Outline model, Options opt, ErrorHandler errorHandler)
throws SAXException
{
for (ClassOutline co : model.getClasses())
{
JDefinedClass jdc = co.implClass;
// avoid concurrent modification by copying the fields in a new list
List<JFieldVar> fields = new ArrayList<JFieldVar>(jdc.fields().values());
for (JFieldVar field : fields)
{
// never do something with serialVersionUID if it exists.
if (!field.name().equalsIgnoreCase("serialVersionuid"))
{
// only try to change members that are not private
if (field.mods().getValue() != JMod.PRIVATE)
{
// since there is no way to change the visibilty, remove the field an recreate it
jdc.removeField(field);
jdc.field(JMod.PRIVATE, field.type(), field.name());
}
}
}
}
return true;
}
}
気軽にご利用ください。
出典
2012-02-22 08:09:57
tom
JAXB生成されたクラスには、メンバーを保護してきたし、おそらく彼らは、プライベートとして生成している、とあなたは理想的に生成されたメンバーがプライベートでなければならないことを言うが、私はあなたがすべてのメンバーがプライベートになりたい、これを達成する方法..を見つけることができませんか?あなたが言っているように、彼らはすでにプライベートですが、そのうちのいくつかは保護されています、そして、保護されたフィールドを持つクラスが他のクラスに継承されているかどうかを確認してください。 – JMelnik
@JMelnik:これは最初の文のスペルミスだと思います。私のソースをチェックするだけで、JAXBは 'protected'修飾子(継承にかかわらず)ですべてのメンバー属性を生成します。多分、OPは最初のセンテンスについて何らかの説明をすることができますか? – home
最初の文を修正しました。すべてのメンバーは(継承にかかわらず)「保護されています」が、私はそれらを「プライベート」にします。 – tom