2015-05-23 60 views
0

我发现从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(内存编译)。

任何人都曾遇到过这个问题,并得到任何线索?

更新更多的信息

看看下面的截图: enter image description here

因此,它是在ASTNode.resolveAnnotations()方法线#797:

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

B)源注释@GetAction("/hello")提出,因为

C)的this.annotationsnull

d)如果条件(method.tagBits & TagBits.AnnotationResolved) != 0计算为真

更新2

它看起来像我拍摄的画面太早,所以一旦过程完成,我发现注释信息被存储:

enter image description here

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

enter image description here

注意我使用ECJ 4.4.1:

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

回答

0

问题解决了!只需添加下面几行:

opt(map, OPTION_TargetPlatform, "1.6"); 

问题是默认JDK版本造成的是ECJ 1.2,不支持注释