如何在 JDT 中查找局部变量引用?
How to find local variable references in JDT?
我有一个 VariableDeclarationStatement
我正在通过访问 AST 坚持下去。想在声明范围内找到对这个局部变量的所有引用。这包括当前范围内的嵌套块。
一种方法是访问下面的所有节点并收集具有此 SimpleName
的语句。但这太麻烦了。 JDT 中是否有 API 来“查找”和 return 此类语句的列表。
您可以使用 JDT SearchEngine
API 检索对特定 AST 节点的引用。
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { yourProject });
//IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); // Use this if you dont have the IProject in hand
SearchPattern searchPattern = SearchPattern.createPattern(field,
IJavaSearchConstants.REFERENCES);
SearchRequestor requestor = new SearchRequestor() {
@Override
public void acceptSearchMatch(SearchMatch match) {
System.out.println(match.getElement());
}
};
SearchEngine searchEngine = new SearchEngine();
searchEngine.search(searchParttern,
new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope,
requestor, new NullProgressMonitor());
我没有检查过,但你可以尝试将范围指定为 IType java 元素。
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {iType});
有关更多详细信息,请使用下面的 link 并导航至 'Using the Java search engine' 部分。
http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm
编辑:如果解决了依赖关系,您可以使用下面的代码从VariableDeclarationNode
:
中获取java元素
IVariableBinding binding = variableDeclarationNode.resolveBinding()
IJavaElement variableElement = binding.getJavaElement();
我有一个 VariableDeclarationStatement
我正在通过访问 AST 坚持下去。想在声明范围内找到对这个局部变量的所有引用。这包括当前范围内的嵌套块。
一种方法是访问下面的所有节点并收集具有此 SimpleName
的语句。但这太麻烦了。 JDT 中是否有 API 来“查找”和 return 此类语句的列表。
您可以使用 JDT SearchEngine
API 检索对特定 AST 节点的引用。
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { yourProject });
//IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); // Use this if you dont have the IProject in hand
SearchPattern searchPattern = SearchPattern.createPattern(field,
IJavaSearchConstants.REFERENCES);
SearchRequestor requestor = new SearchRequestor() {
@Override
public void acceptSearchMatch(SearchMatch match) {
System.out.println(match.getElement());
}
};
SearchEngine searchEngine = new SearchEngine();
searchEngine.search(searchParttern,
new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope,
requestor, new NullProgressMonitor());
我没有检查过,但你可以尝试将范围指定为 IType java 元素。
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {iType});
有关更多详细信息,请使用下面的 link 并导航至 'Using the Java search engine' 部分。
http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm
编辑:如果解决了依赖关系,您可以使用下面的代码从VariableDeclarationNode
:
IVariableBinding binding = variableDeclarationNode.resolveBinding()
IJavaElement variableElement = binding.getJavaElement();