[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[aspectj-users] Re: Differentiating between similar join points
|
Hi Devon.
The pointcut language of AJ does not distinguish between two
syntactically equal joinpoints that reside in the same context.
Means: No, you can not pick out the two calls A.withdraw() separately.
At least not statically because they look the same an their enclosing
program element is the same (execution joinpoint of the transfer
method).
But you have at least one alternative and two workarounds:
1. What you can do is distinguish them dynamically. So if you have
any attributes of A that changes after the first call of A.withdraw()
or the A.deposit() method you can pick out the first /second call by
checking this attribute's values during runtime.
pointcut firstCall():
call(A.withdraw(..)) && if(A.foo == bar);
If you don't want have any appropriate attribute and you don't want
to create a dummy attribute within A you could use a counter or a
flag within your aspect. As long as you have static calls to
A.withdraw() this is sufficient.
2. The ugly one: Wrap the two calls with two dummy methods that
differ syntactically.
A.withdraw1(); //calls A.withdraw()
A.deposit();
A.withdraw2(); //calls A.withdraw()
3. I've never tried this but probably you can use @annotations to
distinguish the two calls.
@firstcall A.withdraw();
A.deposit();
@secondCall A.withdraw();
cheers,
Armin
Hi All,
Given the following three calls:
public void transfer(..) {
//some code
A.withdraw(..);
A.deposit(..);
A.withdraw(..);
//some code
}
How do I pick out the first and last call join points separately?
Thanks.
Devon.