aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSemyon Danilov <samvimes@yandex.ru>2019-07-24 23:57:17 +0300
committerAndy Clement <aclement@pivotal.io>2019-09-10 10:27:03 -0700
commitd8821e28d6e4b59ab451dc166e96698646a6e750 (patch)
tree0336e70abf46f43a14d5830cc4bd3bc1f0e005d3
parent226df51a0cf61f8a1de5d1a7973de7f2fb7c0ff4 (diff)
downloadaspectj-d8821e28d6e4b59ab451dc166e96698646a6e750.tar.gz
aspectj-d8821e28d6e4b59ab451dc166e96698646a6e750.zip
- dont't weave synthetic enum helper method for switch
- add test for switch on enum with around all advice Signed-off-by: Semyon Danilov <samvimes@yandex.ru>
-rw-r--r--weaver/src/main/java/org/aspectj/weaver/bcel/BcelClassWeaver.java14
-rw-r--r--weaver/src/test/java/org/aspectj/weaver/bcel/WeaveTestCase.java2
-rw-r--r--weaver/testdata/AroundAllFancyHelloWorld.txt2
-rw-r--r--weaver/testdata/AroundAllHelloWorld.txt2
-rw-r--r--weaver/testdata/AroundAllHelloWorldEnumSwitch.txt390
-rw-r--r--weaver/testdata/bin/HelloWorldEnumSwitch$TestEnum.classbin0 -> 1094 bytes
-rw-r--r--weaver/testdata/bin/HelloWorldEnumSwitch.classbin0 -> 1117 bytes
-rw-r--r--weaver/testinputdata/org/aspectj/weaver/test/HelloWorldEnumSwitch.java21
8 files changed, 428 insertions, 3 deletions
diff --git a/weaver/src/main/java/org/aspectj/weaver/bcel/BcelClassWeaver.java b/weaver/src/main/java/org/aspectj/weaver/bcel/BcelClassWeaver.java
index 83919ed50..80d704891 100644
--- a/weaver/src/main/java/org/aspectj/weaver/bcel/BcelClassWeaver.java
+++ b/weaver/src/main/java/org/aspectj/weaver/bcel/BcelClassWeaver.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.Objects;
import org.aspectj.apache.bcel.Constants;
import org.aspectj.apache.bcel.classfile.BootstrapMethods;
@@ -93,6 +94,8 @@ class BcelClassWeaver implements IClassWeaver {
private static Trace trace = TraceFactory.getTraceFactory().getTrace(BcelClassWeaver.class);
+ private static final String SWITCH_TABLE_SYNTHETIC_METHOD_PREFIX = "$SWITCH_TABLE$";
+
public static boolean weave(BcelWorld world, LazyClassGen clazz, List<ShadowMunger> shadowMungers,
List<ConcreteTypeMunger> typeMungers, List<ConcreteTypeMunger> lateTypeMungers, boolean inReweavableMode) {
BcelClassWeaver classWeaver = new BcelClassWeaver(world, clazz, shadowMungers, typeMungers, lateTypeMungers);
@@ -2665,6 +2668,11 @@ class BcelClassWeaver implements IClassWeaver {
if (isOverweaving && mg.getName().startsWith(NameMangler.PREFIX)) {
return false;
}
+ if (mg.getName().startsWith(SWITCH_TABLE_SYNTHETIC_METHOD_PREFIX)
+ && Objects.equals(mg.getReturnType().getSignature(), "[I")) {
+ // this is a synthetic switch helper, should be skipped (since it's not 'declared')
+ return false;
+ }
enclosingShadow = BcelShadow.makeMethodExecution(world, mg, !canMatchBodyShadows);
} else if (effective.isWeaveBody()) {
ResolvedMember rm = effective.getEffectiveSignature();
@@ -3259,6 +3267,12 @@ class BcelClassWeaver implements IClassWeaver {
}
}
}
+
+ if (methodName.startsWith(SWITCH_TABLE_SYNTHETIC_METHOD_PREFIX)) {
+ // we shouldn't process calls to synthetic methods (since they're not 'declared')
+ proceed = false;
+ }
+
if (proceed) {
match(BcelShadow.makeMethodCall(world, mg, ih, enclosingShadow), shadowAccumulator);
}
diff --git a/weaver/src/test/java/org/aspectj/weaver/bcel/WeaveTestCase.java b/weaver/src/test/java/org/aspectj/weaver/bcel/WeaveTestCase.java
index 088a9a9d0..4bab41bfa 100644
--- a/weaver/src/test/java/org/aspectj/weaver/bcel/WeaveTestCase.java
+++ b/weaver/src/test/java/org/aspectj/weaver/bcel/WeaveTestCase.java
@@ -267,7 +267,7 @@ public abstract class WeaveTestCase extends TestCase {
// ----
public String[] getStandardTargets() {
- return new String[] { "HelloWorld", "FancyHelloWorld" };
+ return new String[] { "HelloWorld", "FancyHelloWorld", "HelloWorldEnumSwitch" };
}
public String getTraceJar() {
diff --git a/weaver/testdata/AroundAllFancyHelloWorld.txt b/weaver/testdata/AroundAllFancyHelloWorld.txt
index b13f9060d..5998268fb 100644
--- a/weaver/testdata/AroundAllFancyHelloWorld.txt
+++ b/weaver/testdata/AroundAllFancyHelloWorld.txt
@@ -1,6 +1,6 @@
public abstract class FancyHelloWorld extends java.lang.Object:
public void <init>():
- ALOAD_0 // LFancyHelloWorld; this (line 7)
+ ALOAD_0 // LFancyHelloWorld; ajc$this (line 7)
INVOKESPECIAL java.lang.Object.<init> ()V
constructor-execution(void FancyHelloWorld.<init>())
| ICONST_1
diff --git a/weaver/testdata/AroundAllHelloWorld.txt b/weaver/testdata/AroundAllHelloWorld.txt
index 09c8bf700..6dd5e9f2f 100644
--- a/weaver/testdata/AroundAllHelloWorld.txt
+++ b/weaver/testdata/AroundAllHelloWorld.txt
@@ -1,6 +1,6 @@
public class HelloWorld extends java.lang.Object:
public void <init>():
- ALOAD_0 // LHelloWorld; this (line 5)
+ ALOAD_0 // LHelloWorld; ajc$this (line 5)
INVOKESPECIAL java.lang.Object.<init> ()V
constructor-execution(void HelloWorld.<init>())
| ICONST_1
diff --git a/weaver/testdata/AroundAllHelloWorldEnumSwitch.txt b/weaver/testdata/AroundAllHelloWorldEnumSwitch.txt
new file mode 100644
index 000000000..c5f71aa26
--- /dev/null
+++ b/weaver/testdata/AroundAllHelloWorldEnumSwitch.txt
@@ -0,0 +1,390 @@
+public class HelloWorldEnumSwitch extends java.lang.Object:
+ private static int[] $SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum
+ public void <init>():
+ ALOAD_0 // LHelloWorldEnumSwitch; ajc$this (line 18)
+ INVOKESPECIAL java.lang.Object.<init> ()V
+ constructor-execution(void HelloWorldEnumSwitch.<init>())
+ | ICONST_1
+ | ANEWARRAY java.lang.Object
+ | ASTORE_1
+ | ALOAD_1
+ | ICONST_0
+ | ALOAD_0
+ | AASTORE
+ | NEW HelloWorldEnumSwitch$AjcClosure1
+ | DUP
+ | ALOAD_1
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure1.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | POP
+ | RETURN
+ constructor-execution(void HelloWorldEnumSwitch.<init>())
+ end public void <init>()
+
+ public static void main(String[]):
+ ALOAD_0
+ ASTORE 12
+ method-execution(void HelloWorldEnumSwitch.main(java.lang.String[]))
+ | ICONST_1 (line 21)
+ | ANEWARRAY java.lang.Object
+ | ASTORE 13
+ | ALOAD 13
+ | ICONST_0
+ | ALOAD 12
+ | AASTORE
+ | NEW HelloWorldEnumSwitch$AjcClosure15
+ | DUP
+ | ALOAD 13
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure15.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | POP
+ | RETURN
+ method-execution(void HelloWorldEnumSwitch.main(java.lang.String[]))
+ end public static void main(String[])
+
+ static int[] $SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum():
+ GETSTATIC HelloWorldEnumSwitch.$SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum [I (line 18)
+ DUP
+ IFNULL L0
+ ARETURN
+ L0: POP
+ INVOKESTATIC HelloWorldEnumSwitch$TestEnum.values ()[LHelloWorldEnumSwitch$TestEnum;
+ ARRAYLENGTH
+ NEWARRAY 10
+ ASTORE_0
+ catch java.lang.NoSuchFieldError -> E0
+ | ALOAD_0
+ | GETSTATIC HelloWorldEnumSwitch$TestEnum.A LHelloWorldEnumSwitch$TestEnum;
+ | INVOKEVIRTUAL HelloWorldEnumSwitch$TestEnum.ordinal ()I
+ | ICONST_1
+ | IASTORE
+ catch java.lang.NoSuchFieldError -> E0
+ GOTO L1
+ E0: POP
+ catch java.lang.NoSuchFieldError -> E1
+ | L1: ALOAD_0
+ | GETSTATIC HelloWorldEnumSwitch$TestEnum.B LHelloWorldEnumSwitch$TestEnum;
+ | INVOKEVIRTUAL HelloWorldEnumSwitch$TestEnum.ordinal ()I
+ | ICONST_2
+ | IASTORE
+ catch java.lang.NoSuchFieldError -> E1
+ GOTO L2
+ E1: POP
+ L2: ALOAD_0
+ DUP
+ PUTSTATIC HelloWorldEnumSwitch.$SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum [I
+ ARETURN
+ end static int[] $SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum()
+
+ static final void init$_aroundBody0(HelloWorldEnumSwitch):
+ RETURN (line 18)
+ end static final void init$_aroundBody0(HelloWorldEnumSwitch)
+
+ static final HelloWorldEnumSwitch$TestEnum A_aroundBody2():
+ GETSTATIC HelloWorldEnumSwitch$TestEnum.A LHelloWorldEnumSwitch$TestEnum; (line 21)
+ ARETURN
+ end static final HelloWorldEnumSwitch$TestEnum A_aroundBody2()
+
+ static final int ordinal_aroundBody4(HelloWorldEnumSwitch$TestEnum):
+ ALOAD_0
+ INVOKEVIRTUAL HelloWorldEnumSwitch$TestEnum.ordinal ()I (line 21)
+ IRETURN
+ end static final int ordinal_aroundBody4(HelloWorldEnumSwitch$TestEnum)
+
+ static final java.io.PrintStream out_aroundBody6():
+ GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 23)
+ ARETURN
+ end static final java.io.PrintStream out_aroundBody6()
+
+ static final void println_aroundBody8(java.io.PrintStream, String):
+ ALOAD_0
+ ALOAD_1
+ INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V (line 23)
+ RETURN
+ end static final void println_aroundBody8(java.io.PrintStream, String)
+
+ static final java.io.PrintStream out_aroundBody10():
+ GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 26)
+ ARETURN
+ end static final java.io.PrintStream out_aroundBody10()
+
+ static final void println_aroundBody12(java.io.PrintStream, String):
+ ALOAD_0
+ ALOAD_1
+ INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V (line 26)
+ RETURN
+ end static final void println_aroundBody12(java.io.PrintStream, String)
+
+ static final void main_aroundBody14(String[]):
+ INVOKESTATIC HelloWorldEnumSwitch.$SWITCH_TABLE$HelloWorldEnumSwitch$TestEnum ()[I (line 21)
+ field-get(HelloWorldEnumSwitch$TestEnum HelloWorldEnumSwitch$TestEnum.A)
+ | ICONST_0
+ | ANEWARRAY java.lang.Object
+ | ASTORE_1
+ | NEW HelloWorldEnumSwitch$AjcClosure3
+ | DUP
+ | ALOAD_1
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure3.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | CHECKCAST HelloWorldEnumSwitch$TestEnum
+ field-get(HelloWorldEnumSwitch$TestEnum HelloWorldEnumSwitch$TestEnum.A)
+ ASTORE_3
+ method-call(int HelloWorldEnumSwitch$TestEnum.ordinal())
+ | ICONST_1
+ | ANEWARRAY java.lang.Object
+ | ASTORE 5
+ | ALOAD 5
+ | ICONST_0
+ | ALOAD_3
+ | AASTORE
+ | NEW HelloWorldEnumSwitch$AjcClosure5
+ | DUP
+ | ALOAD 5
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure5.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | INVOKESTATIC org.aspectj.runtime.internal.Conversions.intValue (Ljava/lang/Object;)I
+ method-call(int HelloWorldEnumSwitch$TestEnum.ordinal())
+ IALOAD
+ TABLESWITCH
+ 1: L0
+ 2: L1
+ default: L2
+ field-get(java.io.PrintStream java.lang.System.out)
+ | L0: ICONST_0
+ | ANEWARRAY java.lang.Object
+ | ASTORE 7
+ | NEW HelloWorldEnumSwitch$AjcClosure7
+ | DUP
+ | ALOAD 7
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure7.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | CHECKCAST java.io.PrintStream
+ field-get(java.io.PrintStream java.lang.System.out)
+ LDC "A" (line 23)
+ ASTORE 9
+ ASTORE 11
+ method-call(void java.io.PrintStream.println(java.lang.String))
+ | ICONST_2
+ | ANEWARRAY java.lang.Object
+ | ASTORE 13
+ | ALOAD 13
+ | ICONST_0
+ | ALOAD 11
+ | AASTORE
+ | ALOAD 13
+ | ICONST_1
+ | ALOAD 9
+ | AASTORE
+ | NEW HelloWorldEnumSwitch$AjcClosure9
+ | DUP
+ | ALOAD 13
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure9.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | POP
+ method-call(void java.io.PrintStream.println(java.lang.String))
+ GOTO L2 (line 24)
+ field-get(java.io.PrintStream java.lang.System.out)
+ | L1: ICONST_0
+ | ANEWARRAY java.lang.Object
+ | ASTORE 15
+ | NEW HelloWorldEnumSwitch$AjcClosure11
+ | DUP
+ | ALOAD 15
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure11.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | CHECKCAST java.io.PrintStream
+ field-get(java.io.PrintStream java.lang.System.out)
+ LDC "B" (line 26)
+ ASTORE 17
+ ASTORE 19
+ method-call(void java.io.PrintStream.println(java.lang.String))
+ | ICONST_2
+ | ANEWARRAY java.lang.Object
+ | ASTORE 21
+ | ALOAD 21
+ | ICONST_0
+ | ALOAD 19
+ | AASTORE
+ | ALOAD 21
+ | ICONST_1
+ | ALOAD 17
+ | AASTORE
+ | NEW HelloWorldEnumSwitch$AjcClosure13
+ | DUP
+ | ALOAD 21
+ | INVOKESPECIAL HelloWorldEnumSwitch$AjcClosure13.<init> ([Ljava/lang/Object;)V
+ | INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
+ | POP
+ method-call(void java.io.PrintStream.println(java.lang.String))
+ L2: RETURN (line 29)
+ end static final void main_aroundBody14(String[])
+end public class HelloWorldEnumSwitch
+
+public class HelloWorldEnumSwitch$AjcClosure1 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
+ ICONST_0
+ AALOAD
+ CHECKCAST HelloWorldEnumSwitch
+ INVOKESTATIC HelloWorldEnumSwitch.init$_aroundBody0 (LHelloWorldEnumSwitch;)V
+ ACONST_NULL
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure1
+
+public class HelloWorldEnumSwitch$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
+ INVOKESTATIC HelloWorldEnumSwitch.A_aroundBody2 ()LHelloWorldEnumSwitch$TestEnum;
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure3
+
+public class HelloWorldEnumSwitch$AjcClosure5 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
+ ICONST_0
+ AALOAD
+ CHECKCAST HelloWorldEnumSwitch$TestEnum
+ INVOKESTATIC HelloWorldEnumSwitch.ordinal_aroundBody4 (LHelloWorldEnumSwitch$TestEnum;)I
+ INVOKESTATIC org.aspectj.runtime.internal.Conversions.intObject (I)Ljava/lang/Object;
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure5
+
+public class HelloWorldEnumSwitch$AjcClosure7 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
+ INVOKESTATIC HelloWorldEnumSwitch.out_aroundBody6 ()Ljava/io/PrintStream;
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure7
+
+public class HelloWorldEnumSwitch$AjcClosure9 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
+ ICONST_0
+ AALOAD
+ CHECKCAST java.io.PrintStream
+ ALOAD_2
+ ICONST_1
+ AALOAD
+ CHECKCAST java.lang.String
+ INVOKESTATIC HelloWorldEnumSwitch.println_aroundBody8 (Ljava/io/PrintStream;Ljava/lang/String;)V
+ ACONST_NULL
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure9
+
+public class HelloWorldEnumSwitch$AjcClosure11 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
+ INVOKESTATIC HelloWorldEnumSwitch.out_aroundBody10 ()Ljava/io/PrintStream;
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure11
+
+public class HelloWorldEnumSwitch$AjcClosure13 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
+ ICONST_0
+ AALOAD
+ CHECKCAST java.io.PrintStream
+ ALOAD_2
+ ICONST_1
+ AALOAD
+ CHECKCAST java.lang.String
+ INVOKESTATIC HelloWorldEnumSwitch.println_aroundBody12 (Ljava/io/PrintStream;Ljava/lang/String;)V
+ ACONST_NULL
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure13
+
+public class HelloWorldEnumSwitch$AjcClosure15 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
+ ICONST_0
+ AALOAD
+ CHECKCAST [Ljava.lang.String;
+ INVOKESTATIC HelloWorldEnumSwitch.main_aroundBody14 ([Ljava/lang/String;)V
+ ACONST_NULL
+ ARETURN
+ end public Object run(Object[])
+end public class HelloWorldEnumSwitch$AjcClosure15
diff --git a/weaver/testdata/bin/HelloWorldEnumSwitch$TestEnum.class b/weaver/testdata/bin/HelloWorldEnumSwitch$TestEnum.class
new file mode 100644
index 000000000..6f912ffbd
--- /dev/null
+++ b/weaver/testdata/bin/HelloWorldEnumSwitch$TestEnum.class
Binary files differ
diff --git a/weaver/testdata/bin/HelloWorldEnumSwitch.class b/weaver/testdata/bin/HelloWorldEnumSwitch.class
new file mode 100644
index 000000000..7982aad33
--- /dev/null
+++ b/weaver/testdata/bin/HelloWorldEnumSwitch.class
Binary files differ
diff --git a/weaver/testinputdata/org/aspectj/weaver/test/HelloWorldEnumSwitch.java b/weaver/testinputdata/org/aspectj/weaver/test/HelloWorldEnumSwitch.java
new file mode 100644
index 000000000..f0d3cb03a
--- /dev/null
+++ b/weaver/testinputdata/org/aspectj/weaver/test/HelloWorldEnumSwitch.java
@@ -0,0 +1,21 @@
+public class HelloWorldEnumSwitch {
+
+ public static void main(String[] args) {
+ switch(TestEnum.A) {
+ case A:
+ System.out.println("A");
+ break;
+ case B:
+ System.out.println("B");
+ }
+
+ }
+
+ public static enum TestEnum {
+ A,
+ B;
+
+ private TestEnum() {
+ }
+ }
+}