我有一个名为“ 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);
}
搜索代码工作正常,问题出在我对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 ....
根据this site的提示。我可以使用CallHierarchy API。
在用于创建搜索范围的方法中设置断点,并在调试模式下启动运行时工作台。当您在此处调用“呼叫层次结构”时,它应该停止并让您确切地了解其工作方式。