2

Class指定されたものからすべての依存関係を抽出したい(クラスとそのすべての依存関係でArquillianClassテストを作成するため)。

私は(Javassistを使用してCtClass.getRefClasses()そうすることにほとんど成功していませんが、ジェネリックに固執しています(Javassistはジェネリックを正しく解析しているようですが、それらを取得するためのAPIがありません)。

inspectこれが現時点での私の再帰的方法の核心です:

for (String className : (Iterable<String>)ClassPool.getDefault().get(klass.getName()).getRefClasses()) {
    try {
        inspect(Class.forName(className), classSet); // recursion
    } catch ( // ClassNotFoundException and NoClassDefFoundError handling
    }
}

Classその反復は、すべてのes 依存関係を取得するために正しく機能しているようClassですが、検査したいがたとえば a を操作している場合、返された byからは取得List<MyClass>できません。MyClassCollectiongetRefClasses()

.classファイルを確認したところ、バイトコードにその情報が含まれています ( Ljava/util/List<Lmy/company/MyClass;>;)。

特定の から使用済みのすべてのClassesを抽出するために使用できる別の API を知っていますClassか?

4

1 に答える 1

3

ASMを使用して、型命令や変数宣言などにアクセスするたびにすべてのクラスを記録するビジターを実装できます。シグネチャ記述子( Ljava/util/List<Lmy/company/MyClass;>;) も取得できます。

ただし、すべての依存関係がクラス ファイルに存在するわけではありません。を作成new ArrayList<MyClass>して変数に代入しないと、型引数の情報が失われます。

于 2012-06-07T09:50:41.723 に答える