我正在使用jaxb从xsd生成代码。

生成的代码包含很多注释;用于课程和领域。

我正在尝试使用com.sun.tools.internal.xjc.Plugin修改生成的代码。

在插件run()方法中,我们得到了一个Outline类,从中可以得到ClassOutlineClassOutline有一个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删除注释。

如我所见,您还可以从类中删除字段和方法。那么,您到底想念什么?

09-30 12:41