]> source.dussan.org Git - aspectj.git/commitdiff
Implemented feature for Bugzilla Bug 48091
authorjhugunin <jhugunin>
Sat, 24 Jan 2004 02:28:54 +0000 (02:28 +0000)
committerjhugunin <jhugunin>
Sat, 24 Jan 2004 02:28:54 +0000 (02:28 +0000)
   Lazy instantiation of thisJoinPoint
Speed-ups of 10-100X are measured even when running a small test case with minimal GC issues.

The actual feature implemented is that thisJoinPoint objects are only created just before calling the method for advice that requires them.  To take advantage of this feature you must use an if PCD or some other dynamic test that occurs in the PCD not the advice body to guard the expensive creation of the thisJoinPoint object.

-XlazyTjp flag must be passed to compiler to enable this feature.
If any around advice is present on the joinpoint then lazy instantiation
will be disabled.  An Xlint warning will be displayed in this case.

As a related optimization, several helper methods were added to
Factory.makeJP to reduce the code size when thisJoinPoint is used.

17 files changed:
lib/test/aspectjrt.jar
org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
org.aspectj.ajdt.core/testdata/src1/LazyTjp.aj [new file with mode: 0644]
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/AjdtBatchTests.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/CommandTestCase.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PerformanceTestCase.java [new file with mode: 0644]
runtime/src/org/aspectj/runtime/reflect/Factory.java
weaver/src/org/aspectj/weaver/Lint.java
weaver/src/org/aspectj/weaver/World.java
weaver/src/org/aspectj/weaver/XlintDefault.properties
weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
weaver/testdata/TjpAround2HelloWorld.txt
weaver/testdata/TjpAroundHelloWorld.txt
weaver/testdata/TjpBeforeHelloWorld.txt

