#author("2021-12-14T02:32:34+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

Javaの開発プラットフォームとしてとても使いやすいEclipseですが、ソースコードなどを解析するEclipseプラグインなども、比較的容易に開発することができます。

Eclipseにはいろいろなコード解析方法が存在し、ちょっとややこしいです。とりあえず書きにメモっとく事にします。

**ICompilationUnitを起点にして、ソースコードを順次解析する方法 [#m21cf123]
Eclipse/プラグイン開発のTIPS集/org.eclipse.jdt.core.ICompilationUnit に書いたとおり、ICompilationUnit はIParentというインタフェースを実装していて、これのメソッド
 IJavaElement[] getChildren() throws JavaModelException;
を用いることで、ソースコードを上から順次解析することができます。

**CompilationUnitに対して、Visitorパターンを用いてコードを走査する方法 [#gfadb319]
[[ソースコードを解析するパーサASTParser>Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパーサASTParser]]に書いたとおり、 org.eclipse.jdt.core.ICompilationUnitからorg.eclipse.jdt.core.dom.CompilationUnit を生成し、そのインスタンスに対してVisitorパタンを適用してソースコードを走査することができます。


**TIPS集 [#p101f5a1]
*** パッケージエクスプローラからICompilationUnit [#w6b2b07d]
アクションやハンドラ経由でパッケージエクスプローラからICompilationUnitを取得したいケースがありますが、以下のようにやればOKですね。
 public Object execute(ExecutionEvent event) throws ExecutionException {
   ISelection selection = HandlerUtil.getActiveMenuSelectionChecked(event);
   if (selection instanceof IStructuredSelection) {
     IStructuredSelection sselection = (IStructuredSelection) selection;
     Object firstElement = sselection.getFirstElement();
     if (firstElement instanceof ICompilationUnit) {
       ICompilationUnit unit = (ICompilationUnit) firstElement;
       // 色々処理。
       }
     }
   }
   return null;
 }



**関連リンク [#u02a7b3b]
-[[Yahoo!グループ : Eclipse ML メッセージ : 2062 件中 924 件目を表示>http://groups.yahoo.co.jp/group/eclipse-ml/message/924?expand=1]]
-[[org.limy.eclipse.code.accessor.AccessorUtils>http://www.limy.org/dest/limy-eclipse/javasrc/org/limy/eclipse/code/accessor/AccessorUtils.html]]

----
この記事は
#vote(おもしろかった[2],そうでもない[0])
#vote(おもしろかった[3],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS