Javaのソースコードから内部クラスを解析する方法

火星:

私が使用しhttps://github.com/javaparser/javaparserを Javaソースコードを解析します

私は内部クラスを解析する方法の多くを試してみました。このような :

class A {
    int x;
    public void method2() {...}
        class B {
            int number;
            public void methods() {...}
        }
    }

私は、クラスBおよびそれの変数やメソッドを解析しようとするが、私は失敗しました。

Bクラスを取得する方法を示すための任意の例はありますか?

私はこのように、クラスAのメソッド名と内容や変数の内容を解析することができます。

 CompilationUnit cu = JavaParser.parse(in);

 ClassVisitor classVisitor = new ClassVisitor();
 classVisitor.visit(cu, null);

 class ClassVisitor extends VoidVisitorAdapter<Void> {
    @Override
    public void visit(ClassOrInterfaceDeclaration n, Void arg) {
        System.out.println(n.getFields());

        // get class methods
        for(MethodDeclaration method : n.getMethods()) {
            System.out.println("Name :" + method.getName());
            System.out.println("Body :" + method.getBody().get());
           }
        }
    }
}

しかし、私は失敗した、クラスBのvaribleと方法を解析してみてください!

このように、CompilationUnit.getTypesを試してみてください():

CompilationUnit cu = JavaParser.parse(in);

for(TypeDeclaration<?> type : cu.getTypes()) {
    log.info("Type Name :{}", type.getName());
}

結果:nsdictionary.parse.JavaCodeParse:タイプ名:A

Bクラスに解決されません

火星:

それを必要とする誰かのために:

for(TypeDeclaration type : cu.getTypes()) {
        // first give all this java doc member
        List<BodyDeclaration> members = type.getMembers();
        // check all member content
        for(BodyDeclaration member : members) {
            // if member state equal ClassOrInterfaceDeclaration, and you can identify it which is inner class
            if(member.isClassOrInterfaceDeclaration()) {
                log.info("class name :{}", member.asClassOrInterfaceDeclaration().getName());
                // get inner class method
                for(MethodDeclaration method : member.asClassOrInterfaceDeclaration().getMethods()) {
                    log.info("Method Name :{}", method.getName());
                }
                VerifyInnerClassAndParse(member.asClassOrInterfaceDeclaration());
            }
        }
    }

あなたは多くの内部クラスをHAVA場合、単に再帰的なメソッドを書きます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=212243&siteId=1