创建Java Annotation以使用代码替换标记

时间:2013-03-15 22:40:26

标签: java eclipse macros annotations

我正在做一个项目,实质上是用户为非常长/重复的代码创建宏的方式,这样他们就可以将这些宏放入他们的代码中,以提高可读性并鼓励重用。< / p>

该项目分为两个区域:用户构造宏并将其保存到文件的RCP应用程序,以及用户可以插入宏的eclipse插件。

RCP应用程序已经很好了,但现在我已经到了真正的位置,我想让java查看一段代码并在编译时去“哦,那段代码就意味着这&#39;

例如,用户可以创建一个标识为macro1的宏,代表代码System.out.println("Hello World");。他们希望在班级foo中使用它,如下所示:

class foo{

    //lots of java....

    macro1

    //lots more java
}

我希望用户运行他们的类,当Java编译时,用它替换macro1的值。

我已经研究了一段时间,并在JavaCC上阅读了一些内容并查看了Ants Replace Task,但我觉得我想要创建一个自定义注释来告知Java注释下面的这个字符串应该转换为/替换为位于特定文本文件中的一段java代码。希望结束如下:

@ExpandMacro
macro1

对我而言似乎有可能但我不知道我是否过于乐观! :)

我的另一个担忧是它作为插件的可部署性如何?如果我创建自定义注释,我将如何使其可供用户使用?

任何建议/见解都会非常有用!

编辑:我也查看了Project Lombok这看起来非常有趣。但是,由于lombok项目所需的设置数量,我再次担心可部署性。

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是Annotation Processor(类似于Lombokg)。使用JSR 269 Pluggable Annotation Processing API配置很简单,因为带有处理器的jar是自动发现的。

请看:http://www.slideshare.net/PolymathicCoder/the-art-of-metaprogramming-in-java第34页

答案 1 :(得分:0)

以不同的方式看待这一点。我认为更好的是使用动态语言(例如groovy)。您可以使用Java编写代码并使用Groovy动态运行它(无需编译) - 因为Java代码与groovy兼容。因此,您可以简单地将macro1替换为您需要的内容并运行此代码。有了grovy,你可以

  • 编写代码而不是像java
  • 用实际代码替换宏
  • 运行代码而不编译

阅读链接: http://groovy.codehaus.org/Embedding+Groovy http://groovy.codehaus.org/Differences+from+Java