background preloader

ASTPersor

Facebook Twitter

Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパーサASTParser - きのさいと. ASTParserとは † さてさて、いままでEclipseのウィジェットとか、リスナーとか比較的IDEよりでないところを見てきましたが、今回はソースコードを解析するパーサ、ASTParserを見てみたいと思います。

Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパーサASTParser - きのさいと

ASTParserはパッケージエクスプローラなどに表示されているJavaソースからソースコードを取得し解析するとか、ユーザ入力値に応じてJavaのソースコードを生成するとか、Javaソースをプログラマブルに操作するときに使用します。 やってみる † 触ってみましょう。 ソースコード情報はパッケージエクスプローラから取得するとして、そのクラスを操作するリーダを作ってみました。 このリーダは、コンストラクタでわたってくるJavaソースモデル(I CompilationUnit ? ここで実際に解析を行っているのが、 ヘルプ - Rational Software Architect. Org.eclipse.jdt.astview - AST View. Purpose A view to visualize the AST (abstract syntax tree) of a Java file open in the editor.

org.eclipse.jdt.astview - AST View

Navigate from text selection to AST nodes and from nodes to selections. Show bindings and compare them. Install Update Site: Source: Source is included in the plugin archives or available via web or via Git: Repository: git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git Project: org.eclipse.jdt.astview Manual Install: Eclipse の ASTParser を単体で使う. [ASTParser 1]ASTParser でクラス名やフィールド、メソッドの概要を取得する|さたなべのブログ. このテーマ[Java / ASTParser]では、EclipseのASTParserという機能を利用してJavaソースコードの解析や変換の方法について、ユルク解説していく。

[ASTParser 1]ASTParser でクラス名やフィールド、メソッドの概要を取得する|さたなべのブログ

「ASTP・・・なんぞや?」 という人は「Javaのソースコードから色々な情報を取得できるライブラリ」程度の認識でいいと思う。 もう少し詳しく知りたい場合は「 Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパーサASTParser 」 あたりを読めばいいと思う。 セットアップ(?) の仕方は「 EclipseのASTParserを単体で使う 」が分かりやすい。 とりあえずサンプルコードの紹介と解説をしていく。 大雑把に言えば、Sample1.java には 主にオマジナイ ASTParserでソースコードを解析する為の環境設定のような処理が記述されている。 Sample1.java のmainメソッド内の処理で注目すべきポイントとしては、 ASTParserクラスのインスタンスに対してsetResolveBindingsとかsetEnvironmentとかのメソッドで環境設定 更に前述のインスタンスに対してsetSourceメソッドで解析対象のソースコードをセット(46行目) CompilationUnitのインスタンスを取得してacceptメソッドで解析実行(50行目) くらい。 SampleVisitor1.java の注目すべきポイントは2つ。 ASTVisitorクラスを継承(22行目) boolean visit(型名 node) メソッドの宣言 (26/45/64行目) このクラスで宣言されている3つのvisitメソッドはいずれもASTVisitorクラスのvisitメソッドをオーバーライドしている。 JDTのAST. EclipsePluginで、Javaソースを作成する機会があり、org.eclipse.jdt.core.dom.AST というのを使ってみました。

JDTのAST

AST...始めは何も意識していなかったのですが、抽象構文木(abstract syntax tree)のことですねー。 ASTを使ってJavaコードを生成する事自体は、そこそこ簡単です。 CRC(Class Responsibility Collaborator)モデルの概要. By Scott W. Ambler , Copyright 2003 CRC (Class Responsibility Collaborator) モデル (Beck & Cunningham 1989; Wilkinson 1995; Ambler 1998a ) とは、普通のインデックスカードの集合です。 このインデックスカードは、 図1 に示すように3つの区画に分かれています。 クラス (class) は同じようなオブジェクトの集合であり、責務 (responsibility) はクラスが知っている、あるいは行う事柄であり、協調クラス (collaborator) はクラスが責務を果たすために相互作用する他のクラスです。 図2 に手書きのCRCカードの例を2つ示します。 図1. EclipseのASTParserを試す. Eclipse JDTはどのように役立つのか Eclipse JDTが提供するAPIを利用すると、Javaのソース・コードを操作し、エラーを検出し、コンパイルを実行し、プログラムを起動することができます。 この記事では、ASTParserを使って全く初めからJavaクラスを作る方法を解説します。 また、JDTサービスが、生成されたコードをコンパイルするためにも使えることも説明します。 EclipseのJDTは、よく知られたXML DOMと同じ考え方の、独自のDOM(Document Object Model)、AST(Abstract Syntax Tree)を持っています。

Eclipse V3.0.2はJLS2(Java Language Specification, Second Edition)をサポートしており、J2SE 1.4までのバージョンのJavaで書かれたプログラムを正しく構文解析することができます。 上に戻る 誰でも利用できる無料コード この記事では、下記の2つのサンプル・アプリケーションを提供しています。 ASTMain ASTExplorer ASTMainはJavaクラスを生成し、コンパイルし、そしてその main() メソッドを実行します。 ASTExplorerは、与えられたJavaクラスに対するAST階層構造を構文解析し、表示します。 Visitor. ホーム < ゲームつくろー! < デザインパターン習得編 Visitor 〜あなたの内部調べさせてもらいますよパターン ① 理解超困難パターンは前準備がとっても大事 Visitorパターン・・・はっきり言って一読では理解に苦しむ難しいパターンです。 少しずつ噛み砕いて行きたいと思います。 イメージしやすいように、RPGのアイテムボックスを例に出します。 ↑絵心は無いんです。 これをクラス図で表すと次のようになります。 これは Compositeパターン です。 さて、今、手持ちのこれらアイテムを全部売りに出すとしましょう。 ところで、この「アイテム検索」は誰が行うのでしょうか? 「あ〜あ、だれかアイテム取ってきてくれないかな」 これです! VisitorはToolクラスやItemクラス、Boxクラスのことを良く知っていて、もちろんそれがCompositeパターンであることも熟知していて、クライアントの変わりにアイテムを調べてきてくれるのです。 しかも、Toolクラス群は、「ようこそいらっしゃいました!」 Toolクラス群にAccept関数が追加されました。 VisitorクラスはToolクラス群の仮想関数であるAccept関数によって招き入れられます。

ItemOperation関数はItemクラスのAccept関数内で、BoxOperation関数はBoxクラスのAccept関数内で実行してもらいます。 とVisitorが用意したItemクラス専用関数を実行します。 Visitorにしてみたら、ItemOperation関数の引数にあるのは「Itemオブジェクト」であることが分かっている事になるので、Itemオブジェクトから必要な情報をありがたく頂戴します。 どうでしょうか? ② おそるべしVisitorの力 兎にも角にもVisitorクラスのItemOperation関数やBoxOperation関数にやりたいことを書けば、勝手に検索してきてくれることが分かりました。 では、アイテムのリストを作ってきて欲しい場合はどうでしょう。 しかしながら、弱点もあります。 最後に、Visitorパターンのクラス図を示しましょう。 最初これを見たときには私も「うひゃー!」