Eclipse JDTライブラリを使用してJavaソースコードを解析し、クラスで定義されているすべてのメソッドにアクセスします。コードの本体に「//xxxx」のようなコメントが含まれている場合、パーサーはコメントの前に停止し、メソッドmain(String [] args)は無視されます。
これは、解析のサンプルケースです。
public class HelloWorld {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
//Set the age
this.age = age;
System.out.println();
}
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
if(true) {
hw.setAge(10);
}
}
}
これは、上記のサンプルケースを解析するために私が書いたコードです。
public class Parser {
/**
* Parse java program in given file path
* @param filePath
*/
public void parseFile(String filePath) {
System.out.println("Starting to parse " + filePath);
char[] source = readCharFromFile(filePath);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source);
parser.setResolveBindings(true);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
@Override
public boolean visit(MethodDeclaration node) {
return true;
}
@Override
public void endVisit(MethodDeclaration node) {
System.out.println("Method " + node.getName().getFullyQualifiedName() + " is visited");
}
});
}
}
これを使用してコードを解析すると、メソッドgetName()
、、、が無視され ている間にアクセスされたという結果しか得られません。setName()
getAge()
getAge()
main()
あなたの答えを楽しみにしています。ありがとう。