[CodeGeneration]後はアノテーションによるAST変換の例をいくつか紹介してから、DbCのGroovy実装であるGContractsの紹介。アノテーションにクロージャで事前条件と事後条件を指定すると実行前後でチェックする実装をAST変換で生成。Contract(契約による設計)」を実現するためのGroovyベースのフレームワークである、GContractsの紹介です。...snip...のように、事前条件を@Requires、事後条件を@Ensures、普遍条件をInvariantとしてクロージャで条件式を記述しておくと、AST変換によってチェックコードが生成されます。AST変換でコード生成するので、余分な動的コストはかからない。[CodeGeneration]次は、FindBugsのGroovy版的なCodeNarc。発見できるバグの種類は前者が200以上なのに対して、60いくつと少なめだけど、CodeNarcはAST変換でバグチェックを実現してるんだよ、と。#javaonejpまあ、そのままです。[CodeGeneration]Groovy標準付属のツールで、ASTツリーをGUI表示できる。その構造の見方の説明と、AST変換をするためのASTTransformationの実装の仕方の説明。[CodeGeneratin]AST変換といっても文法的には万能じゃなくて、Groovyとして正しい文法でなければいけない。文法さえ正しければ、その意味は自由に書き換えられる。文法NGならSyntaxErrorが発生してAST変換まで到達しない。#javaonejpそういうことです。自前ASTTransformationを作ってみたくなった人は、↓などをご参照ください。http://groovy.codehaus.org/Global+AST+TransformationsGroovyのシンタックスそのものに介入するAST変換はこっち。private修飾子をpublicに読み替える、とか(誰得)。こっち側の場合ASTTranformationクラスのロード順序などの都合(うろおぼえ)で、groovyのjar自体を一度展開して自前クラスを追加する、などの手間が必要になってしまう。http://groovy.codehaus.org/Local+AST+Transformations変換対象コードを独自アノテーションでマーキングしておいて、アノテーションを目印にコードをAST変換する。自前ASTTransformationがクラスパスに通っていればOkなので、比較的敷居が低い。equals()を自動生成するEquivアノテーションというのがあるので*1、よければコードなどを参考にしてみて下さい。http://github.com/kobo/kobo-commons/wiki/@Equivというわけで、この辺で。千秋楽はMariottホテルで月別アーカイブはてなブログをはじめよう!nobeansさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。