如何使用JDT获取静态字段的所有引用

我找到了Java:查找方法的所有调用者 – 获取调用特定方法的所有方法,该方法提供了如何查找特定方法的所有调用方的提示。

那么,如何获得静态字段的用户?

例如,当我在AnotherClass有静态z ,并且使用ClassA访问它时,如何ClassA#moved IMethod ClassA#moved

 public class AnotherClass { public static int z = 20; .... } public class ClassA { public int moved(int x, int y) { int temp = AnotherClass.z; } 

该示例基于org.eclipse.jdt.internal。*类,我认为您不需要花费太多精力来完成此任务,因为JDT SearchEngine APIfunction齐全。 在您的情况下,以下代码就足够了:

  IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); IProject plainProject = root.getProject("some project"); IJavaProject javaProject = JavaCore.create(plainProject); try { IType type = javaProject.findType("foo.bar.AnotherClass"); IField field = type.getField("z"); //IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { plainProject }); SearchPattern searchParttern = 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()); } catch (Exception e) { // some exception handling you need to do } 

您需要使用JDT Core SearchEngine API来查找(引用)java元素。