我想映射變量聲明和方法調用到他們被聲明/調用的地方。我正在開發一個獨立的應用程序。如何找到哪個方法被調用和變量聲明在
這是我到目前爲止有:
public class HelloWorld {
static ArrayList methodsDeclared = new ArrayList();
static ArrayList methodsInvoked = new ArrayList();
static ArrayList variablesDeclared = new ArrayList();
public static void main(String[] args) {
...
public static void parse(String file) {
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(file.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
public boolean visit(MethodDeclaration node) {
methodsDeclared.add(node);
return false;
}
public boolean visit(MethodInvocation node) {
methodsInvoked.add(node);
return false;
}
public Boolean visit(VariableDeclarationFragment node) {
variablesDeclared.add(node);
return false;
}
}
}
}
截至去年底,我有3周用的ArrayList我需要的信息。文件中的方法,聲明的變量和調用的方法。我希望能夠具體找到在哪些方法(如果不是類變量)以及從哪些方法調用哪些方法中定義了哪些變量。有任何想法嗎?
這些信息相當有幫助,但是,驅使我問這個問題的關鍵方面是因爲我無法找到一種方法將VariableDeclarationFragment的getParent與methodDeclaration匹配。你建議在API中找到一個名爲FindMethodDeclaration的方法,但是,根據我的經驗,沒有任何方法存在。我可以將它們轉換爲字符串並使用String.compareTo這樣的stull,但是,我認爲這很雜亂,想要查看社區是否有更好的解決方案? – Jimmy
@Jimmy FindMethodDeclaration()方法只是一個while循環和getParent()調用的結合。你直接進入父節點,直到你點擊了方法聲明。類似於'while(currentNode!= null){if(currentNode is MethodDeclaration){\ o /} else {currentNode = currentNode.getParent(); }}'。將節點轉換爲字符串並比較字符串是不可取的。您可以使用解析後的樹,包含所有信息(名稱,孩子,父母,類型,內容,興趣愛好,朋友,工作......),請使用它們。 – Progman