eclipse如何向Java添加(次要)语法糖?
假设我想给Java添加一些次要的语法糖。只是一些小事情,比如添加正则表达式模式文本,或者可能是base-2文本,或者多行字符串,等等。在语法上没有什么大的变化(至少现在是这样)
一个人怎么做呢
我需要扩展字节码编译器吗?(可能吗?)
在将Eclipse插件提供给标准Java编译器之前,我可以编写Eclipse插件来进行简单的源代码转换吗
你可以在下面搜索框中键入要查询的问题!
假设我想给Java添加一些次要的语法糖。只是一些小事情,比如添加正则表达式模式文本,或者可能是base-2文本,或者多行字符串,等等。在语法上没有什么大的变化(至少现在是这样)
一个人怎么做呢
我需要扩展字节码编译器吗?(可能吗?)
在将Eclipse插件提供给标准Java编译器之前,我可以编写Eclipse插件来进行简单的源代码转换吗
# 1 楼答案
我会看看Project Lombok并尝试重用他们的尝试。他们使用Java5注释来钩住Java代理,该代理可以在编译代码之前操作抽象语法树。他们目前正致力于创建一个API,以允许编写可与javac或主要IDE(如Eclipse和NetBeans)一起使用的自定义转换器。除了触发代码生成的注释外,他们还计划添加语法更改(可能是mixin或prejava7闭包语法)
(我可能有些细节有点不对劲,但我想我已经很接近了)
Lombok是开源的,因此研究他们的代码并尝试在此基础上构建可能是一个良好的开端
如果失败,您可以尝试更改javac编译器。尽管据我所知,对于不是编译器和Java专家的人来说,这可能是一个令人沮丧的挑战
# 2 楼答案
JRuby的技术负责人Charles Nutter用文字正则表达式扩展了Javac。据我记忆所及,他不得不换了3行左右的箱子
见http://twitter.com/headius/status/1319031705
这里有一个很棒的教程,介绍如何在javac中添加一个新操作符,http://www.ahristov.com/tutorial/java-compiler.html
有关更多类似的链接,请参阅我的Links for javac hackers 列表
# 3 楼答案
您可以使用JSR 269(可插拔注释处理)来破解
javac
。您可以钩住遍历源代码中语句的访问者并对其进行转换例如,这里是添加support for roman number in java的转换的核心(当然,阅读完整的post了解更多细节)。这似乎相对容易
以下是额外资源:
我不知道Lombok项目(在另一个答案中引用)是否使用相同的技术,但我想是的
# 4 楼答案
JRuby的技术负责人Charles Nutter用文字正则表达式扩展了Javac。据我记忆所及,他不得不换了3行左右的箱子
见http://twitter.com/headius/status/1319031705