AST для текущего выбранного кода в редакторе Eclipse? - PullRequest
4 голосов
/ 28 октября 2009

Мне нужно получить AST для текущего выбора в редакторе Java для затмения. По сути, я хочу преобразовать выбранный Java-код в какую-то другую форму (возможно, в какой-то другой язык или XML и т. Д.) Так что я думаю, мне нужно получить АСТ для выбора. В настоящее время я могу получить выделение в виде простого текста. Есть ли выход для такой проблемы? Спасибо уже !!

Ответы [ 4 ]

7 голосов
/ 28 октября 2009

Существует несколько удобных инструментов для разработчиков плагинов JDT, особенно AST View , который делает в значительной степени то, что вы ищете. Итак, все, что вам нужно сделать, это взять код для AST View и проверить, как это делается.

Плагин можно установить со следующего сайта обновлений: http://www.eclipse.org/jdt/ui/update-site

JDT ASTView

Используйте шпион плагина (подробнее об этом в этой статье ), чтобы начать копаться в классах представления.

Вы путешествуете по менее тривиальным (и часто недокументированным) областям JDT, развитие ваших навыков копания кода значительно повысит вашу производительность.

4 голосов
/ 01 августа 2013

Следующий код предоставляет вам узел AST текущего выбранного кода из CompilationUnitEditor.

        ITextEditor editor = (ITextEditor) HandlerUtil.getActiveEditor(event);
        ITextSelection sel  = (ITextSelection) editor.getSelectionProvider().getSelection();
        ITypeRoot typeRoot = JavaUI.getEditorInputTypeRoot(editor.getEditorInput());
        ICompilationUnit icu = (ICompilationUnit) typeRoot.getAdapter(ICompilationUnit.class);
        CompilationUnit cu = parse(icu);
        NodeFinder finder = new NodeFinder(cu, sel.getOffset(), sel.getLength());
        ASTNode node = finder.getCoveringNode();

JavaUI - это точка входа в плагин JDT UI.

1 голос
/ 19 ноября 2010

Используйте метод org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.getActiveEditorJavaInput(). Это возвращает элемент Java, отредактированный в текущем активном редакторе. Тип возвращаемого значения - org.eclipse.jdt.core.IJavaElement, но если редактируется файл Java, тип времени выполнения будет org.eclipse.jdt.core.ICompilationUnit.

Чтобы получить AST, то есть org.eclipse.jdt.core.dom.CompilationUnit, вы можете использовать следующий код:

public static CompilationUnit getCompilationUnit(ICompilationUnit icu,
        IProgressMonitor monitor) {
    final ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(icu);
    parser.setResolveBindings(true);
    final CompilationUnit ret = (CompilationUnit) parser.createAST(monitor);
    return ret;
}

Имейте в виду, что это для Java> = 5. Для более ранних версий вам нужно переключить аргумент на ASTParser.newParser().

Я понимаю, что на этот вопрос был дан ответ, но я хотел пролить свет на класс EditorUtility, который здесь весьма полезен.

0 голосов
/ 05 ноября 2009

IIRC, каждый узел в Eclipse AST содержит смещение. Все, что вам нужно сделать, это вычислить смещения для интересующей вас части кода, а затем пройти AST, чтобы выбрать узлы в этих смещениях.

...