Java TreePathScanner APIを使用して、指定されたコンパイルから生成されるクラスファイルのリストを調べようとしています。たとえば、次のソースコード:Java TreePathScannerが本体なしの新しいクラスステートメントでvisitClassを呼び出さない
- InnerClass.class
- InnerClass $ 1.class
- InnerClass $ InnerInnerClass.class
public class InnerClass {
private final InnerInnerClass clazz = new InnerInnerClass();
private class InnerInnerClass {
}
}
は、以下のファイルが生成されます。
しかし、私のTreePathScannerサブクラスでは、visitClassはInnerClassクラスに対して2回しか呼び出されず、I nnerInnerClassクラスは、新しいクラスステートメントから作成された匿名の名前付きクラスではありません。予想通り、次の作品へのソースを変更する:
public class InnerClass {
private final InnerInnerClass clazz = new InnerInnerClass() { };
private class InnerInnerClass {
}
}
マイツールの完全なソースコードを参照できるhere、特にArtifactScanner.javaです。
これはAPIのバグまたは欠陥です。特定のコンパイルユニットのソースコードから生成されるすべてのバイナリ名を取得する方法が他にないように思われるためです。何か不足していますか?