[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Matching on parameter annotations

From the AspectJ documentation:

"Matching on package and parameter annotations is not supported in AspectJ 1.5. Support for this capability may be considered in a future release."

We currently don't provide any kind of matching on the annotations
attached to parameters at the moment.

cheers,
Andy.

On 07/08/06, Eric Crahen <eric_crahen@xxxxxxxxx> wrote:
Almost, I want to select annotations that are method parameter annotations,
not annotations on the formal types of the method parameters themselves.

I've modified your example slightly to show you what I mean


import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;

public class AnnotationBinding {
 @Retention(RetentionPolicy.RUNTIME)
 public @interface TestAnnotation {
 }
 public static class Foo {}
 public static class Bar {}
 public void x(@TestAnnotation Foo foo) {} // error here

 public void x(Bar bar) {} // no error here
 static aspect A {
 declare error: execution(void AnnotationBinding.x(@TestAnnotation *))
 : "parameter annotated with @TestAnnotation";
 }
}


Wes <wes@xxxxxxxxxxxxxx> wrote:

 Hi Eric -

I'm not sure what kind of static checking happens or is possible using
@args(..),
but you can staticly pick them out using the method-execution join point
signature:

 execution(* *(@Annotation *)) // for any method with one parameter so
annotated

In the test below, only the annotation-laden shadow x(..) is flagged as an
error.
Would that help?

Wes

--------------------- annot/AnnotationBinding.java
package annot;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

public class AnnotationBinding {
 @Retention(RetentionPolicy.RUNTIME)
 public @interface TestAnnotation {
 }
 @TestAnnotation
 public static class Foo {}
 public static class Bar {}
 public void x(Foo foo) {} // error here
 public void x(Bar bar) {} // no error here
 static aspect A {
 declare error: execution(void AnnotationBinding.x(@TestAnnotation *))
 : "parameter annotated with @TestAnnotation";
 }
}


------------Original Message------------ From: Eric Crahen To: aspectj-users@xxxxxxxxxxx Date: Sun, Aug-6-2006 3:33 PM Subject: [aspectj-users] Matching on parameter annotations Is there any upcoming work being done to allow for parameter annotations to be matched more efficently?

So far I've found that using @args() inserts bytecodes that check the
annotations of the object passed in to see if an annotation is present and
its not quite what I wanted. And using the static parts of a join point also
inserts bytecode into each method. This works, but if you weave 100 methods
and only 1 contains a parameter annotation, thats alot of extra code
inserted into 99 methods that wouldn't behave any differently.


- Eric


Do you Yahoo!? Everyone is raving about the all-new Yahoo! Mail Beta._______________________________________________ aspectj-users mailing list aspectj-users@xxxxxxxxxxx https://dev.eclipse.org/mailman/listinfo/aspectj-users

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users




- Eric


________________________________ Do you Yahoo!? Get on board. You're invited to try the new Yahoo! Mail Beta.



_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users