使用ECJ编译器编译后错过的注释信息

时间:2015-05-23 21:42:33

标签: eclipse javac ecj

我发现从ECJ编译器编译的字节码缺少注释信息。

源代码由javac编译的字节码反编译:

public class HelloWorldApp {

    @GetAction("/hello")
    public String sayHello() {
        return "Hello World!";
    }
}

源代码由ECJ编译的字节码反编译:

public class HelloWorldApp {

    public String sayHello() {
        return "Hello World!";
    }
}

很明显,ECJ编译的字节码中缺少注释@GetAction("/hello")(在内存编译中)。

之前有人遇到过这个问题并获得任何线索吗?

使用更多信息进行更新

看看以下截图: enter image description here

所以它位于ASTNode.resolveAnnotations()方法行#797:

A)状态if ((method.tagBits & TagBits.AnnotationResolved) != 0) return annotations;将返回null作为注释

B)提供源注释@GetAction("/hello")是因为

C)this.annotations字段为null

D)if条件(method.tagBits & TagBits.AnnotationResolved) != 0评估为真

更新2

看起来我过早地捕获了屏幕,所以一旦完成,我发现注释信息已存储:

enter image description here

但是我仍然无法从结果文件中获取注释信息。单击here下载生成的字节码文件:

enter image description here

注意我使用的是ECJ 4.4.1:

<dependency>
  <groupId>org.eclipse.jdt.core.compiler</groupId>
  <artifactId>ecj</artifactId>
  <version>4.4.1</version>
</dependency>

1 个答案:

答案 0 :(得分:0)

问题解决了!只需添加以下行:

    opt(map, OPTION_TargetPlatform, "1.6");

问题是由ECJ中的默认JDK版本为1.2引起的,它不支持注释