If you could use execution instead of call, then the solution would be
easy.  One of the main reasons to use call pointcuts is to take
advantage of polymorphic calls as below.  When you don't want to do
that, you could do something like:

pointcut callMeth() : execution(public void A.m()) && within(A);

Of course, this will not work with call joinpoints.  And
unfortunately, I can't think of a clean way of doing what you want.

2010/3/22 Henrique Rebêlo <[email protected]>:
> Hi all,
>
> Consider the following simple hierarchy:
>
> class A { public void m() {} }
> class B extends A { public void m() {} }
> class C extends B { public void m() }
>
> along with the simple call pointcut
>
> pointcut callMeth() : call (public void A.m());
>
> The call pointcut callMeth() will match any call to A.m() but it includes
> all m's calls in subtypes of A.
>
> The question is: Is there a straightforward solution to avoid matches in
> subtypes of A (and without using any special variable such as
> thisJoinPointStaticPart)?
>
> I know that we can explicitly eliminate all descendants of A:
>
> pointcut callMeth() : call (public void A.m()) &&
>                              !call (public void B.m()) &&
>                              !call (public void C.m()) ;
>
> but, Is there another way?
>
>
> Kind Regards,
> Henrique
>
>
> --
> ...............................................................................................................................
> Henrique Rebelo
> http://www.cin.ufpe.br/~hemr
> Informatics Center, UFPE, Brazil
>
> _______________________________________________
> 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

Reply via email to