diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/src/org/aspectj/lang/ProceedingJoinPoint.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/runtime/src/org/aspectj/lang/ProceedingJoinPoint.java b/runtime/src/org/aspectj/lang/ProceedingJoinPoint.java index 9d220358d..5bbc2df85 100644 --- a/runtime/src/org/aspectj/lang/ProceedingJoinPoint.java +++ b/runtime/src/org/aspectj/lang/ProceedingJoinPoint.java @@ -41,8 +41,21 @@ public interface ProceedingJoinPoint extends JoinPoint { /** * Proceed with the next advice or target method invocation * <p/> - * The given args Object[] must be in the same order and size as the advice signature but - * without the actual joinpoint instance + * <p>Unlike code style, proceed(..) in annotation style places different requirements on the + * parameters passed to it. The proceed(..) call takes, in this order: + * <ul> + * <li> If 'this()' was used in the pointcut for binding, it must be passed first in proceed(..). + * <li> If 'target()' was used in the pointcut for binding, it must be passed next in proceed(..) - + * it will be the first argument to proceed(..) if this() was not used for binding. + * <li> Finally come all the arguments expected at the join point, in the order they are supplied + * at the join point. Effectively the advice signature is ignored - it doesn't matter + * if a subset of arguments were bound or the ordering was changed in the advice signature, + * the proceed(..) calls takes all of them in the right order for the join point. + * </ul> + * <p>Since proceed(..) in this case takes an Object array, AspectJ cannot do as much + * compile time checking as it can for code style. If the rules above aren't obeyed + * then it will unfortunately manifest as a runtime error. + * </p> * * @param args * @return |