使用 ECJ Compiler 编译后遗漏的注释信息

Annotation information missed after compiled with ECJ Compiler

我发现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")

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

更新更多信息

看看下面的截图:

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

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

B) 显示源注释 @GetAction("/hello") 因为

C) this.annotations 字段是 null

D) if 条件 (method.tagBits & TagBits.AnnotationResolved) != 0 计算结果为真

更新 2

看来我抓屏的时间太早了,所以处理完成后,我发现注释信息被存储了:

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

注意我正在使用 ECJ 4.4.1:

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

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

    opt(map, OPTION_TargetPlatform, "1.6");

问题是由于JDKECJ默认版本为1.2,不支持注解