Могу ли я использовать поисковую систему JDT при анализе источника из JDT AST

Я использую JDT AST для анализа данного источника. Я хочу найти ссылки на данный объект / переменную, когда он вызывает релевантный посетитель при использовании AST. Например: рассмотрим следующий код:

public class SampleClass {
    public void printMe(){
        System.out.println("hello");
    }

    public static void main(String a[]){
        SampleClass s =new SampleClass();
        // do some other work
        s.printMe();
    }
}

Когда я разбираю приведенный выше код, когда дело доходит до объявления переменной "s", он вызывает метод посетителя типа "VariableDeclarationFragment". В этот момент я хочу выяснить все ссылки на переменные "s" перед тем, как перейти к остальным строкам кода. Это возможно? Я подумал об использовании JDT SearchEngine и позвонил в этот момент, чтобы разрешить ссылки отдельно. Но не удалось. Могу ли я сделать это, используя только AST?

Обратите внимание, что я использую JDT AST в отдельной программе, а не в качестве проекта плагина Eclipse. Я немного сбит с толку, могу ли я использовать SearchEngine в этом случае, так как он не может разрешить типы IJava * для данной единицы кода (класс, метод и т. Д.). Пожалуйста, поделитесь своим опытом, чтобы разобраться в этом.

1 ответ

Использование поисковой системы является излишним. Поисковая система предназначена для межфайлового поиска. И без запуска рабочей среды (т. Е. Без экземпляра Eclipse в фоновом режиме) вы не сможете использовать поисковую систему.

Похоже, вы только хотите найти ссылки на переменные в одном файле. Лучше всего создать посетителя, который посетит весь файл и будет искать ссылки на переменную. Поскольку это переменные и их область действия не выходит за пределы метода, в котором они объявлены, вам нужно только посетить этот метод.

Что-то вроде этого:

class MyVariableVisitory extends ASTVisitor {
    public boolean visit(SimpleName node) {
        if (node.getIdentifier().equals(variableToLookFor)) {
            acceptMatch(node);
        }
        return true;
    }
}

Поскольку вы ищете только ссылки на переменные, вам нужно только посмотреть на Name аст узлы.

Другие вопросы по тегам