2010-02-02 219 views
3

我想找出一個包中使用AST api引用調用的行號。 我該怎麼做?遍歷AST節點

+0

什麼包裝,什麼API? – 2010-02-02 11:12:49

+0

我有來自項目的編譯單元。現在我想在本單元中搜索特定的方法參考usint AST(抽象語法樹)api – Steven 2010-02-02 11:15:33

回答

2

你如何在這個papercut article一個CompilationUnit的方法中搜索一個例證:

for (ICompilationUnit unit : mypackage.getCompilationUnits()) { 
IType[] types = unit.getTypes(); 
for (int i = 0; i < types.length; i++) { 
    IType type = types[i]; 
    IMethod[] methods = type.getMethods(); 
  • 如果該方法是一個ASTNode,您可以使用ASTNode.getStartPosition()功能。
  • 如果IMember的編譯單元是CompilationUnit,您可以使用在CompilationUnit.getLineNumber(position)
+0

你確定它的getoccurencecount獲得位置? – Steven 2010-02-02 12:20:08

2

CompilationUnit.getLineNumber(INT位置)

位置是相對於所述CompilationUnit對象

文檔:

返回原來的對應 給定源字符位置 行號源字符串。編譯單元 的 初始行編號爲1,並且每行延伸 至行尾分隔符 的最後一個字符。最後一個 行延伸通過 源字符串的末尾,並且沒有行 定界符。例如,源 字符串類A \ n {\ n}有3行 對應於包含字符 範圍[0,7],[8,9]和[10,10]。 返回-1的字符位置 不對應任何來源 行或-2如果沒有行號 信息可用於此 編譯單元。

+0

我該如何知道該方法的位置? – Steven 2010-02-02 11:59:38

+0

的位置相對於CompilationUnit。 – nanda 2010-02-02 12:04:22

+0

我需要源文件 – Steven 2010-02-02 12:23:21