火星:
私が使用し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場合、単に再帰的なメソッドを書きます