【发布时间】:2015-05-23 21:42:33
【问题描述】:
我发现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; 将返回 null 作为注释甚至
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>
【问题讨论】: