Hello Kevin,
Could you try the following and tell us if this is what you need, please?
public pointcut listeners() :
within(*..*.Listener+) &&
!within(*..*.Listener);
public pointcut mySpecialInterface() :
within(*..*.Foo+) &&
!within(*..*.Foo);
public pointcut myCode() :
within(com.mycompany..*+);
declare error :
listeners() && !mySpecialInterface() && myCode() :
"All listeners must implement Foo";
The previous has a limitation, though, since it is not possible to
have interfaces extending Listener but, from what you said in your
e-mail, that does not seem to be a problem.
Kind regards,
Paulo Zenida
Citando Kevin F <
aj@...>:
> I¹ve been at this for 4 days now. I had some good luck with a few initial
> cases where I was able to clean up some code and verify through testing it
> worked like a charm. I made a couple minor tweaks to those which broke them
> giving the technology an unreliable feel. I¹m willing to write that off as
> inexperience.
>
> So I continued on and tried to implement some simple enforcement policies
> that I read in the book from the Eclipse Series (trying to support
> development by buying products and all). It isn¹t working at all and my
> frustration level trying to implement even simple enforcement policies is
> off the scale.
>
> Yesterday, I posted the following to the AspectJ newsgroup without a
> response yet. I continued researching on my own, even using the latest
> milestone AspectJ release for Eclipse 3.3M5. Still no luck.
>
> ---------------
> Newsgroup post:
> ---------------
>
> I'm new to AspectJ so please no flames. I'm using AJDT for Eclipse 3.2.1
> and have been following the details from the "eclipse AspectJ" book.
>
> I'm trying to enforce simple errors such as "It is an error to implement any
> listener interface unless you also implement interface Foo." To do this, I
> want to try:
>
> pointcut listeners() : within(*..*Listener*+);
> pointcut myCode() : within(com.mycompany..*+);
> pointcut mySpecialInterface() : within(com.mycompany.Foo+);
> declare error: listeners() && myCode() && !mySpecialInterface()
> : "All listeners must implement Foo";
>
>
> Since this did not work, I tried various experiments. So, I tried the
> following:
>
> declare error: within(*..*Listener*+)
> : "A";
> declare error: within(com.mycompany..*+)
> : "B";
> declare error: within(*..*Listener*+) && within(com.mycompany..*+)
> : "A intersect B";
> declare error: within(*..*Listener*+ && com.mycompany..*+)
> : "A intersect' B";
> declare error: within(*..*Listener*+) || within(com.mycompany..*+)
> : "A union B";
> declare error: within(*..*Listener*+ || com.mycompany..*+)
> : "A union' B";
>
> A seems to be tagged correctly on all classes that implement any interface
> with the word Listener in its name.
>
> B seems to tag only a fraction of the classes I have written.
>
> A intersect B and A intersect' B both result in no tags.
>
> A union B and A union' B both seem to result in the union of what A and B
> tagged above.
>
>
> AOP seems so powerful yet so cryptic. Can anybody help?
>
>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@...
https://dev.eclipse.org/mailman/listinfo/aspectj-users