[AspectJ Indexページへ戻る]
 |
aspect 定義集
|
メソッドの周辺
メソッドの呼び出し、復帰
- Lineクラスのvoid setP1(Point)メソッドまたはvoid
setP2(Point)メソッドを呼び出している個所。
pointcut move() :
call(void Line.setP1(Point)) ||
call(void Line.setP2(Point)) ;
before() : move() {
// 呼び出し前に織りこみたい処理
}
after() : move() {
// 呼び出しから復帰後(例外も含む)に織り込みたい処理
}
after() returning : move() {
// 呼び出しからreturn後(例外を除く)に織り込みたい処理
}
after() throwing : move() {
// 呼び出しから例外復帰後に織り込みたい処理
}
void around() : move {
// 呼び出しをラッピングしたい処理を織りこむ
// 呼び出しを実行するときはproceed()を使う
}
|
call(void alpha.Line.setP1(Point))
- setで始まる名前のメソッド(引数はPoint型1つを取る)を指定する場合は
call(void alpha.Line.set*(Point))
- LineクラスとそのサブクラスのsetP1メソッド(引数はPoint型1つを取る)を指定する場合は
call(void alpha.Line+.setP1(Point))
- alphaパッケージ以下の全てのクラスのsetP1メソッド(引数はPoint型1つを取る)を指定する場合は
call(void alpha..*.setP1(Point))
- LineクラスのsetP1メソッド(引数は何でもよい)を指定する場合は
call(void Line.setP1(..))
事前条件・事後条件
事前条件として引数が事前条件を満たしていない場合、アサーションを発行する
pointcut setPointCheckContract() :
execution(void Line.set(Point, Point));
before(Point p1, Point p2) : setPointCheckContract() && args(p1, p2) {
// p1, p2についての事前条件判定処理
}
after(Line l) : setPointCheckContract() && target(l) {
// lについての事後条件判定処理
}
|
フィールドの周辺
コーディング標準を守っているかチェックする
非publicなフィールドにSetterメソッド以外の場所で代入している場合、コンパイル時に警告を出す
alphaパッケージ以下に含まれるクラスで、メソッド名がsetで始まるメソッド以外のコードにおいて非publicなフィールドに値を代入している個所では、コンパイル時に警告を出す。
declare warning : within(alpha..*) &&
set(!public * *) &&
!withincode(* set*(..))
: "writing field outside setter.";
|
警告ではなく、コンパイルエラーとしたいなら、declare
errorを使用します。
This page is written by Toru TAKAHASHI.(torutk@02.246.ne.jp)