ECJ コンパイラからコンパイルされたバイトコードに、アノテーション情報が欠落していることがわかりました。
javac によってコンパイルされたバイトコードから逆コンパイルされたソース コード:
public class HelloWorldApp {
@GetAction("/hello")
public String sayHello() {
return "Hello World!";
}
}
ECJ によってコンパイルされたバイトコードから逆コンパイルされたソース コード:
public class HelloWorldApp {
public String sayHello() {
return "Hello World!";
}
}
@GetAction("/hello")
そのため、ECJ によってコンパイルされたバイトコード (メモリ コンパイル内) には明らかに注釈がありません。
以前にこの問題に遭遇したことがあり、手がかりを得た人はいますか?
より多くの情報で更新
次のスクリーンショットを見てください。
したがって、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
画面をキャプチャするのが早すぎたようです。プロセスが完了すると、注釈情報が保存されていることがわかりました。
ただし、結果ファイルから注釈情報を取得することはできません。ここをクリックして、生成されたバイトコード ファイルをダウンロードします。
ECJ 4.4.1 を使用していることに注意してください。
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.4.1</version>
</dependency>