0

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>
4

1 に答える 1