Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Difference in Intercepting method-call

Hi Andy,


I am having an issue in understanding why one of the method call is intercepted and why the other is not. In the first case, for pointcut definition, all method calls to hasNext is intercepted which also intercepts "hasNext" method whose object is of type "org.apache.fop.fo.FONode$FONodeIterator"


The  hierarchy is:-


public interface FONodeIterator extends ListIterator{

}



Now the aspect code is as follows:-


pointcut HasNext_hasnext(Iterator i) : (call(* Iterator.hasNext()) && target(i));

after (Iterator i) : HasNext_hasnext(i) {

//advice code

}


Similarly, consider following as the second case, pointcut intercepting "put" method, but it does not intercept "put" method whose object is of type ConcurrentMap 


Code is :- 


pointcut UnsafeMapIterator_updateMap(Map map) : (call(* Map.put*(..))  && target(map));

after (Map map) : UnsafeMapIterator_updateMap(map) {


//advice code


}


If I use subtype pattern e.g. call(* Map+.put*(..), then ConcurrentMap.put method-call will also be intercepted. This just confuses me even more, because if subtype pattern is used to intercept all methods in class or subtype of it,then I don't understand why in the first case "org.apache.fop.fo.FONode$FONodeIterator.hasNext" is intercepted. I have also used -showWeaveInfo to confirm the behaviour.


Regards,


Omar



Back to the top