我发现从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计算为true。
更新2
看起来我捕捉到的屏幕太早了,所以一旦进程完成,我发现注释信息就会被存储起来:

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

Note I使用ECJ 4.4.1:
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.4.1</version>
</dependency>发布于 2015-05-24 00:39:24
问题解决了!只需添加以下几行:
opt(map, OPTION_TargetPlatform, "1.6");此问题是由ECJ中默认的JDK版本为1.2引起的,该版本不支持注释
https://stackoverflow.com/questions/30417882
复制相似问题