diff options
author | aclement <aclement> | 2005-12-12 11:16:49 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-12-12 11:16:49 +0000 |
commit | 1435cd1f6af805b0caa3dc786c7536f974023e80 (patch) | |
tree | e9e5051cd129e709fa33141405ed81500b41a22e | |
parent | 96c97433a198c2960be1afc282081886fb84bb46 (diff) | |
download | aspectj-1435cd1f6af805b0caa3dc786c7536f974023e80.tar.gz aspectj-1435cd1f6af805b0caa3dc786c7536f974023e80.zip |
tests and fixes for 119657. from matthew.
-rw-r--r-- | loadtime/src/org/aspectj/weaver/loadtime/Aj.java | 30 | ||||
-rw-r--r-- | loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java | 28 | ||||
-rw-r--r-- | tests/ltw/aop-defineaspect.xml | 1 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java | 28 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 79 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml | 2 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java | 8 | ||||
-rw-r--r-- | weaver/testdata/TraceJarHello.txt | 159 |
8 files changed, 236 insertions, 99 deletions
diff --git a/loadtime/src/org/aspectj/weaver/loadtime/Aj.java b/loadtime/src/org/aspectj/weaver/loadtime/Aj.java index c70545301..c5818e208 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/Aj.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/Aj.java @@ -11,8 +11,6 @@ *******************************************************************************/ package org.aspectj.weaver.loadtime; -import java.lang.reflect.Method; -import java.lang.reflect.InvocationTargetException; import java.util.Map; import java.util.WeakHashMap; @@ -130,34 +128,6 @@ public class Aj implements ClassPreProcessor { } } - static void defineClass(ClassLoader loader, String name, byte[] bytes) { - try { - //TODO av protection domain, and optimize - Method defineClass = ClassLoader.class.getDeclaredMethod( - "defineClass", new Class[]{ - String.class, bytes.getClass(), int.class, int.class - } - ); - defineClass.setAccessible(true); - defineClass.invoke( - loader, new Object[]{ - name, - bytes, - new Integer(0), - new Integer(bytes.length) - } - ); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof LinkageError) { - ;//is already defined (happens for X$ajcMightHaveAspect interfaces since aspects are reweaved) - } else { - e.printStackTrace(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - /** * Returns a namespace based on the contest of the aspects available */ diff --git a/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java b/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java index d889fbdc0..f2c628a35 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java @@ -15,6 +15,8 @@ package org.aspectj.weaver.loadtime; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; @@ -87,7 +89,7 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor { throwable.printStackTrace(); } - Aj.defineClass(loader, name, bytes);// could be done lazily using the hook + defineClass(loader, name, bytes);// could be done lazily using the hook } }; @@ -606,4 +608,28 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor { public void flushGeneratedClasses(){ generatedClasses = new HashMap(); } + + private void defineClass(ClassLoader loader, String name, byte[] bytes) { + info("generating class '" + name + "'"); + + try { + //TODO av protection domain, and optimize + Method defineClass = ClassLoader.class.getDeclaredMethod( + "defineClass", new Class[] { String.class, + bytes.getClass(), int.class, int.class }); + defineClass.setAccessible(true); + defineClass.invoke(loader, new Object[] { name, bytes, + new Integer(0), new Integer(bytes.length) }); + } catch (InvocationTargetException e) { + if (e.getTargetException() instanceof LinkageError) { + warn("define generated class failed",e.getTargetException()); + //is already defined (happens for X$ajcMightHaveAspect interfaces since aspects are reweaved) + // TODO maw I don't think this is OK and + } else { + warn("define generated class failed",e.getTargetException()); + } + } catch (Exception e) { + warn("define generated class failed",e); + } + } } diff --git a/tests/ltw/aop-defineaspect.xml b/tests/ltw/aop-defineaspect.xml index 5fdc064b0..f40bff2c4 100644 --- a/tests/ltw/aop-defineaspect.xml +++ b/tests/ltw/aop-defineaspect.xml @@ -4,5 +4,6 @@ <pointcut name="scope" expression="within(Main)"/> </concrete-aspect> </aspects> + <weaver options="-verbose"/> </aspectj> diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java index de41a5b81..de9881e39 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java @@ -808,6 +808,34 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("no StringOutOfBoundsException with generic inner aspects"); } + public void testIllegalAccessErrorWithAroundAdvice_pr119657() { + runTest("IllegalAccessError with around advice on interface method call"); + } + + public void testIllegalAccessErrorWithAroundAdviceNotSelf_pr119657() { + runTest("IllegalAccessError with around advice on interface method call not self"); + } + + public void testIllegalAccessErrorWithAroundAdviceNoWeaveLTW_pr119657() { + runTest("IllegalAccessError with around advice on interface method call using -XnoWeave and LTW"); + } + + public void testIllegalAccessErrorWithAroundAdviceLTW_pr119657() { + runTest("IllegalAccessError with around advice on interface method call using LTW"); + } + + public void testIllegalAccessErrorWithAroundAdviceNotSelfLTW_pr119657() { + runTest("IllegalAccessError with around advice on interface method call not self using LTW"); + } + + public void testIllegalAccessErrorWithAroundAdviceSelfAndNotSelfLTW_pr119657() { + runTest("IllegalAccessError with around advice on interface method call self and not self using LTW"); + } + + public void testIllegalAccessErrorWithAroundAdviceLTWNoInline_pr119657() { + runTest("IllegalAccessError with around advice on interface method call using LTW and -XnoInline"); + } + // helper methods..... public SyntheticRepository createRepos(File cpentry) { diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml index 89fe536a1..99628ba9b 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml @@ -5935,5 +5935,84 @@ > </run> </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java, accounts/recovery/Recovery.aj"/> + <run class="services.account.StockQuoteServiceTest"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + <run class="services.account.StockQuoteServiceTest" ltw="aop.xml"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call not self"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java, accounts/recovery/RecoveryNotSelf.aj"/> + <run class="services.account.StockQuoteServiceTest"> + <stdout> + <line text="RecoveryNotSelf.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + <run class="services.account.StockQuoteServiceTest" ltw="aop-notself.xml"> + <stdout> + <line text="RecoveryNotSelf.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call using -XnoWeave and LTW"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java"/> + <compile files="accounts/recovery/Recovery.aj" options="-XnoWeave"/> + <run class="services.account.StockQuoteServiceTest" ltw="aop.xml"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call using LTW"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java"/> + <compile files="accounts/recovery/Recovery.aj"/> + <run class="services.account.StockQuoteServiceTest" ltw="aop.xml"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call not self using LTW"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java"/> + <compile files="accounts/recovery/RecoveryNotSelf.aj"/> + <run class="services.account.StockQuoteServiceTest" ltw="aop-notself.xml"> + <stdout> + <line text="RecoveryNotSelf.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call self and not self using LTW"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java"/> + <compile files="accounts/recovery/Recovery.aj, accounts/recovery/RecoveryNotSelf.aj"/> + <run class="services.account.StockQuoteServiceTest" ltw="aop-selfandnotself.xml"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + <line text="RecoveryNotSelf.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> + + <ajc-test dir="bugs150/pr119657" title="IllegalAccessError with around advice on interface method call using LTW and -XnoInline"> + <compile files="services/account/StockQuoteServiceTest.java, services/accountdata/StockAccount.java, services/stockquote/StockQuoteService.java, services/stockquote/StockQuoteServiceImpl.java, services/account/AccountReport.java"/> + <compile files="accounts/recovery/Recovery.aj"/> + <run class="services.account.StockQuoteServiceTest" ltw="aop-noinline.xml"> + <stdout> + <line text="Recovery.around() call(float services.stockquote.StockQuoteService.getQuote(String))"/> + </stdout> + </run> + </ajc-test> </suite>
\ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml index 284357e42..3610790c0 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml @@ -132,6 +132,8 @@ <line text="Main.test2"/> </stdout> <stderr> + <line text="info generating class 'ConcreteAspect'"/> + <line text="info weaving 'Main'"/> <line text="AbstractSuperAspect.before_test1"/> </stderr> </run> diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index ad39f3f44..7b62788a9 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -167,6 +167,14 @@ public class BcelWeaver implements IWeaver { //System.out.println("type: " + type + " for " + aspectName); if (type.isAspect()) { + + // Bug 119657 ensure we use the unwoven aspect + WeaverStateInfo wsi = type.getWeaverState(); + if (wsi != null && wsi.isReweavable()) { + BcelObjectType classType = getClassType(type.getName()); + classType.setJavaClass(Utility.makeJavaClass(classType.getJavaClass().getFileName(), wsi.getUnwovenClassFileData(classType.getJavaClass().getBytes()))); + } + //TODO AV - happens to reach that a lot of time: for each type flagged reweavable X for each aspect in the weaverstate //=> mainly for nothing for LTW - pbly for something in incremental build... xcutSet.addOrReplaceAspect(type); diff --git a/weaver/testdata/TraceJarHello.txt b/weaver/testdata/TraceJarHello.txt index e9eeb7bae..358adf0c7 100644 --- a/weaver/testdata/TraceJarHello.txt +++ b/weaver/testdata/TraceJarHello.txt @@ -45,25 +45,40 @@ public class DynamicHelloWorld extends java.lang.Object implements java.io.Seria | INVOKESTATIC MyTrace.aspectOf ()LMyTrace; | ALOAD_0 | INVOKEVIRTUAL Trace.ajc$before$Trace$1$26352be2 (Ljava/lang/Object;)V + | INVOKESTATIC MyTrace.aspectOf ()LMyTrace; + | BIPUSH 3 + | ANEWARRAY java.lang.Object + | ASTORE 6 + | ALOAD 6 + | BIPUSH 0 | ALOAD_0 + | AASTORE + | ALOAD 6 + | BIPUSH 1 | ALOAD_3 + | AASTORE + | ALOAD 6 + | BIPUSH 2 | ALOAD 4 - | INVOKESTATIC MyTrace.aspectOf ()LMyTrace; - | ACONST_NULL - | INVOKESTATIC DynamicHelloWorld.doit_aroundBody3$advice (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;LTrace;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object; + | AASTORE + | NEW DynamicHelloWorld$AjcClosure3 + | DUP + | ALOAD 6 + | INVOKESPECIAL DynamicHelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V + | INVOKEVIRTUAL Trace.ajc$around$Trace$2$a986034c (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object; | CHECKCAST java.lang.String | GOTO L0 | L0: DUP - | ASTORE 5 + | ASTORE 7 | INVOKESTATIC MyTrace.aspectOf ()LMyTrace; | ALOAD_0 - | ALOAD 5 + | ALOAD 7 | INVOKEVIRTUAL MyTrace.ajc$afterReturning$MyTrace$1$2b31dfa3 (Ljava/lang/Object;Ljava/lang/Object;)V | ARETURN method-execution(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List)) end String doit(String, java.util.List) - private static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List): + static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List): ALOAD_2 // java.util.List l (line 21) ALOAD_1 // java.lang.String s INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z @@ -71,82 +86,90 @@ public class DynamicHelloWorld extends java.lang.Object implements java.io.Seria ALOAD_2 // java.util.List l (line 22) INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String; ARETURN - end private static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List) + end static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List) - private static final Object doit_aroundBody1$advice(DynamicHelloWorld, String, java.util.List, Trace, Object, org.aspectj.runtime.internal.AroundClosure): - GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 17) - NEW java.lang.StringBuffer - DUP - LDC "start around(2): " - INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V - ALOAD 4 - INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; - INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; - INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V - ALOAD 4 (line 18) - ALOAD 5 - ASTORE 7 - ASTORE 8 - ALOAD 8 - CHECKCAST DynamicHelloWorld + static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List): + INVOKESTATIC MyTrace.aspectOf ()LMyTrace; + ALOAD_0 + BIPUSH 3 + ANEWARRAY java.lang.Object + ASTORE_3 + ALOAD_3 + BIPUSH 0 + ALOAD_0 + AASTORE + ALOAD_3 + BIPUSH 1 ALOAD_1 + AASTORE + ALOAD_3 + BIPUSH 2 ALOAD_2 - INVOKESTATIC DynamicHelloWorld.doit_aroundBody0 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; - ASTORE 6 - GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 19) - NEW java.lang.StringBuffer + AASTORE + NEW DynamicHelloWorld$AjcClosure1 DUP - LDC "exiting around with(2): " - INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V - ALOAD 6 - INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; - INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; - INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V - ALOAD 6 (line 20) + ALOAD_3 + INVOKESPECIAL DynamicHelloWorld$AjcClosure1.<init> ([Ljava/lang/Object;)V + INVOKEVIRTUAL Trace.ajc$around$Trace$3$26352be2 (Ljava/lang/Object;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object; + CHECKCAST java.lang.String ARETURN - end private static final Object doit_aroundBody1$advice(DynamicHelloWorld, String, java.util.List, Trace, Object, org.aspectj.runtime.internal.AroundClosure) + end static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List) +end public class DynamicHelloWorld - private static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List): +public class DynamicHelloWorld$AjcClosure1 extends org.aspectj.runtime.internal.AroundClosure: + public void <init>(Object[]): ALOAD_0 ALOAD_1 - ALOAD_2 - INVOKESTATIC MyTrace.aspectOf ()LMyTrace; + INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V + RETURN + end public void <init>(Object[]) + + public Object run(Object[]): ALOAD_0 - ACONST_NULL - INVOKESTATIC DynamicHelloWorld.doit_aroundBody1$advice (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;LTrace;Ljava/lang/Object;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object; + GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object; + ASTORE_2 + ALOAD_1 + BIPUSH 0 + AALOAD + CHECKCAST DynamicHelloWorld + ALOAD_2 + BIPUSH 1 + AALOAD CHECKCAST java.lang.String + ALOAD_2 + BIPUSH 2 + AALOAD + CHECKCAST java.util.List + INVOKESTATIC DynamicHelloWorld.doit_aroundBody0 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; ARETURN - end private static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List) + end public Object run(Object[]) +end public class DynamicHelloWorld$AjcClosure1 - private static final Object doit_aroundBody3$advice(DynamicHelloWorld, String, java.util.List, Trace, org.aspectj.runtime.internal.AroundClosure): - LDC "Hi" (line 9) - ASTORE 5 - GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 10) - NEW java.lang.StringBuffer - DUP - LDC "start around: " - INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V - ALOAD 5 - INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; - INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; - INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V - ALOAD 4 (line 11) - ASTORE 7 +public class DynamicHelloWorld$AjcClosure3 extends org.aspectj.runtime.internal.AroundClosure: + public void <init>(Object[]): ALOAD_0 ALOAD_1 + INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V + RETURN + end public void <init>(Object[]) + + public Object run(Object[]): + ALOAD_0 + GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object; + ASTORE_2 + ALOAD_2 + BIPUSH 0 + AALOAD + CHECKCAST DynamicHelloWorld ALOAD_2 + BIPUSH 1 + AALOAD + CHECKCAST java.lang.String + ALOAD_2 + BIPUSH 2 + AALOAD + CHECKCAST java.util.List INVOKESTATIC DynamicHelloWorld.doit_aroundBody2 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; - ASTORE 6 - GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 12) - NEW java.lang.StringBuffer - DUP - LDC "exiting around with: " - INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V - ALOAD 6 - INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; - INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; - INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V - ALOAD 6 (line 13) ARETURN - end private static final Object doit_aroundBody3$advice(DynamicHelloWorld, String, java.util.List, Trace, org.aspectj.runtime.internal.AroundClosure) -end public class DynamicHelloWorld + end public Object run(Object[]) +end public class DynamicHelloWorld$AjcClosure3 |