如何在JDT中查找局部变量引用?

时间:2015-03-05 06:53:00

标签: java eclipse-jdt

我有一个VariableDeclarationStatement,我通过访问AST来坚持。想在声明范围内找到对这个局部变量的所有引用。这包括当前作用域中的嵌套块。

执行此操作的一种方法是访问下面的所有节点并收集具有此SimpleName的语句。但这太麻烦了。 JDT中是否有一个API来“查找”并返回此类语句的列表。

1 个答案:

答案 0 :(得分:3)

您可以使用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});

有关详细信息,请使用以下链接并导航至“使用Java搜索引擎”#39;部分。

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();