我发现从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>
答案 0 :(得分:0)
问题解决了!只需添加以下行:
opt(map, OPTION_TargetPlatform, "1.6");
问题是由ECJ中的默认JDK版本为1.2引起的,它不支持注释