我想生成基于现有Java代码的Java代码。
下面是一个示例:
@A
class A {
@A
a;
@A
b;
c;
}
@A
class B {
a;
@A
b;
c;
}A.java,B.java -(代码转换器)-> A.java,B.java
转换后的代码应该如下所示:
class A {
a;
b;
}
class B {
b;
}正如你所看到的,所有的东西(类,字段,方法,...)带有自定义注解的注解应该是结果代码的一部分。所有其他的东西都被丢弃了。
注意:特定方法的实现应该是结果代码的一部分。应导入所有使用的类型,...
在这个项目中如何做到这一点的任何提示:https://today.java.net/pub/a/today/2008/04/10/source-code-analysis-using-java-6-compiler-apis.html#accessing-the-abstract-syntax-tree-the-compiler-tree-api
诚挚的问候
发布于 2013-05-13 22:18:23
这样做的标准方法是将程序解析为一些AST (例如,使用您提到的API ),然后以任何您想要的方式修改AST -例如,过滤掉没有注释的方面-最后,创建一些可以将AST打印回源代码形式的访问器。这种方式应该可以工作,尽管您丢失了源代码格式。此外,创建打印回源代码访问器也是一项相当繁琐的工作。
或者,您可以使用现有的库进行Java源转换(其工作方式可能与上面的相同),例如Spoon。具体地说,就是here's a Spoon filter which only matches elements with a given annotation --这正是你想要的。
发布于 2013-05-13 22:54:21
Java6.0有一个可以通过编译器调用的Annotation Processing API。此API允许您创建定制的Annotation Processors,它可以遍历表示带注释的类的Java Mirror树。尽管它很复杂,但可以利用它来处理和生成新的源文件。
我曾将其广泛用于源文件生成(Java-to-Java和Java-to-Python),并对其印象非常深刻。
这里有几个链接可能会帮助你入门:
发布于 2013-05-13 22:50:51
您可以简单地编写和编译一个java应用程序,该应用程序将未编译的类.java作为文本读取,并根据@或注释中任何不影响代码的特殊字符选择所需的代码,然后将转换后的代码重写为另一个file.java,然后编译它。
https://stackoverflow.com/questions/16523650
复制相似问题