我发现从ECJ编译器编译的字节码缺少注释信息。使用ECJ编译器编译后未能注释注释信息
public class HelloWorldApp {
@GetAction("/hello")
public String sayHello() {
return "Hello World!";
}
}
从字节码由欧洲法院编译反编译源代码:
public class HelloWorldApp {
public String sayHello() {
return "Hello World!";
}
}
所以很明显的标注@GetAction("/hello")
是由编译字节码遗漏
从字节码反编译源代码通过的javac编译ECJ(内存编译)。
任何人都曾遇到过这个问题,并得到任何线索?
更新更多的信息
看看下面的截图:
因此,它是在ASTNode.resolveAnnotations()
方法线#797:
A)的状态if ((method.tagBits & TagBits.AnnotationResolved) != 0) return annotations;
将返回null
作为注释甚至
B)源注释@GetAction("/hello")
提出,因为
C)的this.annotations
场null
和
d)如果条件(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>