< prev index next >
src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/CheckMethodAdapter.java
Print this page
rev 47452 : imported patch jdk-new-asmv6.patch
@@ -424,11 +424,11 @@
* @throws IllegalStateException
* If a subclass calls this constructor.
*/
public CheckMethodAdapter(final MethodVisitor mv,
final Map<Label, Integer> labels) {
- this(Opcodes.ASM5, mv, labels);
+ this(Opcodes.ASM6, mv, labels);
if (getClass() != CheckMethodAdapter.class) {
throw new IllegalStateException();
}
}
@@ -437,11 +437,12 @@
* will not perform any data flow check (see
* {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
*
* @param api
* the ASM API version implemented by this CheckMethodAdapter.
- * Must be one of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}.
+ * Must be one of {@link Opcodes#ASM4}, {@link Opcodes#ASM5}
+ * or {@link Opcodes#ASM6}.
* @param mv
* the method visitor to which this adapter must delegate calls.
* @param labels
* a map of already visited labels (in other methods).
*/
@@ -754,10 +755,16 @@
}
if (opcode == Opcodes.INVOKEINTERFACE && !itf) {
throw new IllegalArgumentException(
"INVOKEINTERFACE can't be used with classes");
}
+ if (opcode == Opcodes.INVOKESPECIAL && itf
+ && (version & 0xFFFF) < Opcodes.V1_8) {
+ throw new IllegalArgumentException(
+ "INVOKESPECIAL can't be used with interfaces prior to Java 8");
+ }
+
// Calling super.visitMethodInsn requires to call the correct version
// depending on this.api (otherwise infinite loops can occur). To
// simplify and to make it easier to automatically remove the backward
// compatibility code, we inline the code of the overridden method here.
if (mv != null) {
< prev index next >