index 7e4e30f0fd891d8cd2a206483539167aa71828dc..7254363afeb08f8fd5319ad110525590e4e19c87 100644 (file)
Binary files a/lib/test/aspectjrt.jar and b/lib/test/aspectjrt.jar differ
index aa40a8242a809a2756e9f6f06cafe20462cd1f28..cf6174746edf74c09584b1ea9014ef9fdb0c66e0 100644 (file)
@@ -442,6 +442,8 @@ public class BuildArgParser extends Main {
                                buildConfig.setNoWeave(true);
                        } else if (arg.equals("-XserializableAspects")) {
                                buildConfig.setXserializableAspects(true);
+                       } else if (arg.equals("-XlazyTjp")) {
+                               buildConfig.setXlazyTjp(true);
                        } else if (arg.equals("-XnoInline")) {
                                buildConfig.setXnoInline(true);
                        } else if (arg.equals("-Xlintfile")) { 
index a106f1424a4fff90307b26fee924f709aeedb250..ad182a589233ba601f57cc13638438abef610978 100644 (file)
@@ -54,6 +54,7 @@ public class AjBuildConfig { // XXX needs bootclasspath?
        private boolean emacsSymMode = false;
        private boolean noWeave = false;
        private boolean XserializableAspects = false;
+       private boolean XlazyTjp = false;
        private boolean XnoInline = false;
        private String lintMode = AJLINT_DEFAULT;
        private File lintSpecFile = null;
@@ -452,4 +453,13 @@ public class AjBuildConfig { // XXX needs bootclasspath?
        public void doNotProceed() {
                shouldProceed = false;
        }
+
+       public boolean isXlazyTjp() {
+               return XlazyTjp;
+       }
+
+       public void setXlazyTjp(boolean b) {
+               XlazyTjp = b;
+       }
+
 }
index 1ab91d09ed3e2556c494c262a5b41367569fc6bc..89fc570712b746dc575fa5fcd40b438d2ec58133 100644 (file)
@@ -187,6 +187,7 @@ public class AjBuildManager {
        private void initBcelWorld(IMessageHandler handler) throws IOException {
                bcelWorld = new BcelWorld(buildConfig.getClasspath(), handler, null);
                bcelWorld.setXnoInline(buildConfig.isXnoInline());
+               bcelWorld.setXlazyTjp(buildConfig.isXlazyTjp());
                bcelWeaver = new BcelWeaver(bcelWorld);
                
                for (Iterator i = buildConfig.getAspectpath().iterator(); i.hasNext();) {
diff --git a/org.aspectj.ajdt.core/testdata/src1/LazyTjp.aj b/org.aspectj.ajdt.core/testdata/src1/LazyTjp.aj
new file mode 100644 (file)
index 0000000..f366273
--- /dev/null
@@ -0,0 +1,142 @@
+public class LazyTjp {\r
+       \r
+       private static final int N = 10000000;\r
+       // if lazy tjp is working, then calling the advice that uses thisJoinPoint should\r
+       // take at least this much longer than using an if pcd to bypass the advice\r
+       private static final double minimumRatio = 8.0; \r
+       \r
+       public static void main(String[] args) {\r
+               Trace.enabled = false;\r
+               double tOff = timeIt();  // throw the first result out for warm-up\r
+               tOff = timeIt();\r
+               Trace.enabled = true;\r
+               double tOn = timeIt();\r
+               Trace.enabled = false;\r
+               double tEasy = timeIt0();\r
+               double tGone = timeIt1();\r
+               \r
+               System.out.println("tOff: " + tOff + ", tOn: " + tOn + ", tEasy: " + tEasy + ", tGone: " + tGone);\r
+               System.out.println("ratio: " + tOn/tOff);\r
+               \r
+               Trace.enabled = false;\r
+               double tOff2 = timeIt2();\r
+               tOff2 = timeIt2();\r
+               Trace.enabled = true;\r
+               double tOn2 = timeIt2();\r
+               \r
+               System.out.println("tOff2: " + tOff2 + ", tOn2: " + tOn2);\r
+               System.out.println("ratio2: " + tOn2/tOff2);\r
+\r
+               \r
+               if (tOn/tOff < minimumRatio) {\r
+                       throw new IllegalStateException("tOn/tOff = " + tOn/tOff + " < " + minimumRatio);\r
+               }\r
+       }\r
+       \r
+       public static double timeIt() {\r
+               long start = System.currentTimeMillis();\r
+       \r
+               for (int i=0; i < N; i++) {\r
+                       doit(i);\r
+               }\r
+               \r
+               long stop = System.currentTimeMillis(); \r
+               return (stop-start)/1000.0;     \r
+       }\r
+       \r
+       private static int doit(int x) {\r
+               return x+1;\r
+       }\r
+       \r
+       public static double timeIt0() {\r
+               long start = System.currentTimeMillis();\r
+       \r
+               for (int i=0; i < N; i++) {\r
+                       doit0(i);\r
+               }\r
+               \r
+               long stop = System.currentTimeMillis(); \r
+               return (stop-start)/1000.0;     \r
+       }\r
+       \r
+       private static int doit0(int x) {\r
+               return x+1;\r
+       }\r
+       \r
+       public static double timeIt1() {\r
+               long start = System.currentTimeMillis();\r
+       \r
+               for (int i=0; i < N; i++) {\r
+                       doit1(i);\r
+               }\r
+               \r
+               long stop = System.currentTimeMillis(); \r
+               return (stop-start)/1000.0;     \r
+       }\r
+       \r
+       private static int doit1(int x) {\r
+               return x+1;\r
+       }\r
+       \r
+       public static double timeIt2() {\r
+               long start = System.currentTimeMillis();\r
+       \r
+               for (int i=0; i < N; i++) {\r
+                       doit2(i);\r
+               }\r
+               \r
+               long stop = System.currentTimeMillis(); \r
+               return (stop-start)/1000.0;     \r
+       }\r
+       \r
+       private static int doit2(int x) {\r
+               return x+1;\r
+       }\r
+       \r
+       private static int doit3(int x) {\r
+               return x+1;\r
+       }\r
+}\r
+\r
+aspect Trace {\r
+       public static boolean enabled = false;\r
+       \r
+       public static int counter = 0;\r
+       \r
+       pointcut traced(): if (enabled) && execution(* LazyTjp.doit(..));\r
+       \r
+       before(): traced() {\r
+               Object[] args = thisJoinPoint.getArgs();\r
+               counter += args.length;\r
+       }\r
+       \r
+       before(): execution(* LazyTjp.doit0(..)) {\r
+               counter += 1;\r
+       }\r
+       \r
+       pointcut traced2(): if (enabled) && execution(* LazyTjp.doit2(..));\r
+       \r
+       before(): traced2() {\r
+               Object[] args = thisJoinPoint.getArgs();\r
+               counter += args.length;\r
+       }\r
+\r
+       after() returning: traced2() {\r
+               Object[] args = thisJoinPoint.getArgs();\r
+               counter += args.length;\r
+       }\r
+\r
+\r
+       pointcut traced3(): if (enabled) && execution(* LazyTjp.doit3(..));\r
+       \r
+       before(): traced3() {\r
+               Object[] args = thisJoinPoint.getArgs();\r
+               counter += args.length;\r
+       }\r
+\r
+       Object around(): traced3() {  // expect Xlint warning in -XlazyTjp mode\r
+               return proceed();\r
+       }\r
+\r
+\r
+}
\ No newline at end of file
index 8075e9888dd2c323e52c3015c291b51b3b466ada..80710268c8e218d1f8f7088917c275a328f653c0 100644 (file)
@@ -25,7 +25,8 @@ public class AjdtBatchTests extends TestCase {
         //$JUnit-BEGIN$
         suite.addTestSuite(BasicCommandTestCase.class); 
         suite.addTestSuite(BinaryFormsTestCase.class); 
-        suite.addTestSuite(CompileAndRunTestCase.class); 
+               suite.addTestSuite(CompileAndRunTestCase.class); 
+               suite.addTestSuite(PerformanceTestCase.class); 
         suite.addTestSuite(ImageTestCase.class); 
         suite.addTestSuite(MultipleCompileTestCase.class); 
         // XXX suite.addTestSuite(VerifyWeaveTestCase.class); 
index c50ac5c89398a786f11d880348501fcaab62b898..a508e512c3cf3c358ed549a51f1c3a4810654524 100644 (file)
@@ -45,6 +45,10 @@ public abstract class CommandTestCase extends TestCase {
 
 
        public static void checkCompile(String source, int[] expectedErrors) {
+               checkCompile(source, new String[0], expectedErrors);
+       }
+       
+       public static void checkCompile(String source, String[] extraArgs, int[] expectedErrors) {
                List args = new ArrayList();
                args.add("-verbose");
                
@@ -58,6 +62,10 @@ public abstract class CommandTestCase extends TestCase {
                
                args.add("-g");  //XXX need this to get sourcefile and line numbers, shouldn't
                
+               for (int i = 0; i < extraArgs.length; i++) {
+                       args.add(extraArgs[i]);
+               }
+               
                args.add(AjdtAjcTests.TESTDATA_PATH + "/" + source);
                
                runCompiler(args, expectedErrors);
diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PerformanceTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PerformanceTestCase.java
new file mode 100644 (file)
index 0000000..527fe93
--- /dev/null
@@ -0,0 +1,42 @@
+/* *******************************************************************
+ * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ *  
+ * Contributors: 
+ *     PARC     initial implementation 
+ * ******************************************************************/
+
+package org.aspectj.ajdt.internal.compiler.batch;
+
+import java.io.IOException;
+
+import org.aspectj.testing.util.TestUtil;
+
+
+public class PerformanceTestCase extends CommandTestCase {
+
+       public PerformanceTestCase(String name) {
+               super(name);
+       }
+
+       
+       // this is a nice test, but not strictly needed
+       public void xxx_testLazyTjpOff() throws IOException {
+               checkCompile("src1/LazyTjp.aj", NO_ERRORS);
+               try {
+                       TestUtil.runMain("out", "LazyTjp");
+                       fail("expected an exception when running without -XlazyTjp");
+               } catch (IllegalStateException e) {
+                       // expected exception thrown when no -XlazyTjp
+               }
+       }
+       
+       public void testLazyTjp() throws IOException {
+               checkCompile("src1/LazyTjp.aj", new String[] {"-XlazyTjp","-Xlint:error"}, new int[] {97});
+               TestUtil.runMain("out", "LazyTjp");
+       }
+}
index 7812863899b17139a9d6a1836f67b17cd6c29836..44f03d6862205851b9aa2de19cb531f757061d30 100644 (file)
@@ -40,11 +40,31 @@ public final class Factory {
         return new JoinPointImpl.StaticPartImpl(kind, sig, makeSourceLoc(l, -1));
     }
     
-    public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, 
-                        Object _this, Object target, Object[] args)
-    {
-        return new JoinPointImpl(staticPart, _this, target, args);
-    }
+    private static Object[] NO_ARGS = new Object[0];
+       public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, 
+                                               Object _this, Object target)
+       {
+               return new JoinPointImpl(staticPart, _this, target, NO_ARGS);
+       }
+    
+       public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, 
+                                               Object _this, Object target, Object arg0)
+       {
+               return new JoinPointImpl(staticPart, _this, target, new Object[] {arg0});
+       }
+    
+       public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, 
+                                               Object _this, Object target, Object arg0, Object arg1)
+       {
+               return new JoinPointImpl(staticPart, _this, target, new Object[] {arg0, arg1});
+       }
+    
+    
+       public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, 
+                                               Object _this, Object target, Object[] args)
+       {
+               return new JoinPointImpl(staticPart, _this, target, args);
+       }
     
     public MethodSignature makeMethodSig(String stringRep) {
         MethodSignatureImpl ret = new MethodSignatureImpl(stringRep);
index 5a2d1c5668153aa8d071f98669e2715a2c01ce14..c9fc271cd0f3223e248f1731e3d91f03de244431 100644 (file)
@@ -50,6 +50,9 @@ public class Lint {
     public final Kind unmatchedSuperTypeInCall = 
         new Kind("unmatchedSuperTypeInCall", "does not match because declaring type is {0}, if match desired use target({1})");
             
+       public final Kind canNotImplementLazyTjp = 
+               new Kind("canNotImplementLazyTjp", "can not implement lazyTjp on this joinpoint {0} because around advice is used");
+
        public Lint(World world) {
                this.world = world;
        }
index 289c5ae7f16fa51cdcb22d2fe794cfbd3d35a1c5..4817785328c990a3827c4187c16fa42a98b42095 100644 (file)
@@ -41,6 +41,7 @@ public abstract class World {
     protected Lint lint = new Lint(this);
     
     protected boolean XnoInline;
+    protected boolean XlazyTjp;
        
     protected World() {
         super();
@@ -367,6 +368,14 @@ public abstract class World {
        public void setXnoInline(boolean xnoInline) {
                XnoInline = xnoInline;
        }
+       
+       public boolean isXlazyTjp() {
+               return XlazyTjp;
+       }
+
+       public void setXlazyTjp(boolean b) {
+               XlazyTjp = b;
+       }
 
        public ResolvedTypeX.Name lookupOrCreateName(TypeX ty) {
                String signature = ty.getSignature();
@@ -378,4 +387,5 @@ public abstract class World {
         
                return ret;
        }
+
 }
index 10da55a66b71ecdd7a2f97c39bef97a93feb5fe5..7ddba894d8d22420ee2647eb70a76408441a2ab9 100644 (file)
@@ -8,3 +8,5 @@ typeNotExposedToWeaver = warning
 shadowNotInStructure = ignore
 
 unmatchedSuperTypeInCall = warning
+
+canNotImplementLazyTjp = warning
\ No newline at end of file
index 88b1e9b7cbc7c97d336a52b583ce2d14f2424cf5..65b90ef2e74540070ec04cd50a61a9f3c61f82f2 100644 (file)
@@ -92,7 +92,7 @@ public class BcelAdvice extends Advice {
         }
 
         if ((getExtraParameterFlags() & ThisJoinPoint) != 0) {
-               ((BcelShadow)shadow).getThisJoinPointVar();
+               ((BcelShadow)shadow).requireThisJoinPoint(pointcutTest != Literal.TRUE && getKind() != AdviceKind.Around);
         }
         
         if ((getExtraParameterFlags() & ThisEnclosingJoinPointStaticPart) != 0) {
@@ -298,7 +298,7 @@ public class BcelAdvice extends Advice {
         }
         
         if ((getExtraParameterFlags() & ThisJoinPoint) != 0) {
-               shadow.getThisJoinPointBcelVar().appendLoad(il, fact);
+               il.append(shadow.loadThisJoinPoint());
         }
         
 
index 081d9f63452a35e4ba0b684e9d2d38ba964c6dd9..9069c915ef431780c13132f57772a28692c9f552 100644 (file)
@@ -43,6 +43,7 @@ import org.apache.bcel.generic.SWAP;
 import org.apache.bcel.generic.TargetLostException;
 import org.apache.bcel.generic.Type;
 import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.weaver.Advice;
 import org.aspectj.weaver.AdviceKind;
 import org.aspectj.weaver.AjcMemberMaker;
 import org.aspectj.weaver.BCException;
@@ -248,11 +249,15 @@ public class BcelShadow extends Shadow {
                }
 
                // now we ask each munger to request our state
+               isThisJoinPointLazy = world.isXlazyTjp();
+               
                for (Iterator iter = mungers.iterator(); iter.hasNext();) {
                        ShadowMunger munger = (ShadowMunger) iter.next();
                        munger.specializeOn(this);
                }
                
+               initializeThisJoinPoint();
+
            // If we are an expression kind, we require our target/arguments on the stack
            // before we do our actual thing.  However, they may have been removed
            // from the stack as the shadowMungers have requested state.  
@@ -765,12 +770,11 @@ public class BcelShadow extends Shadow {
 
     // reflective thisJoinPoint support
     private BcelVar thisJoinPointVar = null;
+    private boolean isThisJoinPointLazy;
+    private int lazyTjpConsumers = 0;
     private BcelVar thisJoinPointStaticPartVar = null;  
     // private BcelVar thisEnclosingJoinPointStaticPartVar = null;  
     
-       public final Var getThisJoinPointVar() {
-               return getThisJoinPointBcelVar();
-       }
        public final Var getThisJoinPointStaticPartVar() {
                return getThisJoinPointStaticPartBcelVar();
        }
@@ -778,36 +782,144 @@ public class BcelShadow extends Shadow {
                return getThisEnclosingJoinPointStaticPartBcelVar();
        }
     
-    public BcelVar getThisJoinPointBcelVar() {
+    public void requireThisJoinPoint(boolean hasGuardTest) {
+       if (!hasGuardTest) {
+               isThisJoinPointLazy = false;
+       } else {
+               lazyTjpConsumers++;
+       }
        if (thisJoinPointVar == null) {
-               thisJoinPointVar = genTempVar(TypeX.forName("org.aspectj.lang.JoinPoint"));
-               InstructionFactory fact = getFactory();
-               InstructionList il = new InstructionList();
-               BcelVar staticPart = getThisJoinPointStaticPartBcelVar();
-               staticPart.appendLoad(il, fact);
-               if (hasThis()) {
-                       ((BcelVar)getThisVar()).appendLoad(il, fact);
-               } else {
-                       il.append(new ACONST_NULL());
-               }
-               if (hasTarget()) {
-                       ((BcelVar)getTargetVar()).appendLoad(il, fact);
-               } else {
-                       il.append(new ACONST_NULL());
-               }
-                       il.append(makeArgsObjectArray());
-               
-               il.append(fact.createInvoke("org.aspectj.runtime.reflect.Factory", 
-                                                       "makeJP", LazyClassGen.tjpType,
-                                                       new Type[] { LazyClassGen.staticTjpType,
-                                                                       Type.OBJECT, Type.OBJECT, new ArrayType(Type.OBJECT, 1)},
-                                                       Constants.INVOKESTATIC));
-               il.append(thisJoinPointVar.createStore(fact));
-               range.insert(il, Range.OutsideBefore);
+                       thisJoinPointVar = genTempVar(TypeX.forName("org.aspectj.lang.JoinPoint"));
        }
+    }
+    
+    
+    public Var getThisJoinPointVar() {
+       requireThisJoinPoint(false);
        return thisJoinPointVar;
     }
     
+    void initializeThisJoinPoint() {
+       if (thisJoinPointVar == null) return;
+       
+       if (isThisJoinPointLazy) {
+               isThisJoinPointLazy = checkLazyTjp();
+       }
+               
+               if (isThisJoinPointLazy) {
+                       createThisJoinPoint(); // make sure any state needed is initialized, but throw the instructions out
+                       
+                       if (lazyTjpConsumers == 1) return; // special case only one lazyTjpUser
+                       
+                       InstructionFactory fact = getFactory();
+                       InstructionList il = new InstructionList();
+                       il.append(InstructionConstants.ACONST_NULL);
+                       il.append(thisJoinPointVar.createStore(fact));
+                       range.insert(il, Range.OutsideBefore);
+               } else {
+                       InstructionFactory fact = getFactory();
+                       InstructionList il = createThisJoinPoint();
+                       il.append(thisJoinPointVar.createStore(fact));
+                       range.insert(il, Range.OutsideBefore);
+               }
+    }
+    
+    private boolean checkLazyTjp() {           
+       // check for around advice
+       for (Iterator i = mungers.iterator(); i.hasNext();) {
+                       ShadowMunger munger = (ShadowMunger) i.next();
+                       if (munger instanceof Advice) {
+                               if ( ((Advice)munger).getKind() == AdviceKind.Around) {
+                                       world.getLint().canNotImplementLazyTjp.signal(
+                                           new String[] {toString()},
+                                           getSourceLocation(),
+                                           new ISourceLocation[] { munger.getSourceLocation() }
+                                       );
+                                       return false;
+                               }
+                       }
+               }
+       
+       return true;
+    }
+    
+    InstructionList loadThisJoinPoint() {
+               InstructionFactory fact = getFactory();
+               InstructionList il = new InstructionList();
+
+       if (isThisJoinPointLazy) {
+               il.append(createThisJoinPoint());
+               
+               if (lazyTjpConsumers > 1) {
+                               il.append(thisJoinPointVar.createStore(fact));
+                               
+                               InstructionHandle end = il.append(thisJoinPointVar.createLoad(fact));
+                               
+                               il.insert(InstructionFactory.createBranchInstruction(Constants.IFNONNULL, end));
+                               il.insert(thisJoinPointVar.createLoad(fact));
+               }
+       } else {                        
+                       thisJoinPointVar.appendLoad(il, fact);
+       }
+       
+               return il;
+    }
+
+       InstructionList createThisJoinPoint() {
+               InstructionFactory fact = getFactory();
+               InstructionList il = new InstructionList();
+               
+               BcelVar staticPart = getThisJoinPointStaticPartBcelVar();
+               staticPart.appendLoad(il, fact);
+               if (hasThis()) {
+                       ((BcelVar)getThisVar()).appendLoad(il, fact);
+               } else {
+                       il.append(new ACONST_NULL());
+               }
+               if (hasTarget()) {
+                       ((BcelVar)getTargetVar()).appendLoad(il, fact);
+               } else {
+                       il.append(new ACONST_NULL());
+               }
+               
+               switch(getArgCount()) {
+                       case 0:
+                               il.append(fact.createInvoke("org.aspectj.runtime.reflect.Factory", 
+                                                                       "makeJP", LazyClassGen.tjpType,
+                                                                       new Type[] { LazyClassGen.staticTjpType,
+                                                                                       Type.OBJECT, Type.OBJECT},
+                                                                       Constants.INVOKESTATIC));
+                               break;
+                       case 1:
+                               ((BcelVar)getArgVar(0)).appendLoadAndConvert(il, fact, world.resolve(ResolvedTypeX.OBJECT));
+                               il.append(fact.createInvoke("org.aspectj.runtime.reflect.Factory", 
+                                                                       "makeJP", LazyClassGen.tjpType,
+                                                                       new Type[] { LazyClassGen.staticTjpType,
+                                                                                       Type.OBJECT, Type.OBJECT, Type.OBJECT},
+                                                                       Constants.INVOKESTATIC));
+                               break;
+                       case 2:
+                               ((BcelVar)getArgVar(0)).appendLoadAndConvert(il, fact, world.resolve(ResolvedTypeX.OBJECT));
+                               ((BcelVar)getArgVar(1)).appendLoadAndConvert(il, fact, world.resolve(ResolvedTypeX.OBJECT));
+                               il.append(fact.createInvoke("org.aspectj.runtime.reflect.Factory", 
+                                                                       "makeJP", LazyClassGen.tjpType,
+                                                                       new Type[] { LazyClassGen.staticTjpType,
+                                                                                       Type.OBJECT, Type.OBJECT, Type.OBJECT, Type.OBJECT},
+                                                                       Constants.INVOKESTATIC));
+                               break;
+                       default:
+                               il.append(makeArgsObjectArray());
+                               il.append(fact.createInvoke("org.aspectj.runtime.reflect.Factory", 
+                                                                       "makeJP", LazyClassGen.tjpType,
+                                                                       new Type[] { LazyClassGen.staticTjpType,
+                                                                                       Type.OBJECT, Type.OBJECT, new ArrayType(Type.OBJECT, 1)},
+                                                                       Constants.INVOKESTATIC));
+                               break;
+               }
+               
+               return il;
+       }
+    
     public BcelVar getThisJoinPointStaticPartBcelVar() {
        if (thisJoinPointStaticPartVar == null) {
                Field field = getEnclosingClass().getTjpField(this);
index 7f43db75206c5934d6686d7e2a986c89f4a765c7..3531db91738ecd05870aef8b4fd57659d807ff59 100644 (file)
@@ -9,27 +9,23 @@ public class HelloWorld extends java.lang.Object:
                     GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ALOAD_0
                     ALOAD_0
-                    BIPUSH 0
-                    ANEWARRAY java.lang.Object
-                    ASTORE_2
-                    ALOAD_2
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
                     ASTORE_1
     constructor-execution(void HelloWorld.<init>())
     |               BIPUSH 2
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 4
-    |               ALOAD 4
+    |               ASTORE_3
+    |               ALOAD_3
     |               BIPUSH 0
     |               ALOAD_0
     |               AASTORE
-    |               ALOAD 4
+    |               ALOAD_3
     |               BIPUSH 1
     |               ALOAD_1
     |               AASTORE
     |               NEW HelloWorld$AjcClosure3
     |               DUP
-    |               ALOAD 4
+    |               ALOAD_3
     |               INVOKESPECIAL HelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
     |               ALOAD_1
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
@@ -40,37 +36,30 @@ public class HelloWorld extends java.lang.Object:
 
   public static void main(String[]):
                     ALOAD_0
-                    ASTORE 11
+                    ASTORE 9
                     GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
                     ACONST_NULL
-                    BIPUSH 1
-                    ANEWARRAY java.lang.Object
-                    ASTORE 13
-                    ALOAD 13
-                    BIPUSH 0
-                    ALOAD 11
-                    AASTORE
-                    ALOAD 13
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 12
+                    ALOAD 9
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
     method-execution(void HelloWorld.main(java.lang.String[]))
     |               BIPUSH 2
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 15
-    |               ALOAD 15
+    |               ASTORE 12
+    |               ALOAD 12
     |               BIPUSH 0
-    |               ALOAD 11
+    |               ALOAD 9
     |               AASTORE
-    |               ALOAD 15
-    |               BIPUSH 1
     |               ALOAD 12
+    |               BIPUSH 1
+    |               ALOAD 10
     |               AASTORE
     |               NEW HelloWorld$AjcClosure15
     |               DUP
-    |               ALOAD 15
-    |               INVOKESPECIAL HelloWorld$AjcClosure15.<init> ([Ljava/lang/Object;)V
     |               ALOAD 12
+    |               INVOKESPECIAL HelloWorld$AjcClosure15.<init> ([Ljava/lang/Object;)V
+    |               ALOAD 10
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               POP
     |               RETURN
@@ -208,65 +197,54 @@ public class HelloWorld extends java.lang.Object:
                     GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
                     ACONST_NULL
-                    BIPUSH 0
-                    ANEWARRAY java.lang.Object
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
                     ASTORE_2
-                    ALOAD_2
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 4
     field-get(java.io.PrintStream java.lang.System.out)
     |               BIPUSH 1
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 6
-    |               ALOAD 6
-    |               BIPUSH 0
+    |               ASTORE 4
     |               ALOAD 4
+    |               BIPUSH 0
+    |               ALOAD_2
     |               AASTORE
     |               NEW HelloWorld$AjcClosure7
     |               DUP
-    |               ALOAD 6
-    |               INVOKESPECIAL HelloWorld$AjcClosure7.<init> ([Ljava/lang/Object;)V
     |               ALOAD 4
+    |               INVOKESPECIAL HelloWorld$AjcClosure7.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_2
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               CHECKCAST java.io.PrintStream
     field-get(java.io.PrintStream java.lang.System.out)
                     LDC "hello world"   (line 9)
+                    ASTORE 6
                     ASTORE 8
-                    ASTORE 10
                     GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
-                    ALOAD 10
-                    BIPUSH 1
-                    ANEWARRAY java.lang.Object
-                    ASTORE 12
-                    ALOAD 12
-                    BIPUSH 0
                     ALOAD 8
-                    AASTORE
-                    ALOAD 12
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 14
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
     method-call(void java.io.PrintStream.println(java.lang.String))
     |               BIPUSH 3
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 16
-    |               ALOAD 16
+    |               ASTORE 12
+    |               ALOAD 12
     |               BIPUSH 0
-    |               ALOAD 10
+    |               ALOAD 8
     |               AASTORE
-    |               ALOAD 16
+    |               ALOAD 12
     |               BIPUSH 1
-    |               ALOAD 8
+    |               ALOAD 6
     |               AASTORE
-    |               ALOAD 16
+    |               ALOAD 12
     |               BIPUSH 2
-    |               ALOAD 14
+    |               ALOAD 10
     |               AASTORE
     |               NEW HelloWorld$AjcClosure11
     |               DUP
-    |               ALOAD 16
+    |               ALOAD 12
     |               INVOKESPECIAL HelloWorld$AjcClosure11.<init> ([Ljava/lang/Object;)V
-    |               ALOAD 14
+    |               ALOAD 10
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               POP
     method-call(void java.io.PrintStream.println(java.lang.String))
index 90581cd641dc8304c22c8cccb756ccffdaa4885c..65ca8bc5e2cf57545bf5d73c96469c7ea85a2b89 100644 (file)
@@ -9,27 +9,23 @@ public class HelloWorld extends java.lang.Object:
                     GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ALOAD_0
                     ALOAD_0
-                    BIPUSH 0
-                    ANEWARRAY java.lang.Object
-                    ASTORE_2
-                    ALOAD_2
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
                     ASTORE_1
     constructor-execution(void HelloWorld.<init>())
     |               BIPUSH 2
     |               ANEWARRAY java.lang.Object
-    |               ASTORE_3
-    |               ALOAD_3
+    |               ASTORE_2
+    |               ALOAD_2
     |               BIPUSH 0
     |               ALOAD_0
     |               AASTORE
-    |               ALOAD_3
+    |               ALOAD_2
     |               BIPUSH 1
     |               ALOAD_1
     |               AASTORE
     |               NEW HelloWorld$AjcClosure1
     |               DUP
-    |               ALOAD_3
+    |               ALOAD_2
     |               INVOKESPECIAL HelloWorld$AjcClosure1.<init> ([Ljava/lang/Object;)V
     |               ALOAD_1
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
@@ -40,37 +36,30 @@ public class HelloWorld extends java.lang.Object:
 
   public static void main(String[]):
                     ALOAD_0
-                    ASTORE 9
+                    ASTORE 7
                     GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
                     ACONST_NULL
-                    BIPUSH 1
-                    ANEWARRAY java.lang.Object
-                    ASTORE 11
-                    ALOAD 11
-                    BIPUSH 0
-                    ALOAD 9
-                    AASTORE
-                    ALOAD 11
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 10
+                    ALOAD 7
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 8
     method-execution(void HelloWorld.main(java.lang.String[]))
     |               BIPUSH 2
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 12
-    |               ALOAD 12
-    |               BIPUSH 0
+    |               ASTORE 9
     |               ALOAD 9
+    |               BIPUSH 0
+    |               ALOAD 7
     |               AASTORE
-    |               ALOAD 12
+    |               ALOAD 9
     |               BIPUSH 1
-    |               ALOAD 10
+    |               ALOAD 8
     |               AASTORE
     |               NEW HelloWorld$AjcClosure7
     |               DUP
-    |               ALOAD 12
+    |               ALOAD 9
     |               INVOKESPECIAL HelloWorld$AjcClosure7.<init> ([Ljava/lang/Object;)V
-    |               ALOAD 10
+    |               ALOAD 8
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               POP
     |               RETURN
@@ -142,65 +131,54 @@ public class HelloWorld extends java.lang.Object:
                     GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
                     ACONST_NULL
-                    BIPUSH 0
-                    ANEWARRAY java.lang.Object
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
                     ASTORE_2
-                    ALOAD_2
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 4
     field-get(java.io.PrintStream java.lang.System.out)
     |               BIPUSH 1
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 6
-    |               ALOAD 6
-    |               BIPUSH 0
+    |               ASTORE 4
     |               ALOAD 4
+    |               BIPUSH 0
+    |               ALOAD_2
     |               AASTORE
     |               NEW HelloWorld$AjcClosure3
     |               DUP
-    |               ALOAD 6
-    |               INVOKESPECIAL HelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
     |               ALOAD 4
+    |               INVOKESPECIAL HelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_2
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               CHECKCAST java.io.PrintStream
     field-get(java.io.PrintStream java.lang.System.out)
                     LDC "hello world"   (line 9)
+                    ASTORE 6
                     ASTORE 8
-                    ASTORE 10
                     GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
-                    ALOAD 10
-                    BIPUSH 1
-                    ANEWARRAY java.lang.Object
-                    ASTORE 12
-                    ALOAD 12
-                    BIPUSH 0
                     ALOAD 8
-                    AASTORE
-                    ALOAD 12
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 14
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
     method-call(void java.io.PrintStream.println(java.lang.String))
     |               BIPUSH 3
     |               ANEWARRAY java.lang.Object
-    |               ASTORE 16
-    |               ALOAD 16
+    |               ASTORE 12
+    |               ALOAD 12
     |               BIPUSH 0
-    |               ALOAD 10
+    |               ALOAD 8
     |               AASTORE
-    |               ALOAD 16
+    |               ALOAD 12
     |               BIPUSH 1
-    |               ALOAD 8
+    |               ALOAD 6
     |               AASTORE
-    |               ALOAD 16
+    |               ALOAD 12
     |               BIPUSH 2
-    |               ALOAD 14
+    |               ALOAD 10
     |               AASTORE
     |               NEW HelloWorld$AjcClosure5
     |               DUP
-    |               ALOAD 16
+    |               ALOAD 12
     |               INVOKESPECIAL HelloWorld$AjcClosure5.<init> ([Ljava/lang/Object;)V
-    |               ALOAD 14
+    |               ALOAD 10
     |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
     |               POP
     method-call(void java.io.PrintStream.println(java.lang.String))
index 07649f7138ea7a15dde22fd1d01cde614b469fbe..ce462ec684117895730f4d49d2354de6092a90d0 100644 (file)
@@ -9,11 +9,7 @@ public class HelloWorld extends java.lang.Object:
                     GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ALOAD_0
                     ALOAD_0
-                    BIPUSH 0
-                    ANEWARRAY java.lang.Object
-                    ASTORE_2
-                    ALOAD_2
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
                     ASTORE_1
     constructor-execution(void HelloWorld.<init>())
     |               ALOAD_1
@@ -24,31 +20,20 @@ public class HelloWorld extends java.lang.Object:
 
   public static void main(String[]):
                     ALOAD_0
-                    ASTORE 9
+                    ASTORE 6
                     GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
                     ACONST_NULL
                     ACONST_NULL
-                    BIPUSH 1
-                    ANEWARRAY java.lang.Object
-                    ASTORE 8
-                    ALOAD 8
-                    BIPUSH 0
-                    ALOAD 9
-                    AASTORE
-                    ALOAD 8
-                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-                    ASTORE 7
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 5
     method-execution(void HelloWorld.main(java.lang.String[]))
-    |               ALOAD 7
+    |               ALOAD 5
     |               INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
     |               GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
     |               ACONST_NULL
     |               ACONST_NULL
-    |               BIPUSH 0
-    |               ANEWARRAY java.lang.Object
-    |               ASTORE_2
-    |               ALOAD_2
-    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
     |               ASTORE_1
     | field-get(java.io.PrintStream java.lang.System.out)
     | |             ALOAD_1
@@ -56,26 +41,19 @@ public class HelloWorld extends java.lang.Object:
     | |             GETSTATIC java.lang.System.out Ljava/io/PrintStream;   (line 8)
     | field-get(java.io.PrintStream java.lang.System.out)
     |               LDC "hello world"   (line 9)
+    |               ASTORE_3
     |               ASTORE 4
-    |               ASTORE 5
     |               GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
     |               ACONST_NULL
-    |               ALOAD 5
-    |               BIPUSH 1
-    |               ANEWARRAY java.lang.Object
-    |               ASTORE 6
-    |               ALOAD 6
-    |               BIPUSH 0
     |               ALOAD 4
-    |               AASTORE
-    |               ALOAD 6
-    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
-    |               ASTORE_3
+    |               ALOAD_3
+    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+    |               ASTORE_2
     | method-call(void java.io.PrintStream.println(java.lang.String))
-    | |             ALOAD_3
+    | |             ALOAD_2
     | |             INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
-    | |             ALOAD 5
     | |             ALOAD 4
+    | |             ALOAD_3
     | |             INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
     | method-call(void java.io.PrintStream.println(java.lang.String))
     |               RETURN   (line 11)