使用搜索引擎在Java / eclipse中实现调用层次结构(获取调用特定方法的所有方法)

问题描述 投票:3回答:2

我有一个名为“ javaProject”的Java项目,它具有两个类Hello和ReferenceHello。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS90enNNWC5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

Hello.java

package com.prosseek.test;

public class Hello {
    public void world()
    {
        System.out.println("Hello world");
    }

    public void referWorld()
    {
        world();
    }
}

ReferenceHello.java

package com.prosseek.test;

public class ReferenceHello {
    public void referWorld()
    {
        Hello h = new Hello();
        h.world();
    }
}

我可以使用“搜索/ Java”对话框找到所有引用(或调用)Hello.world()的方法。

“在此处输入图像描述”

我想使用Search Engine以编程方式获得相同的结果。这是我想出的代码,但是它什么也不返回。

public void testIt() throws CoreException {
    String projectName = "javaProject";
    IJavaProject javaProject = JavaProjectHelper.createJavaProject(projectName);

    String targetMethodName = "world";
    SearchPattern pattern = SearchPattern.createPattern(
            targetMethodName, 
            IJavaSearchConstants.METHOD, 
            IJavaSearchConstants.REFERENCES,
            SearchPattern.R_CASE_SENSITIVE // <--- ????
            );

    boolean includeReferencedProjects = false;
    IJavaElement[] javaProjects = new IJavaElement[] {javaProject};
    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(javaProjects, includeReferencedProjects); // <--- ????

    SearchRequestor requestor = new SearchRequestor() {
        @Override
        public void acceptSearchMatch(SearchMatch match)
                throws CoreException {
            System.out.println(match.getElement());
        }
    };
    SearchEngine searchEngine = new SearchEngine();
    searchEngine.search(
            pattern, 
            new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant()}, 
            scope, 
            requestor, 
            null);      
}
  • 我的搜索代码可能有什么问题?
  • 还有其他方法以编程方式获取eclipse插件中的呼叫层次结构吗?
  • 已添加

搜索代码工作正常,问题出在我对JavaProjectHelper.createJavaProject的错误使用。我应该打开现有的Java项目,而不要创建一个同名的Java项目。结果,.metadata损坏了,没有搜索任何内容。

使用我的新getJavaProject方法,现在一切正常。

private IJavaProject getJavaProject(String projectName) throws CoreException
{
    IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
    IProject project= root.getProject(projectName);
    if (!project.exists()) {
        project.create(null);
    } else {
        project.refreshLocal(IResource.DEPTH_INFINITE, null);
    }

    if (!project.isOpen()) {
        project.open(null);
    }

    IJavaProject jproject= JavaCore.create(project);

    return jproject;    
}
    

我有一个名为“ javaProject”的Java项目,它具有两个类Hello和ReferenceHello。 Hello.java包com.prosseek.test;公共类你好{public void world(){System.out ....

java eclipse search
2个回答
3
投票

根据this site的提示。我可以使用CallHierarchy API。


2
投票

在用于创建搜索范围的方法中设置断点,并在调试模式下启动运行时工作台。当您在此处调用“呼叫层次结构”时,它应该停止并让您确切地了解其工作方式。

© www.soinside.com 2019 - 2024. All rights reserved.