我正在使用jaxb从xsd生成代码。
生成的代码包含很多注释;用于课程和领域。
我正在尝试使用com.sun.tools.internal.xjc.Plugin
修改生成的代码。
在插件run()
方法中,我们得到了一个Outline
类,从中可以得到ClassOutline
。 ClassOutline
有一个JDefinedClass
最终成员,该成员具有有关将要生成的实际类的信息。
如果我要添加任何内容,可以在JDefinedClass
中使用api。但是,如果我要删除某些东西,那是没有办法的。
例如我无法清除注释,因为JDefinedClass.annotations()
方法返回一个UnmodifiableCollection
。所以我无法清除它或从中删除任何内容。
我试图通过调用JDefinedClass
方法创建另一个_class
,但是ClassOutline.implClass
变量是最终变量,所以我无法设置它。
如何获得没有任何注释的JDefinedClass
?
我可以陷入另一个可以真正控制JDefinedClass
生成的代码的阶段吗?
最佳答案
实际上,代码模型大部分是“只写”的。但是,谈到注释,您可能已经错过了com.sun.codemodel.JDefinedClass.removeAnnotation(JAnnotationUse)
和com.sun.codemodel.JMethod.removeAnnotation(JAnnotationUse)
之类的方法(从com.sun.codemodel.JAnnotatable.removeAnnotation(JAnnotationUse)
实现)。
所以他们在那里。您可以使用常规CodeModel API删除注释。
如我所见,您还可以从类中删除字段和方法。那么,您到底想念什么?