2013-01-24 32 views
2

我发现Java: Find all callers of a method – get all methods that call a particular method提供了关于如何查找特定方法的所有调用者的提示。如何使用JDT获取静态字段的所有参考

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

例如,当我有静态zAnotherClass,并且它与ClassA访问,如何让IMethodClassA#moved

public class AnotherClass { 
    public static int z = 20; 
    .... 
} 


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

回答

4

该示例基于org.eclipse.jdt.internal。*类,因为JDT SearchEngine API是全功能的,所以我认为您不需要付出太多努力来完成此操作。在你的情况下,下面的代码就足够了:

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 
    } 
+0

我编辑了你的代码,使它适用于我。谢谢你的帮助。 – prosseek

0

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