我正在做一个项目,实质上是用户为非常长/重复的代码创建宏的方式,这样他们就可以将这些宏放入他们的代码中,以提高可读性并鼓励重用。< / 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项目所需的设置数量,我再次担心可部署性。
答案 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,你可以
阅读链接: http://groovy.codehaus.org/Embedding+Groovy http://groovy.codehaus.org/Differences+from+Java