I've also now fixed the other cases - your test program will work fine with the next dev build.
Andy. On 25/04/2008, Andy Clement <[EMAIL PROTECTED]> wrote: > That's a bug, well two bugs. I've now fixed all except cases 2 and 7 > in your test program (so I've fixed 5,8,10,11). 2 and 7 are a > different issue, completely unrelated to the new parameter annotation > matching, they indicate a bug in annotation matching in general when ! > is used. I've raised > https://bugs.eclipse.org/bugs/show_bug.cgi?id=228980 to track the > problem. > > thanks for the cool test program. the fixes will be in the next AJ dev build. > > cheers, > Andy. > > > On 25/04/2008, Manuel Menezes de Sequeira <[EMAIL PROTECTED]> wrote: > > > > Hi all! > > > > I'm having some problems with parameter annotations. My original idea was > > to use > > > > declare error : execution(* *(@A (!(Object+)), ..)) : "@A annotated value > > parameter!" to match executions of methods with an @A annotated, > > non-reference typed, first parameter. It did not work, at least with my > AJDT > > version (Version: 1.5.2.200804241330, AspectJ version: > > 1.6.0.20080423100000). I made a few more tests and detected a few more > > strange cases (see code below). What am I doing wrong? > > > > Regards, > > > > Manuel > > > > ----- Test.aj ----- > > > > import java.lang.annotation.ElementType; > > import java.lang.annotation.Retention; > > import java.lang.annotation.RetentionPolicy; > > import java.lang.annotation.Target; > > > > public aspect Test { > > // OK (matches f1 and f2): > > declare error : execution(* *(!(Object+), ..)) : "Value parameter."; > > > > // Wrong (matches f1 and f2, should match only f1): > > declare error : execution(* *(@A (!(Object+)), ..)) : "@A annotated > > value parameter!"; > > > > // OK (matches f1): > > declare error : execution(* *(@A (*), ..)) && execution(* > *(!(Object+), > > ..)): "@A annotated value parameter."; > > > > // OK (matches f3 and f4): > > declare error : execution(* *(Object+, ..)) : "Reference parameter."; > > > > // Wrong (no matches, should match f3): > > declare error : execution(* *(@A (Object+), ..)) : "@A annotated > > reference parameter!"; > > > > // OK (matches f3): > > declare error : execution(* *(@A (*), ..)) && execution(* *(Object+, > > ..)): "@A annotated reference parameter."; > > > > // Wrong (matches f1 and f2, should match only f2): > > declare error : execution(* *([EMAIL PROTECTED] (!(Object+)), ..)) : > "[EMAIL PROTECTED] > > annotated value parameter!"; > > > > // Wrong (matches f1 and f2, should match only f2): > > declare error : execution(* *([EMAIL PROTECTED] (*), ..)) && > execution(* > > *(!(Object+), ..)): "[EMAIL PROTECTED] annotated value parameter."; > > > > // OK (matches f2): > > declare error : !execution(* *(@A (*), ..)) && execution(* > > *(!(Object+), ..)): "[EMAIL PROTECTED] annotated value parameter."; > > > > // Wrong (matches f3 and f4, should match only f4): > > declare error : execution(* *([EMAIL PROTECTED] (Object+), ..)) : > "[EMAIL PROTECTED] annotated > > reference parameter!"; > > > > // Wrong (matches f3 and f4, should match only f4): > > declare error : execution(* *([EMAIL PROTECTED] (*), ..)) && > execution(* *(Object+, > > ..)): "[EMAIL PROTECTED] annotated reference parameter."; > > > > // OK (matches f4): > > declare error : !execution(* *(@A (*), ..)) && execution(* *(Object+, > > ..)): "[EMAIL PROTECTED] annotated reference parameter."; > > > > void f1(@A int i) {} > > > > void f2(int i) {} > > > > void f3(@A Integer i) {} > > > > void f4(Integer i) {} > > > > @Retention(RetentionPolicy.RUNTIME) > > @Target({ElementType.PARAMETER}) > > private static @interface A { > > > > } > > } > > > > > > > _______________________________________________ > > aspectj-users mailing list > > [email protected] > > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > > > > _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
