Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Classes instrumented but the advice code is not executed.

Hi Omar,

So the method mergeTransmissions() has a call into it to the advice?  Normally I verify what is woven using -showWeaveInfo rather than introspecting byte code. Just because it is woven doesn’t mean it will be called because your advice may have caused pre-conditions to be inserted for anything that could not be statically determined when matching your pointcut.

For example there may be places where we cannot tell if the target of the call is a Set at compile time, so for the ‘target’ component of your pointcut a test will be inserted into the code that verifies if the target is a Set, and if it is then we may call the advice (The call(..) component may be inserting other tests).

Break your pointcut down into pieces to help you understand it - for example remove that target (and the associated mapSet handling) - does the advice then get called? If so it is because the collection being operated on is not a Set.

cheers,
Andy


On Apr 18, 2016, at 1:51 AM, Omar Javed <omarjaved83@xxxxxxxxxxx> wrote:

Hi,

 

I am using AspectJ version 1.8.9  and I am using the following aspect to instrument classes in dacapo-benchmark (avrora).  

 

import java.util.*;

 

aspect BaseAspect {
pointcut notwithin() :
!within(sun..*) &&
!within(java..*) &&
!within(javax..*) &&
!within(com.sun..*) &&
!within(org.apache.commons..*) &&
!within(org.apache.geronimo..*) &&
!within(net.sf.cglib..*);
}

 

public aspect UnionJoinPointsAspect {
pointcut MOP_CommonPointCut() : !adviceexecution() && BaseAspect.notwithin();                
pointcut SafeSyncMap_syncCreateIter(Set mapSet) : (call(* Collection+.iterator()) && target(mapSet)) && MOP_CommonPointCut();
after (Set mapSet) returning (Iterator iter) : SafeSyncMap_syncCreateIter(mapSet) {
System.out.println(thisEnclosingJoinPointStaticPart.toString());

 

}
}
 When dumping with AspectJ weaver using (<dump> with beforeandafter options in aop-ajc.xml). I could see the class being instrumented e.g. avrora.sim.radio.Medium$BasicArbitrator  and the aspect is woven in method
mergeTransmissions(avrora.sim.radio.Medium$Receiver, java.util.List, long, int) but  advice code (which is the reflective information) cannot be seen in the output, which only shows the following:-

  

===== DaCapo 9.12 avrora starting =====
execution(boolean org.dacapo.harness.Benchmark.validate(String))
===== DaCapo 9.12 avrora PASSED in 1874 msec =====
execution(void org.dacapo.harness.Benchmark.postIterationCleanup(String))

 

Regards,

Omar

 


 

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Back to the top