-->

How to get all the references of static field with

2020-03-29 07:36发布

问题:

I found Java: Find all callers of a method – get all methods that call a particular method that gives a hint on how to find all the callers of a specific method.

Then, how to get the users of a static field?

For example, when I have static z in AnotherClass, and it is accessed with ClassA, how to get the 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;
    }

回答1:

The example is base on the org.eclipse.jdt.internal.* classes, I think you don't need to take so much effort to do this, since JDT SearchEngine API is full-featured. In your case, the following code will be enough:

    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
    }


回答2:

You need to use JDT Core SearchEngine API for finding (references of) java elements.