|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
Small doubt on --> proceed(Object[] args)@Pointcut("execution(public void figures.Point.move(int, int))" The above snippet works without any problem, but, from the explanation of the AspectJ 5 Developer's Notebook I got the idea that the correct Object[] argument should be: new Object[]{p, dx, dy, p} p - from "this()" dx, dy, p - all the arguments expected at the join point (or p isn't considered an argument expected at the join point?) _______________________________________________ aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users |
|
|
Re: Small doubt on --> proceed(Object[] args)I presume you mean this documentation:
=== In code style, the proceed method has the same signature as the advice, any reordering of actual arguments to the joinpoint that is done in the advice signature must be respected. Annotation style is different. The proceed(..) call takes, in this order: * If 'this()' was used in the pointcut for binding, it must be passed first in proceed(..). * 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. * 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. 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. === At your join point 'Point.move(int,int)', there are 2 arguments expected, the two integers. and then according to rule (1) above you used this() for binding so it must be passed first in proceed. That gives the structure: new Object[]{p, dx, dy} p is not considered an argument expected at the join point as the join point is 'move(int,int)' Andy 2009/9/6 João Gonçalves <jocolimonada@...>: > Here's a small working example: > > @Pointcut("execution(public void figures.Point.move(int, int))" > + "&& this(p) && args(dx, dy)") > void movingPoint(int dx, int dy, Point p) {} > > @Around("movingPoint(dx, dy, p)") > public void doNothing(ProceedingJoinPoint thisJoinPoint, > int dx, int dy, Point p) throws Throwable { > thisJoinPoint.proceed( new Object[]{p, dx, dy} ); > } > > The above snippet works without any problem, but, from the explanation of > the AspectJ 5 Developer's Notebook I got the idea that the correct Object[] > argument should be: > > new Object[]{p, dx, dy, p} > > p - from "this()" > dx, dy, p - all the arguments expected at the join point (or p isn't > considered an argument expected at the join point?) > > _______________________________________________ > aspectj-users mailing list > aspectj-users@... > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users |
| Free embeddable forum powered by Nabble | Forum Help |