2006/09/01

[aspectj-users] クラスアノテーションとメソッドアノテーションの組み合わせ

[aspectj-users] Combination of Class Annotation and Method Annotation matching

僕の投稿なんですが。

class Base{ void func(){} }

@Annot
class Derived extends Base{
 @Annot void func(){}
}

こんなクラスがある場合、execution(@Annot * (!@Annot *).*(..))というポイントカットが、Derived.funcにマッチするのは何故?って話。

結論としては、AspectJのマッチング仕様としては正しい動作らしい。
AspectJのマッチングは、実際にはメソッドそのものではなくそのシグネチャとマッチングを行っていて、1つのメソッドは複数のシグネチャを持ち、かつアノテーション等のデジネータは上書きされるってことらしい。つまり、Derived.funcは、親クラスのfuncのシグネチャを引き継ぐため、"Base.func"と"@Annot void (@Annot Derived).func"の2つのシグネチャを持つ。で、前述のポイントカットは上書きされて"@Annot Base.func()"になるので、Derived.funcがマッチするそうな。

これをマッチさせないための対処としてはexecution(@Annot * *.*(..)) && !within(@Annot *)というポイントカットを使うこと。

なんか釈然としないので、その後も議論の継続を試みたのだけど、止まってしまった。
クラスアノテーションもオーバーライドされれば(void Derived.funcが@Annot void (@Annot Base).func()と扱われれば)、すっきりすると思うんだけどなぁ。

2006/08/15

[aspectj-users] 秀逸な突っ込み

[aspectj-users] Transparent Caching with AspectJ in 10 minutes

Piotrさんが、AspectJを使ったキャッシングに関する記事「AspectJを使った透過的キャッシュ」を書いたよ~ってMLでお知らせ。投稿のタイトルに"in 10 minutes"とあるんだけど、それに対してついたコメントが、
「ちょっとまった。ロギングにAspectJ使ってないじゃないか。
完全なものにするにはもう10分くらいかかるんじゃないかな。」
笑った。

2006/08/08

[aspectj-users] パラメータアノテーションのマッチング

[aspectj-users] Matching on parameter annotations

パラメータアノテーションは指定できないの?って話。

Java5からアノテーションが導入されて、様々な要素に注釈をつけることが可能になった。
で、あまりフォーカスされないんだけど、
public class Test{
 void func(@Annot int arg){
 }
}
ってな感じに、パラメータに対してもアノテーションが使える。

で、話の内容は、AspectJ5ではクラスやメソッドのアノテーションは扱えるけど、パラメータのアノテーションは扱えないの?ってこと。結論としては、現在のバージョン(1.5.2)では扱えないけど、将来扱えるようになるらしい。

2006/08/07

[aspectj-dev] AspectJをAspectJ自身の実装に使う

http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg02084.html
そろそろAspectJをAspectJ自身の実装に使っていってもいいんじゃないかって提案。
実際既に1つだけアスペクトが利用されてるんだけど、もっとがっつり使おうよってことらしい。
おもしろい。

2006/04/22

言語グリッドプロジェクト

4月から所属が変わって、今は言語グリッドプロジェクトに居ます。

人生初サラリーマン生活はなかなか厳しいものがあります。
まさかこんなに体調が良く&夜更かしが辛くなるとは。

2005/11/24

アスペクト指向入門 [書籍]

東工大の千葉先生が書かれたAOPの入門書が発売されました。
http://www.amazon.co.jp/exec/obidos/ASIN/4774125814
AOPの概念が丁寧に解説されていて、おすすめです。
オブジェクト指向に関する基礎知識があれば、かなりわかりやすいです。

学術的なリンクもたくさんあるので、学生にもおすすめです。

2005/11/19

WhiteDog Studioにおけるアノテーションについて



WhiteDog System 0.9.5から、WhiteDog Studioにおいてアノテーションがサポートされています。whitedog-annotations.jarでサポートされるアノテーションが付加されていると、その内容がGUIに反映されます(画像参照)。また、"自動ビルド"がチェックされた場合、ドラッグ&ドロップされたjarファイルを、自動的にビルドします。

サポートされているアノテーションは、次の通りです。

  • jp.whitedog.annotation.WhiteDogMethod

    引数: なし

    このアノテーションが付加されたメソッドを、共有するメソッドとして扱います。GUI上で自動的にチェックされます。


  • jp.whitedog.annotation.WhiteDogDescription

    引数: value: String - GUIに表示する説明

    GUI上で、このアノテーションが付加されたクラス又はメソッドに、引数として指定された説明を表示します。


  • jp.whitedog.annotation.WhiteDogConnection

    引数: host: String - 接続するホスト

    このアノテーションで指定されたホスト情報を、アスペクトコード生成時の接続ホスト情報として読み込みます。


  • jp.whitedog.annotation.WhiteDogConnectionStartPoint

    引数: なし

    このアノテーションが指定されたメソッドを、接続開始点として認識します。


  • jp.whitedog.annotation.WhiteDogMainClass

    引数: なし

    このアノテーションが指定されたメソッドを、jar生成時のメインクラスとして認識します。


WhiteDog 0.9.5公開

学会発表から2ヶ月が経ってしまいましたが、最新版を公開しました。

WhiteDog Projectからどうぞ。

2005/09/11

学会発表

来週仙台で開催されるソフトウェア科学会第22回大会で、WhtieDog System関連の発表を行います。13日です。WhiteDog Studioに搭載される機能についてです。

牛タンでも喰ってこようかと思ったけど、
まだ高いんだろうなぁ。

2005/08/01

アノテーション

ちょっと前にアノテーションを調べていて、おもしろいものを発見した。

java.lang.reflect.Methodに、Annotation[][] getParameterAnnotations()なんてメソッドが追加されてる。java.lang.annotation.ElementTypeにも、PARAMETERなるフィールドが。

これ使って、Java上のスクリプト言語(Groovyとか)で名前付き引数をサポートしたりするのかな?