1

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

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

RCP 应用程序运行良好,但现在我要实现真正的一点,即我希望 java 查看一段代码并在编译时说“哦,那段代码就是这个意思”。

例如,用户可以创建一个带有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 项目所需的设置量,我再次担心可部署性。

4

2 回答 2

0

换个角度看这个。我认为对你来说更好的是使用动态语言(例如groovy)。您可以用 Java 编写代码并使用 Groovy 动态运行它(无需编译)——因为 Java 代码与 groovy 兼容。因此,您可以简单地将 macro1 替换为您需要的内容并运行此代码。使用 groovy 你可以

  • 编写代码比看起来像 java
  • 用真实代码替换宏
  • 在不编译的情况下运行代码

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

于 2013-03-16T19:46:27.490 回答
0

最好的方法是注释处理器(类似于 Lombokg)。使用 JSR 269 Pluggable Annotation Processing API 配置很容易,因为带有处理器的 jar 是自动发现的。

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

于 2013-03-15T23:08:19.817 回答