[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Strange error with parameter annotation

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 <Manuel.Sequeira@xxxxxxxx> 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(* *(!@A (!(Object+)), ..)) : "Non-@A
> annotated value parameter!";
>
>      // Wrong (matches f1 and f2, should match only f2):
>      declare error : execution(* *(!@A (*), ..)) && execution(*
> *(!(Object+), ..)): "Non-@A annotated value parameter.";
>
>      // OK (matches f2):
>      declare error : !execution(* *(@A (*), ..)) && execution(*
> *(!(Object+), ..)): "Non-@A annotated value parameter.";
>
>      // Wrong (matches f3 and f4, should match only f4):
>      declare error : execution(* *(!@A (Object+), ..)) : "Non-@A annotated
> reference parameter!";
>
>      // Wrong (matches f3 and f4, should match only f4):
>      declare error : execution(* *(!@A (*), ..)) && execution(* *(Object+,
> ..)): "Non-@A annotated reference parameter.";
>
>      // OK (matches f4):
>      declare error : !execution(* *(@A (*), ..)) && execution(* *(Object+,
> ..)): "Non-@A 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
>  aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
>