4

EclipseのJavaエディターで現在選択されているASTを取得する必要があります。基本的に、選択したJavaコードを他の形式(おそらく他の言語やXMLなど)に変換したいと思います。だから、私は選択のためにASTを取得する必要があると思います。現在、私は選択を単純なテキストとして取得することができます。そのような問題を解決する方法はありますか?すでにありがとう!

4

4 に答える 4

7

JDTプラグイン開発者向けの便利なツールがいくつかあります。特に、探しているものをほぼ実行するASTビューです。したがって、必要なのはAST Viewのコードを取得し、それがどのように行われるかを確認することだけです。

プラグインは、次の更新サイトからインストールできます:http ://www.eclipse.org/jdt/ui/update-site

JDT ASTView

プラグインスパイ(この記事で詳細を読む)を使用して、ビュークラスの掘り下げを開始します。

あなたはJDTのささいな(そしてしばしば文書化されていない)領域に旅行しているので、コード掘り出しスキルを開発することはあなたのパフォーマンスを大いに改善するでしょう。

于 2009-10-28T11:08:58.000 に答える
4

次のコードは、CompilationUnitEditorから現在選択されているコードのASTノードを提供します。

        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は、JDTUIプラグインへのエントリーポイントです。

于 2013-08-01T03:52:44.317 に答える
1

メソッドを使用し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クラスに光を当てたいと思いました。

于 2010-11-18T22:58:21.600 に答える
0

IIRC、EclipseASTの各ノードにはオフセットが含まれています。あなたがする必要があるのは、あなたが興味を持っているコードの部分のオフセットを計算し、次にそれらのオフセット内のノードを選択するためにASTを歩くことです。

于 2009-11-05T17:29:48.090 に答える