In annotation-style, pointcut expressions must use fully-qualified type
names. So you will need to change your pointcut to something like:

@Pointcut("execution(* packageof.A.*(..)) || execution(*
packageof.C.*(..))")

Also, can you switch to the latest version AspectJ? A lot of bugs have been
fixed, especially for annotation-style aspects.

-Ramnivas

On Wed, Feb 10, 2010 at 4:28 PM, Mick Jordan <[email protected]> wrote:

> I am resurrecting an aspect that I developed a while ago in the
> non-annotation style and trying to convert it to annotation style. I've read
> the documents and made what seemed to be the appropriate changes, but the
> effect is that, while ajc compiles everything happily, no weaving occurs,
> confirmed by the -showWeaveInfo option. I've scanned the archives for
> relevant posts and come up empty, so I'm hoping someone can see what I
> assume is a trivial mistake.
>
> Here is the key part of the non-annotation version:
>
> public abstract aspect Trace {
> public abstract pointcut execAll();
>
> before() : execAll() {
>      doBefore(thisJoinPoint);
> }
> public void doBefore(JoinPoint jp) {
>  // the work
> }
> after() returning(Object result) : execAll() {
>      doAfter(thisJoinPoint, result, true);
> }
>
>  after() throwing(Throwable t) : execAll() {
>      doAfter(thisJoinPoint, t, false);
> }
>
> protected void doAfter(JoinPoint jp, Object result, boolean normalReturn) {
>  // the work
> }
> }
>
> This is coupled with a concrete aspect, e.g to trace code with classes A
> and C:
>
> aspect TraceAandCTest extends Trace {
>  public pointcut execAll() : execution(* A.*(..)) || execution(* C.*(..));
> }
>
> This all works just fine.
>
> Now here is the annotation version:
>
> import org.aspectj.lang.annotation.*;
> @Aspect
> public abstract class Trace {
>  @Pointcut("")
>  public abstract void execAll();
>  @Before("execAll()")
>  public void doBefore(JoinPoint jp) {
>    // the work
>  }
>  @AfterReturning(pointcut="execAll()", returning="result")
>  public void doAfterNormalReturn(JoinPoint jp, Object result) {
>      doAfter(jp, result, true);
>  }
>
>  @AfterThrowing(pointcut="execAll()", throwing="result")
>  public void doAfterExceptionReturn(JoinPoint jp, Object result) {
>      doAfter(jp, result, false);
>  }
>  protected void doAfter(JoinPoint jp, Object result, boolean normalReturn)
> {
>    // the work
>  }
> }
>
> Here is the corresponding concrete aspect:
>
> import org.aspectj.lang.annotation.*;
>
> @Aspect
> public class TraceAandCTest extends Trace {
>
>  @Pointcut("execution(* A.*(..)) || execution(* C.*(..))")
>  public void execAll() {
>  }
> }
>
> The build scripts for the two versions are identical. The behavior of the
> non-annotated version is that I see "weaveInfo joinPoint ..." traces from
> ajc, whereas no such traces occur for the annotated version. I have
> -source=1.5 set, of course.
>
> Appreciate any insight into what I'm missing. I'm using AspectJ 1.5.
>
> Thanks
> Mick Jordan
> _______________________________________________
> 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