首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于现有代码生成代码

基于现有代码生成代码
EN

Stack Overflow用户
提问于 2013-05-13 21:44:30
回答 4查看 727关注 0票数 2

我想生成基于现有Java代码的Java代码。

下面是一个示例:

代码语言:javascript
复制
@A
class A {
  @A
  a;

  @A
  b;

  c;
}

@A
class B {
  a;

  @A
  b;

  c;
}

A.java,B.java -(代码转换器)-> A.java,B.java

转换后的代码应该如下所示:

代码语言:javascript
复制
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

诚挚的问候

EN

回答 4

Stack Overflow用户

发布于 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 --这正是你想要的。

票数 1
EN

Stack Overflow用户

发布于 2013-05-13 22:54:21

Java6.0有一个可以通过编译器调用的Annotation Processing API。此API允许您创建定制的Annotation Processors,它可以遍历表示带注释的类的Java Mirror树。尽管它很复杂,但可以利用它来处理和生成新的源文件。

我曾将其广泛用于源文件生成(Java-to-Java和Java-to-Python),并对其印象非常深刻。

这里有几个链接可能会帮助你入门:

  • http://javaapplication32.blogspot.com/2011/02/java-60-features-part-2-pluggable.html
  • http://www.javabeat.net/2007/06/java-6-0-features-part-2-pluggable-annotation-processing-api/
  • http://deors.wordpress.com/2011/10/08/annotation-processors/
  • http://www.javalobby.org/java/forums/t17876.html
票数 1
EN

Stack Overflow用户

发布于 2013-05-13 22:50:51

您可以简单地编写和编译一个java应用程序,该应用程序将未编译的类.java作为文本读取,并根据@或注释中任何不影响代码的特殊字符选择所需的代码,然后将转换后的代码重写为另一个file.java,然后编译它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16523650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档