有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse如何向Java添加(次要)语法糖?

假设我想给Java添加一些次要的语法糖。只是一些小事情,比如添加正则表达式模式文本,或者可能是base-2文本,或者多行字符串,等等。在语法上没有什么大的变化(至少现在是这样)

一个人怎么做呢

我需要扩展字节码编译器吗?(可能吗?)

在将Eclipse插件提供给标准Java编译器之前,我可以编写Eclipse插件来进行简单的源代码转换吗


共 (4) 个答案

  1. # 1 楼答案

    我会看看Project Lombok并尝试重用他们的尝试。他们使用Java5注释来钩住Java代理,该代理可以在编译代码之前操作抽象语法树。他们目前正致力于创建一个API,以允许编写可与javac或主要IDE(如Eclipse和NetBeans)一起使用的自定义转换器。除了触发代码生成的注释外,他们还计划添加语法更改(可能是mixin或prejava7闭包语法)

    (我可能有些细节有点不对劲,但我想我已经很接近了)

    Lombok是开源的,因此研究他们的代码并尝试在此基础上构建可能是一个良好的开端

    如果失败,您可以尝试更改javac编译器。尽管据我所知,对于不是编译器和Java专家的人来说,这可能是一个令人沮丧的挑战

  2. # 3 楼答案

    您可以使用JSR 269(可插拔注释处理)来破解javac。您可以钩住遍历源代码中语句的访问者并对其进行转换

    例如,这里是添加support for roman number in java的转换的核心(当然,阅读完整的post了解更多细节)。这似乎相对容易

    public class Transform extends TreeTranslator {
        @Override
        public void visitIdent(JCIdent tree) {
            String name = tree.getName().toString();
            if (isRoman(name)) {
                result = make.Literal(numberize(name));
                result.pos = tree.pos;
            } else {
                super.visitIdent(tree);
            }
        }
    }
    

    以下是额外资源:

    我不知道Lombok项目(在另一个答案中引用)是否使用相同的技术,但我想是的