2012-06-20 67 views

回答

1

ASTNode具有處理字符偏移量的getStartPosition()和getLength()方法。要將字符偏移量轉換爲行號,應使用CompilationUnit的getLineNumber()方法。 CompilationUnit是AST樹的根。

15

您可以使用下面的代碼

int lineNumber = compilationUnit.getLineNumber(node.getStartPosition()) - 1; 

編譯單元可以使用下面的代碼

ASTParser parser = ASTParser.newParser(AST.JLS3); 

    // Parse the class as a compilation unit. 
    parser.setKind(ASTParser.K_COMPILATION_UNIT); 
    parser.setSource(source); // give your java source here as char array 
    parser.setResolveBindings(true); 

    // Return the compiled class as a compilation unit 
    CompilationUnit compilationUnit = parser.createAST(null); 

您可以訪問節點獲得(說MethodDeclaration節點得到ASTNode的行號)使用下面的代碼:

compilationUnit.accept(new ASTVisitor() { 

     public boolean visit(MethodDeclaration node) {  
      int lineNumber = compilationUnit.getLineNumber(node.getStartPosition()) - 1; 
      return true; 
     } 
    }); 
1

除了一般解決方案已經讀取如果您需要ASTNode的行號,包括在ASTNode前面寫入的空白空間或潛在註釋,則可以使用另一個。然後你可以使用:

int lineNumber = compilationUnit.getLineNumber(compilationUnit.getExtendedStartPosition(astNode)) 

API

返回給定節點的擴展起始位置。與ASTNode.getStartPosition()和ASTNode.getLength()不同,擴展源範圍可以在節點正常源範圍之前或之後包含註釋和空白。