EclipseのJavaエディターで現在選択されているASTを取得する必要があります。基本的に、選択したJavaコードを他の形式(おそらく他の言語やXMLなど)に変換したいと思います。だから、私は選択のためにASTを取得する必要があると思います。現在、私は選択を単純なテキストとして取得することができます。そのような問題を解決する方法はありますか?すでにありがとう!
4 に答える
JDTプラグイン開発者向けの便利なツールがいくつかあります。特に、探しているものをほぼ実行するASTビューです。したがって、必要なのはAST Viewのコードを取得し、それがどのように行われるかを確認することだけです。
プラグインは、次の更新サイトからインストールできます:http ://www.eclipse.org/jdt/ui/update-site
プラグインスパイ(この記事で詳細を読む)を使用して、ビュークラスの掘り下げを開始します。
あなたはJDTのささいな(そしてしばしば文書化されていない)領域に旅行しているので、コード掘り出しスキルを開発することはあなたのパフォーマンスを大いに改善するでしょう。
次のコードは、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プラグインへのエントリーポイントです。
メソッドを使用し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クラスに光を当てたいと思いました。
IIRC、EclipseASTの各ノードにはオフセットが含まれています。あなたがする必要があるのは、あなたが興味を持っているコードの部分のオフセットを計算し、次にそれらのオフセット内のノードを選択するためにASTを歩くことです。