Как я могу искать ссылки на поле в AST или CompilationUnit в затмении? - PullRequest
1 голос
/ 04 мая 2011

Привет,

Я разрабатываю плагин Eclipse.Мне нужно найти все ссылки в источнике, используя AST или jdt.core.dom или что-то в этом роде.Мне нужны эти ссылки, такие как ASTNodes, чтобы получить родительский узел и проверить несколько вещей в выражении, где есть ссылки.Заранее спасибо.


Отредактировано:

Я хочу конкретизировать немного, Моя проблема в том, что я пытаюсь поймать некоторые ссылки на константу, но ... У меня естьНе знаю, как я могу сделать, чтобы поймать в матчах этой ссылки.Мне нужно проверить выражения, к которым относятся ссылки на определенную константу .Я получаю только источник метода, в котором они используются.

Я думаю, что проблема заключается в объеме или шаблоне:

pattern = SearchPattern.createPattern(field, IJavaSearchConstants.REFERENCES);


scope = SearchEngine.createJavaSearchScope(declaringType.getMethods());

Заранее спасибо!

1 Ответ

3 голосов
/ 04 мая 2011

Я использовал что-то вроде:

  1. Поиск объявления метода, возвращает IMethod
  2. Поиск ссылок на IMethod, запись этих IMethods
  3. Для каждого возвращенного IMethod создайте AST из его модуля компиляции

Поиск объявлений или ссылок выглядит следующим образом.

SearchRequestor findMethod = ...; // do something with the search results
SearchEngine engine = new SearchEngine();
IJavaSearchScope workspaceScope = SearchEngine.createWorkspaceScope();
SearchPattern pattern = SearchPattern.createPattern(searchString,
            IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS,
            SearchPattern.R_EXACT_MATCH);
SearchParticipant[] participant = new SearchParticipant[] { SearchEngine
            .getDefaultSearchParticipant() };
engine.search(pattern, participant, workspaceScope, findMethod,
                monitor);

Получив ссылки на IMethod, вы можетедоберитесь до AST, используя:

ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
if (methodToSearch.isBinary()) {
    parser.setSource(methodToSearch.getClassFile());
} else {
    parser.setSource(methodToSearch.getCompilationUnit());
}
CompilationUnit cu = (CompilationUnit) parser.createAST(null);

См. http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm для получения дополнительной информации о поиске Java, модели Java и AST.

...