0

ASM 4.0 を使用して依存関係検索ツールを作成していますが、解決できないまれなケースが見つかりました。私が抱えている問題は、以下のコードで MyClass の使用法を特定することに関係しています。

public void aMethod() {
   new ArrayList<? extends MyClass>();
}

ArrayList の使用は MethodVisitor.visitTypeInst() を使用して識別できますが、ジェネリック型パラメーターでの使用を識別するためにそのスコープで使用できるシグネチャ メソッドはありません。ローカル変数が作成されないため、 MethodVisitor.visitLocalVariable() も解決策ではありません。ローカル変数が明示的に宣言されている場合:

public void aMethod() {
    ArrayList<? extends MyClass> list = new ArrayList<? extends MyClass>();
}

MethodVistor.visitLocalVariable() は、署名パラメーターを介してジェネリック型情報へのアクセスを提供するため、正常に機能します。ジェネリック型パラメーターにアクセスする方法が見つからないのは、ローカル var が宣言されていない暗黙の場合のみです。

このコードの一般的な情報を使用してクラス属性にアクセスする方法があると想定していますが、これを行う方法がわかりません。

助けてくれてありがとう!!

4

2 に答える 2

2

メソッド本体の型引数情報は、バイトコード生成中に破棄されます。バイトコードを分析することによってそれを得ることができないでしょう。

于 2012-02-01T15:52:03.337 に答える
0

この情報を取得する唯一の方法は、デバッグ情報を使用することです。そこにある場合は、ローカル変数の名前と型を推測することができます。そこにない場合は、クラスの使用方法に基づいて型を推測することしかできません。

于 2012-02-01T22:09:02.680 に答える