[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] Match a method call on a class field with specific annotation
|
Hi Andy,
As first idea, I would write this pointcut like this :
call(* *(..)) && target(MyClass.*) && @target(@MyAnnotation)
or
call(* *(..)) && @target(@MyAnnotation MyClass.*)
This two writing would require the modification of the designator target or @target to add concept of class field.
Regards,
Mickaël Rifflard
-----Message d'origine-----
De : aspectj-users-admin@xxxxxxxxxxx [mailto:aspectj-users-admin@xxxxxxxxxxx]De la part de Adrian Colyer
Envoyé : jeudi 24 février 2005 16:53
À : aspectj-users@xxxxxxxxxxx
Objet : Re: [aspectj-users] Match a method call on a class field with specific annotation
This is an interesting use case because.... there's no easy way to do this.
At a call join point, we know about the the *caller*, and the *callee*, we know the static context in which the call is being made (within, withincode), and the dynamic context in which the call is being made (cflow[below]), so whilst we can say:
"any call where the type of the target of the call has an annotation @ABC..."
we don't have a way to say:
"any call where the target of the call is currently refered to by a member variable, and that member variable has an annotation of type @ABC..."
The closest thing you can say is
"any access to a field with annotation @MyAnnotation" : get(@MyAnnotation * *)
Using reflection it should be possible, but awkward to get closer what you want:
pointcut annotatedFieldCall() : call(* *(..)) && if(calleeIsAFieldWithMyAnnotation(thisJoinPoint);
private static boolean calleeIsAFieldWithMyAnnotation(JoinPoint tjp) {
/ / pseudo-code...
Object obj = tjp.getThis();
for-all (Field field : obj.getClass().getDeclaredFields()) {
if (field.hasAnnotation(MyAnnotation.class) return true;
}
return false;
}
but it's not pretty.... (and only works for fields defined within the calling class).
If you *could* write a pointcut to match this, how would you want it to look?
-- Adrian
Adrian_Colyer@xxxxxxxxxx
Rifflard Mickaël <Mickael.Rifflard@xxxxxxxxxxxxxx>
Sent by: aspectj-users-admin@xxxxxxxxxxx
23/02/2005 08:22 Please respond to
aspectj-users@xxxxxxxxxxx
To<aspectj-users@xxxxxxxxxxx>
cc
Subject[aspectj-users] Match a method call on a class field with specific annotation
Hi all,
I don't succeed to express with AspectJ 5 this expression :
Match a method call on a class field with specific annotation
(Of course, I don't know the name of the class and field)
Exemple :
public class MyClass {
@MyAnnotation
public static SortedMap myMap1 = new TreeMap();
public static SortedMap myMap2 = new TreeMap();
public static void main(String[] args) {
myMap1.put("key","value"); // Match this method call
myMap2.put("key","value"); // Don't match this method call
}
}
Any suggestion would be appreciated,
Regards
Mickaël Rifflard
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users