Hello と ReferenceHello の 2 つのクラスを持つ「javaProject」という名前の Java プロジェクトがあります。
Hello.java
package com.prosseek.test;
public class Hello {
public void world()
{
System.out.println("Hello world");
}
public void referWorld()
{
world();
}
}
リファレンスHello.java
package com.prosseek.test;
public class ReferenceHello {
public void referWorld()
{
Hello h = new Hello();
h.world();
}
}
Search/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 プロジェクトを開くべきでした。その結果、.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;
}