3.1.1 thisJoinPoint.variables変数 (ローカル変数、クラス変数一覧の取得)

Example of Advice (debug) Code

Object[][] vs = thisJoinPoint.variables;
for(int i=0; i<vs.length; i++){
  System.out.println(vs[i][0]+"="+vs[i][1]);
}

(1)thisJoinPoint.variables -- java.lang.Object[][]型

  デバッグコード挿入位置に存在する変数の一覧を表す。
  thisJoinPoint.variables[i][0] -- String型 変数の名前
  thisJoinPoint.variables[i][1] -- Object型 変数の値
  thisJoinPoint.variables[i][2] -- String型 変数の宣言文
例:
  thisJoinPoint.variables[0][0] = "x"
  thisJoinPoint.variables[0][1] = x
  thisJoinPoint.variables[0][2] = "local int"
  thisJoinPoint.variables[1][0] = "MyClass.i"
  thisJoinPoint.variables[1][1] = i
  thisJoinPoint.variables[1][2] = "static Integer"
  thisJoinPoint.variables[2][0] = "this"
  thisJoinPoint.variables[2][1] = this
  thisJoinPoint.variables[2][2] = "local MyClass"
  thisJoinPoint.variables[3][0] = "this.y"
  thisJoinPoint.variables[3][1] = this.y
  thisJoinPoint.variables[3][2] = "public final long"

(2) $writeVariables()

  thisJoinPoint.variables の状態を実際の変数に反映させる。
例:
  System.out.println(x);//100が出力
  thisJoinPoint.variables[0][1] = new Integer(9999);
  $writeVariables();
  System.out.println(x);//9999が出力

(3) $readVariables()

  実際の変数の値を thisJoinPoint.variables に反映させる。
例:
  System.out.println(thisJoinPoint.variables[0][1]);//100が出力
  x = 9999;
  $readVariables();
  System.out.println(thisJoinPoint.variables[0][1]);//9999が出力