Hi -
Your code is incomplete since it only shows one advice from one
concrete
aspect; you must have another concrete aspect extending Tracing if in
fact
commenting out the advice in the absract aspect Tracing makes a difference
(or there's a bug in ajc).
Precedence determination fails only when the precedence rules result in
cycles
when applied to the advice at a join point (I thought the message
used to state
as such?), so check out the programming guide section on point as cited by
George.
A simple way to avoid most cycles is to put all "after" advice in an aspect
after
"around" and "before" advice. Just be sure that's the precedence you
want.
I should add that there's a debate about relying on advice precedence
for
correctness. In some cases, it's clearly required, but in others
consolidating
two pieces of advice into one make the dependencies more clear.
Declaring
precedence as between aspects can provide some indication, but
typically
the developer should enter comments if order really matters, to avoid
accidental functional changes caused by re-ordering advice or aspect
hierarchy.
Hope this helps-
Wes
------------Original Message------------
From: André Dantas Rocha <ad-rocha@xxxxxxxxxx>
To: aspectj-users@xxxxxxxxxxx
Date: Sun, Dec-12-2004 8:51 AM
Subject: [aspectj-users] "can't determine precedence"
Hi,
I have 3
aspects:
abstract aspect
Tracing {
pointcut
validCalls() : call(* *.*(..)) &&
!within(aftt..*);
// removing
this advice everything works fine
after() :
validCalls() && if (traceEnabled) { }
}
abstract aspect
Instrumentation {
public
abstract pointcut operationCall();
pointcut valid() :
cflow(testExecution()) && !cflowbelow(execution (*
aftt..*.*(..))); pointcut interception() :
operationCall() && valid();
after() :
interception() { }
}
public aspect Test
extends Instrumentation {
public
pointcut operationCall() : call(public static boolean
Identifier.verify(java.lang.String));
}
When compiling I receive the following error (removing the
Tracing.after() advice everything works
fine):
"can't determine precedence between two or more pieces of advice that
apply to the same join point"
What this error means? how can I correct
it?
Thanks,
André
|