« Return to Thread: Frustrated Newbie

Re: Frustrated Newbie

by Paulo Alexandre Corigo Zenida :: Rate this Message:

Reply to Author | View in Thread

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

 « Return to Thread: Frustrated Newbie