@@ -66,6 +66,8 @@ public void generateMethod(final GeneratorAdapterFactory factory, final MethodCa
6666 methodGenerator .visitLookupSwitchInsn (lookupSwitchEndLabel , lookupSwitchKeys , labels );
6767 for (int i = 0 ; i < labels .length ; i ++) {
6868 methodGenerator .mark (labels [i ]);
69+ // LocalVariableSorter inserts trailing int local for i == 0
70+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 1 , new Object []{"java/lang/String" });
6971 // generate case
7072 final List <String > matchingStrings = hashToField .get (lookupSwitchKeys [i ]);
7173 if (matchingStrings .size () == 1 ) {
@@ -93,11 +95,13 @@ public void generateMethod(final GeneratorAdapterFactory factory, final MethodCa
9395 methodGenerator .goTo (lookupSwitchEndLabel );
9496 if (nestedLabels [j ] != lookupSwitchEndLabel ) {
9597 methodGenerator .mark (nestedLabels [j ]); // mark start of next label (except last one)
98+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 1 , new Object []{"java/lang/String" });
9699 }
97100 }
98101 }
99102 }
100103 methodGenerator .mark (lookupSwitchEndLabel );
104+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 1 , new Object []{"java/lang/String" });
101105 methodGenerator .loadLocal (tableSwitchIndexLocal );
102106 final Label [] tableSwitchLabels = new Label [tableSwitchIndexToRenamedField .length ];
103107 for (int i = 0 ; i < tableSwitchLabels .length ; i ++) {
@@ -108,12 +112,16 @@ public void generateMethod(final GeneratorAdapterFactory factory, final MethodCa
108112 methodGenerator .visitTableSwitchInsn (0 , tableSwitchIndexToRenamedField .length - 1 , tableSwitchDefaultLabel , tableSwitchLabels );
109113 for (int i = 0 ; i < tableSwitchIndexToRenamedField .length ; i ++) {
110114 methodGenerator .mark (tableSwitchLabels [i ]);
115+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 1 , new Object []{"java/lang/String" });
111116 methodGenerator .push (tableSwitchIndexToRenamedField [i ]);
112117 methodGenerator .goTo (tableSwitchEndLabel );
113118 }
114119 methodGenerator .mark (tableSwitchDefaultLabel );
120+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 1 , new Object []{"java/lang/String" });
115121 methodGenerator .loadArg (0 ); // default to the passed in value
116122 methodGenerator .mark (tableSwitchEndLabel );
123+ // LocalVariableSorter inserts trailing int local
124+ methodGenerator .visitFrame (Opcodes .F_NEW , 1 , new Object []{"java/lang/String" }, 2 , new Object []{"java/lang/String" , "java/lang/String" });
117125 methodGenerator .invokeStatic (Type .getType (original .owner ().descriptorString ()), new Method (original .name (), original .descriptor ().descriptorString ()));
118126 methodGenerator .returnValue ();
119127 methodGenerator .endMethod ();
0 commit comments