Hi Ali. Well, according to the manifest in aspectjweaver.jar there is "Can-Redefine-Classes: true", but no "Can-Retransform-Classes: true". So at first I thought you were right with your assumption. But then I was curious and tried anyway, the only difference being that I added a static method to a class via Javassist because its API is more high level than ASM's, thus I did not have to learn so much for my little experiment.
What can I say? It worked nicely, not matter if I intercepted method calls inserted via Javassist or executions of my static method added via Javassist. And yes, I reproduced the chained Java Agent scenario you also used, i.e. my command line was something like: java -javaagent:agent-0.1-SNAPSHOT.jar -javaagent:aspectjweaver.jar (...) other.Main BTW, I used AspectJ 1.8.5 and JDK 7 for my test. -- Alexander Kriegisch http://scrum-master.de Ali Kheradmand schrieb am 26.03.2015 17:35: > Thanks for the response Alexander. Yes everything other than inserted method > calls get woven. > > It seems that AspectJ's transformer gets called before my agent on each class > regardless of the order of agents. From ClassFileTransformer's javadoc I see > that: > > > When there are multiple transformers, transformations are composed by > chaining the transform calls. That is, the byte array returned by one call to > transform becomes the input (via the classfileBuffer parameter) to the next > call. > > Transformations are applied in the following order: > > Retransformation incapable transformers > Retransformation incapable native transformers > Retransformation capable transformers > Retransformation capable native transformers > > > My agent is retransformation capable. I guess aspect weaver's agent is > retransformation incapable. > > Anyway the problem got solved by capturing method "execution" rather than > "call". This way, I don't need to care about the order of agents. > > > Regards, > > Ali > > > On Thu, Mar 26, 2015 at 4:50 AM, Alexander Kriegisch > <alexan...@kriegisch.name <mailto:alexan...@kriegisch.name> > wrote: >> >> >> Interesting project, Ali. >> >> >> Does the combination of agents work with other aspects, i.e. ones unrelated >> to the ASM-inserted method calls? I mean, does anything get woven at all? If >> so, my guess would be that the byte code ASM produces is not recognised as >> valid method calls by AspectJ. Otherwise there is another, more basic >> problem with mixing those agents. I never tried, actually. >> >> Regards >> >> -- >> >> Alexander Kriegisch >> >> http://scrum-master.de <http://scrum-master.de> >> >> >> Am 26.03.2015 um 03:58 schrieb Ali Kheradmand <a.i.kheradm...@gmail.com >> <mailto:a.i.kheradm...@gmail.com> >: >> >> >>> Hey everybody, >>> >>> >>> I need to capture array element access in AspectJ. But it seems that >>> AspectJ does not provide such a pointcut. In order to solve this problem my >>> idea was to insert calls to an specific static method before array accesses >>> and capture those method calls in AspectJ. >>> >>> I wrote a java instrumentation agent (using ASM) that inserts the static >>> method calls before array element accesses. The agent works fine. >>> >>> I also wrote an aspect that captures that method call. I generated a load >>> time weaving agent using that aspect. And that agent works fine too (by >>> that I mean if I manually add the method calls to source code, the agent >>> captures it at runtime) >>> >>> >>> Now I try to run both of the agents in order: >>> >>> java -javaagent:myagent.jar -javaagent:asperctjweaver.jar MyClass >>> >>> >>> It is said that " Agents are invoked in the same order as specified in >>> options.". and from that I except that myagent would insert method calls >>> before array accesses and asperctjweaver would capture those calls. But it >>> does not work this way: method calls get inserted before array accesses but >>> they do not get captured. However, the method calls that already existed in >>> the source code, get captured. >>> >>> >>> Does anybody have any idea on what the problem might be? >>> >>> >>> Regards, >>> >>> Ali >>> >>> >>> _______________________________________________ >>> aspectj-users mailing list >>> aspectj-users@eclipse.org <mailto:aspectj-users@eclipse.org> >>> To change your delivery options, retrieve your password, or unsubscribe >>> from this list, visit >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> <https://dev.eclipse.org/mailman/listinfo/aspectj-users> >> >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org <mailto:aspectj-users@eclipse.org> >> To change your delivery options, retrieve your password, or unsubscribe from >> this list, visit >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> <https://dev.eclipse.org/mailman/listinfo/aspectj-users> > > _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users