2015-05-23 63 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,不支持註釋