トランザクション管理
/** * @when * access.variable = field * field = {@link CtField} * {@link ThreadLocalize} in field.annotations.spec */ public void hack(CtVariableAccess<?> access)
- accessは変数へのアクセス (引数 CtVariableAccess accessから推論)
- accessの属性"variable"(アクセス先の変数)はfieldである
- fieldはフィールドである
- fieldの属性"annotations"(注釈一覧)をt1とおくと
- t1それぞれの属性"spec"(注釈の型)の一覧をt2とおくと
- 型 ThreadLocalize は t2 に含まれる
- t1それぞれの属性"spec"(注釈の型)の一覧をt2とおくと
まとめると、@ThreadLocalizeの注釈がついたフィールドへの参照を返します。
上記だと左辺値も右辺値も拾ってしまうので、もう少しフィルタかける必要あり。
ともあれ、特定のフィールドを見つけるのは簡単にできるのですが、これらに対して1度だけ加工する方法について考え中です。
あるクラスに対するクエリの適用を1度だけに限定して、その単位を「クエリの実行セッション」とかにするのはどうかなと。