Могу ли я использовать поисковую систему 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
аст узлы.