From: Saif Abdul Cassim <saif.15@cse.mrt.ac.lk>
Date: Thu, 22 Apr 2021 12:33:27 -0700
Subject: *: Use a specific ASM API version to deal with newer libasm-java
Forwarded: not-needed
Last-Update: 2021-04-22

Current version of Kotlin code is meant to work with Java asm library version
7.0. The version available in Debian is 9.0. asm library provides API
compatibility only when the API version is specified during object creation.

Opcodes.ASM9 == OpCodes.ASM7
---
 .../org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt    |  8 ++++----
 buildSrc/src/main/kotlin/stripMetadata.kt                      |  4 ++--
 .../src/org/jetbrains/kotlin/codegen/AbstractClassBuilder.java |  4 ++--
 .../src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java    |  2 +-
 compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java |  2 +-
 .../src/org/jetbrains/kotlin/codegen/AssertCodegenUtil.kt      |  2 +-
 .../jetbrains/kotlin/codegen/TransformationMethodVisitor.kt    |  4 ++--
 .../codegen/coroutines/CoroutineTransformerMethodVisitor.kt    |  6 +++---
 .../kotlin/codegen/coroutines/coroutineCodegenUtil.kt          |  6 +++---
 .../kotlin/codegen/coroutines/refinedIntTypesAnalysis.kt       |  2 +-
 .../kotlin/codegen/inline/AnonymousObjectTransformer.kt        |  2 +-
 .../jetbrains/kotlin/codegen/inline/DeferredMethodVisitor.kt   |  2 +-
 .../src/org/jetbrains/kotlin/codegen/inline/InlineAdapter.java |  2 +-
 .../src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt   |  2 +-
 .../kotlin/codegen/inline/InlineMethodInstructionAdapter.java  |  2 +-
 .../kotlin/codegen/inline/InternalFinallyBlockInliner.java     |  2 +-
 .../src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt      |  4 ++--
 .../org/jetbrains/kotlin/codegen/inline/MethodBodyVisitor.kt   |  4 ++--
 .../src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt   |  4 ++--
 .../org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt   |  2 +-
 .../org/jetbrains/kotlin/codegen/inline/ReifiedTypeInliner.kt  |  4 ++--
 .../jetbrains/kotlin/codegen/inline/SamWrapperTransformer.kt   |  2 +-
 .../jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt |  2 +-
 .../org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt  | 10 +++++-----
 .../optimization/boxing/PopBackwardPropagationTransformer.kt   |  2 +-
 .../optimization/boxing/RedundantBoxingMethodTransformer.kt    |  2 +-
 .../optimization/common/OptimizationBasicInterpreter.java      |  2 +-
 .../org/jetbrains/kotlin/codegen/optimization/common/Util.kt   |  4 ++--
 .../kotlin/load/java/structure/impl/classFiles/commonMixins.kt |  2 +-
 .../org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java |  3 ++-
 .../org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt |  4 ++--
 .../kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt    |  2 +-
 .../preloading/instrumentation/InterceptionInstrumenter.java   |  6 +++---
 .../kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt  |  4 ++--
 .../gradle/internal/kapt/incremental/ClassAbiExtractor.kt      |  4 ++--
 .../internal/kapt/incremental/ClassTypeExtractorVisitor.kt     |  4 ++--
 .../parcel/ParcelableClinitClassBuilderInterceptorExtension.kt |  2 +-
 .../AndroidOnDestroyClassBuilderInterceptorExtension.kt        |  2 +-
 .../jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt |  2 +-
 .../kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt        |  2 +-
 .../kotlin/jvm/abi/asm/ReplaceWithEmptyMethodVisitor.kt        |  2 +-
 .../org/jetbrains/kotlin/kapt3/stubs/SignatureParserVisitor.kt |  4 ++--
 .../scripting/shared/definitions/asmBasedAnnotationsLoading.kt |  4 ++--
 43 files changed, 71 insertions(+), 70 deletions(-)

--- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt
+++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt
@@ -350,7 +350,7 @@
         private fun getConstantsMap(bytes: ByteArray): Map<String, Any> {
             val result = HashMap<String, Any>()
 
-            ClassReader(bytes).accept(object : ClassVisitor(Opcodes.API_VERSION) {
+            ClassReader(bytes).accept(object : ClassVisitor(Opcodes.ASM9) {
                 override fun visitField(access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor? {
                     val staticFinal = Opcodes.ACC_STATIC or Opcodes.ACC_FINAL or Opcodes.ACC_PRIVATE
                     if (value != null && access and staticFinal == Opcodes.ACC_STATIC or Opcodes.ACC_FINAL) {
@@ -470,7 +470,7 @@
 
             val result = HashMap<String, Long>()
 
-            ClassReader(bytes).accept(object : ClassVisitor(Opcodes.API_VERSION) {
+            ClassReader(bytes).accept(object : ClassVisitor(Opcodes.ASM9) {
                 override fun visitMethod(
                     access: Int,
                     name: String,
@@ -478,9 +478,9 @@
                     signature: String?,
                     exceptions: Array<out String>?
                 ): MethodVisitor? {
-                    val dummyClassWriter = ClassWriter(Opcodes.API_VERSION)
+                    val dummyClassWriter = ClassWriter(Opcodes.ASM9)
 
-                    return object : MethodVisitor(Opcodes.API_VERSION, dummyClassWriter.visitMethod(0, name, desc, null, exceptions)) {
+                    return object : MethodVisitor(Opcodes.ASM9, dummyClassWriter.visitMethod(0, name, desc, null, exceptions)) {
                         override fun visitEnd() {
                             val jvmName = name + desc
                             if (jvmName !in inlineFunctions) return
--- a/buildSrc/src/main/kotlin/stripMetadata.kt
+++ b/buildSrc/src/main/kotlin/stripMetadata.kt
@@ -1,7 +1,7 @@
 @file:Suppress("unused") // usages in build scripts are not tracked properly
 
 import org.gradle.api.logging.Logger
-import org.jetbrains.org.objectweb.asm.*
+import org.objectweb.asm.*
 import java.io.BufferedOutputStream
 import java.io.File
 import java.io.FileOutputStream
@@ -23,7 +23,7 @@
 
         var changed = false
         val classWriter = ClassWriter(0)
-        val classVisitor = object : ClassVisitor(Opcodes.API_VERSION, classWriter) {
+        val classVisitor = object : ClassVisitor(Opcodes.ASM9, classWriter) {
             override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
                 if (Type.getType(desc).internalName == "kotlin/Metadata") {
                     changed = true
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AbstractClassBuilder.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AbstractClassBuilder.java
@@ -31,8 +31,8 @@
 import static org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.GENERATE_SMAP;
 
 public abstract class AbstractClassBuilder implements ClassBuilder {
-    protected static final MethodVisitor EMPTY_METHOD_VISITOR = new MethodVisitor(Opcodes.API_VERSION) {};
-    protected static final FieldVisitor EMPTY_FIELD_VISITOR = new FieldVisitor(Opcodes.API_VERSION) {};
+    protected static final MethodVisitor EMPTY_METHOD_VISITOR = new MethodVisitor(Opcodes.ASM9) {};
+    protected static final FieldVisitor EMPTY_FIELD_VISITOR = new FieldVisitor(Opcodes.ASM9) {};
 
     private String thisName;
 
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java
@@ -72,7 +72,7 @@
             new JvmFlagAnnotation(JvmAnnotationUtilKt.SYNCHRONIZED_ANNOTATION_FQ_NAME.asString(), Opcodes.ACC_SYNCHRONIZED)
     );
 
-    private static final AnnotationVisitor NO_ANNOTATION_VISITOR = new AnnotationVisitor(Opcodes.API_VERSION) {
+    private static final AnnotationVisitor NO_ANNOTATION_VISITOR = new AnnotationVisitor(Opcodes.ASM9) {
         @Override
         public AnnotationVisitor visitAnnotation(String name, @NotNull String desc) {
             return safe(super.visitAnnotation(name, desc));
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java
@@ -74,7 +74,7 @@
 
 public class AsmUtil {
 
-    public static final boolean IS_BUILT_WITH_ASM6 = Opcodes.API_VERSION <= Opcodes.ASM6;
+    public static final boolean IS_BUILT_WITH_ASM6 = Opcodes.ASM9 <= Opcodes.ASM6;
 
     private static final Set<Type> STRING_BUILDER_OBJECT_APPEND_ARG_TYPES = Sets.newHashSet(
             getType(String.class),
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AssertCodegenUtil.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AssertCodegenUtil.kt
@@ -58,7 +58,7 @@
 
     val node =
         org.jetbrains.org.objectweb.asm.tree.MethodNode(
-            Opcodes.API_VERSION,
+            Opcodes.ASM9,
             Opcodes.ACC_STATIC,
             "fake",
             typeMapper.mapAsmMethod(functionDescriptor).descriptor, null, null
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.kt
@@ -34,7 +34,7 @@
     desc: String,
     signature: String?,
     exceptions: Array<out String>?,
-    api: Int = Opcodes.API_VERSION
+    api: Int = Opcodes.ASM9
 ) : MethodVisitor(api) {
 
     private val methodNode = MethodNode(access, name, desc, signature, exceptions).apply {
@@ -70,7 +70,7 @@
                 performTransformations(methodNode)
             }
 
-            methodNode.accept(EndIgnoringMethodVisitorDecorator(Opcodes.API_VERSION, delegate))
+            methodNode.accept(EndIgnoringMethodVisitorDecorator(Opcodes.ASM9, delegate))
 
 
             // In case of empty instructions list MethodNode.accept doesn't call visitLocalVariables of delegate
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt
@@ -379,8 +379,8 @@
         methodNode.instructions.resetLabels()
         methodNode.accept(
             MaxStackFrameSizeAndLocalsCalculator(
-                Opcodes.API_VERSION, methodNode.access, methodNode.desc,
-                object : MethodVisitor(Opcodes.API_VERSION) {
+                Opcodes.ASM9, methodNode.access, methodNode.desc,
+                object : MethodVisitor(Opcodes.ASM9) {
                     override fun visitMaxs(maxStack: Int, maxLocals: Int) {
                         methodNode.maxStack = maxStack
                     }
@@ -956,7 +956,7 @@
     }
 }
 
-internal class IgnoringCopyOperationSourceInterpreter : SourceInterpreter(Opcodes.API_VERSION) {
+internal class IgnoringCopyOperationSourceInterpreter : SourceInterpreter(Opcodes.ASM9) {
     override fun copyOperation(insn: AbstractInsnNode?, value: SourceValue?) = value
 }
 
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt
@@ -342,7 +342,7 @@
 
     val node =
         MethodNode(
-            Opcodes.API_VERSION,
+            Opcodes.ASM9,
             Opcodes.ACC_STATIC,
             "fake",
             typeMapper.mapAsmMethod(functionDescriptor).descriptor, null, null
@@ -368,7 +368,7 @@
 
     val node =
         MethodNode(
-            Opcodes.API_VERSION,
+            Opcodes.ASM9,
             Opcodes.ACC_STATIC,
             "fake",
             Type.getMethodDescriptor(languageVersionSettings.coroutineContextAsmType()),
@@ -397,7 +397,7 @@
 
     val node =
         MethodNode(
-            Opcodes.API_VERSION,
+            Opcodes.ASM9,
             Opcodes.ACC_STATIC,
             "fake",
             typeMapper.mapAsmMethod(functionDescriptor).descriptor, null, null
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/refinedIntTypesAnalysis.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/refinedIntTypesAnalysis.kt
@@ -169,7 +169,7 @@
     }
 }
 
-private class MySourceInterpreter : SourceInterpreter(Opcodes.API_VERSION) {
+private class MySourceInterpreter : SourceInterpreter(Opcodes.ASM9) {
     override fun copyOperation(insn: AbstractInsnNode, value: SourceValue) =
             when {
                 insn.isStoreOperation() || insn.isLoadOperation() -> SourceValue(value.size, insn)
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt
@@ -51,7 +51,7 @@
         val metadataReader = ReadKotlinClassHeaderAnnotationVisitor()
         lateinit var superClassName: String
 
-        createClassReader().accept(object : ClassVisitor(Opcodes.API_VERSION, classBuilder.visitor) {
+        createClassReader().accept(object : ClassVisitor(Opcodes.ASM9, classBuilder.visitor) {
             override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String, interfaces: Array<String>) {
                 classBuilder.defineClass(null, version, access, name, signature, superName, interfaces)
                 if (languageVersionSettings.isCoroutineSuperClass(superName)) {
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/DeferredMethodVisitor.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/DeferredMethodVisitor.kt
@@ -23,7 +23,7 @@
 class DeferredMethodVisitor(
     val intermediate: MethodNode,
     private val resultNode: () -> MethodVisitor
-) : MethodVisitor(Opcodes.API_VERSION, intermediate) {
+) : MethodVisitor(Opcodes.ASM9, intermediate) {
 
     override fun visitEnd() {
         super.visitEnd()
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineAdapter.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineAdapter.java
@@ -38,7 +38,7 @@
     private int nextLocalIndexBeforeInline = -1;
 
     public InlineAdapter(@NotNull MethodVisitor mv, int localsSize, @NotNull SourceMapper sourceMapper) {
-        super(Opcodes.API_VERSION, mv);
+        super(Opcodes.ASM9, mv);
         this.nextLocalIndex = localsSize;
         this.sourceMapper = sourceMapper;
     }
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt
@@ -559,7 +559,7 @@
         private fun cloneMethodNode(methodNode: MethodNode): MethodNode {
             methodNode.instructions.resetLabels()
             return MethodNode(
-                Opcodes.API_VERSION, methodNode.access, methodNode.name, methodNode.desc, methodNode.signature,
+                Opcodes.ASM9, methodNode.access, methodNode.name, methodNode.desc, methodNode.signature,
                 ArrayUtil.toStringArray(methodNode.exceptions)
             ).also(methodNode::accept)
         }
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java
@@ -12,7 +12,7 @@
 public class InlineMethodInstructionAdapter extends InstructionAdapter {
 
     InlineMethodInstructionAdapter(MethodVisitor methodVisitor) {
-        super(Opcodes.API_VERSION, methodVisitor);
+        super(Opcodes.ASM9, methodVisitor);
     }
 
     public void visitAnnotableParameterCount(int parameterCount, boolean visible) {
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InternalFinallyBlockInliner.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InternalFinallyBlockInliner.java
@@ -107,7 +107,7 @@
 
     private int initAndGetVarIndexForNonLocalReturnValue() {
         MaxLocalsCalculator tempCalcNode = new MaxLocalsCalculator(
-                Opcodes.API_VERSION,
+                Opcodes.ASM9,
                 inlineFun.access, inlineFun.desc, null
         );
         inlineFun.accept(tempCalcNode);
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt
@@ -110,7 +110,7 @@
         val classReader = buildClassReaderByInternalName(sourceCompiler.state, lambdaClassType.internalName)
         var isPropertyReference = false
         var isFunctionReference = false
-        classReader.accept(object : ClassVisitor(Opcodes.API_VERSION) {
+        classReader.accept(object : ClassVisitor(Opcodes.ASM9) {
             override fun visit(
                 version: Int,
                 access: Int,
@@ -192,7 +192,7 @@
         val jvmMethodSignature = typeMapper.mapSignatureSkipGeneric(invokeMethodDescriptor)
         val asmMethod = jvmMethodSignature.asmMethod
         val methodNode = MethodNode(
-            Opcodes.API_VERSION, AsmUtil.getMethodAsmFlags(invokeMethodDescriptor, OwnerKind.IMPLEMENTATION, sourceCompiler.state),
+            Opcodes.ASM9, AsmUtil.getMethodAsmFlags(invokeMethodDescriptor, OwnerKind.IMPLEMENTATION, sourceCompiler.state),
             asmMethod.name, asmMethod.descriptor, null, null
         )
 
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodBodyVisitor.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodBodyVisitor.kt
@@ -19,13 +19,13 @@
 import org.jetbrains.org.objectweb.asm.*
 import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
 
-open class SkipMaxAndEndVisitor(mv: MethodVisitor) : InstructionAdapter(Opcodes.API_VERSION, mv) {
+open class SkipMaxAndEndVisitor(mv: MethodVisitor) : InstructionAdapter(Opcodes.ASM9, mv) {
     override fun visitMaxs(maxStack: Int, maxLocals: Int) {}
 
     override fun visitEnd() {}
 }
 
-open class MethodBodyVisitor(mv: MethodVisitor) : MethodVisitor(Opcodes.API_VERSION, mv) {
+open class MethodBodyVisitor(mv: MethodVisitor) : MethodVisitor(Opcodes.ASM9, mv) {
 
     @Suppress("NOTHING_TO_OVERRIDE")
     override fun visitAnnotableParameterCount(parameterCount: Int, visible: Boolean) {
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt
@@ -102,7 +102,7 @@
         transformedNode.instructions.resetLabels()
 
         val resultNode = MethodNode(
-            Opcodes.API_VERSION, transformedNode.access, transformedNode.name, transformedNode.desc,
+            Opcodes.ASM9, transformedNode.access, transformedNode.name, transformedNode.desc,
             transformedNode.signature, transformedNode.exceptions?.toTypedArray()
         )
 
@@ -415,7 +415,7 @@
         val capturedParamsSize = parameters.capturedParametersSizeOnStack
         val realParametersSize = parameters.realParametersSizeOnStack
         val transformedNode = MethodNode(
-            Opcodes.API_VERSION, node.access, node.name,
+            Opcodes.ASM9, node.access, node.name,
             Type.getMethodDescriptor(Type.getReturnType(node.desc), *(Type.getArgumentTypes(node.desc) + parameters.capturedTypes)),
             node.signature, node.exceptions?.toTypedArray()
         )
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt
@@ -64,7 +64,7 @@
         /*MAPPING File could contains mappings for several enum classes, we should filter one*/
         val methodNodes = arrayListOf<MethodNode>()
         val fieldNode = transformationInfo.fieldNode
-        classReader.accept(object : ClassVisitor(Opcodes.API_VERSION, classBuilder.visitor) {
+        classReader.accept(object : ClassVisitor(Opcodes.ASM9, classBuilder.visitor) {
             override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String, interfaces: Array<String>) {
                 classBuilder.defineClass(null, version, access, name, signature, superName, interfaces)
             }
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ReifiedTypeInliner.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ReifiedTypeInliner.kt
@@ -170,7 +170,7 @@
     ) = rewriteNextTypeInsn(insn, Opcodes.CHECKCAST) { stubCheckcast: AbstractInsnNode ->
         if (stubCheckcast !is TypeInsnNode) return false
 
-        val newMethodNode = MethodNode(Opcodes.API_VERSION)
+        val newMethodNode = MethodNode(Opcodes.ASM9)
         generateAsCast(InstructionAdapter(newMethodNode), kotlinType, asmType, safe, isReleaseCoroutines)
 
         instructions.insert(insn, newMethodNode.instructions)
@@ -190,7 +190,7 @@
     ) = rewriteNextTypeInsn(insn, Opcodes.INSTANCEOF) { stubInstanceOf: AbstractInsnNode ->
         if (stubInstanceOf !is TypeInsnNode) return false
 
-        val newMethodNode = MethodNode(Opcodes.API_VERSION)
+        val newMethodNode = MethodNode(Opcodes.ASM9)
         generateIsCheck(InstructionAdapter(newMethodNode), kotlinType, asmType, isReleaseCoroutines)
 
         instructions.insert(insn, newMethodNode.instructions)
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SamWrapperTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SamWrapperTransformer.kt
@@ -59,7 +59,7 @@
         val classReader = createClassReader()
         val classBuilder = createRemappingClassBuilderViaFactory(inliningContext)
 
-        classReader.accept(object : ClassVisitor(Opcodes.API_VERSION, classBuilder.visitor) {
+        classReader.accept(object : ClassVisitor(Opcodes.ASM9, classBuilder.visitor) {
             override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String, interfaces: Array<String>) {
                 classBuilder.defineClass(null, version, access, name, signature, superName, interfaces)
             }
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt
@@ -278,7 +278,7 @@
         val inliningFunction = element as KtDeclarationWithBody?
 
         val node = MethodNode(
-            Opcodes.API_VERSION,
+            Opcodes.ASM9,
             AsmUtil.getMethodAsmFlags(callableDescriptor, context.contextKind, state) or if (callDefault) Opcodes.ACC_STATIC else 0,
             asmMethod.name,
             asmMethod.descriptor, null, null
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt
@@ -95,7 +95,7 @@
     lines[0] = Integer.MAX_VALUE
     lines[1] = Integer.MIN_VALUE
 
-    cr.accept(object : ClassVisitor(Opcodes.API_VERSION) {
+    cr.accept(object : ClassVisitor(Opcodes.ASM9) {
 
         override fun visitSource(source: String?, debug: String?) {
             super.visitSource(source, debug)
@@ -123,7 +123,7 @@
                 throw AssertionError("Can't find proper '$name' method for inline: ambiguity between '${existing.name + existing.desc}' and '${name + desc}'")
             }
 
-            return object : MethodNode(Opcodes.API_VERSION, access, name, desc, signature, exceptions) {
+            return object : MethodNode(Opcodes.ASM9, access, name, desc, signature, exceptions) {
                 override fun visitLineNumber(line: Int, start: Label) {
                     super.visitLineNumber(line, start)
                     lines[0] = Math.min(lines[0], line)
@@ -248,7 +248,7 @@
             internalName.substringAfterLast('/').substringAfterLast("$", "").isInteger()
 
 fun wrapWithMaxLocalCalc(methodNode: MethodNode) =
-    MaxStackFrameSizeAndLocalsCalculator(Opcodes.API_VERSION, methodNode.access, methodNode.desc, methodNode)
+    MaxStackFrameSizeAndLocalsCalculator(Opcodes.ASM9, methodNode.access, methodNode.desc, methodNode)
 
 private fun String.isInteger(radix: Int = 10) = toIntOrNull(radix) != null
 
@@ -301,7 +301,7 @@
     }
 }
 
-internal fun createEmptyMethodNode() = MethodNode(Opcodes.API_VERSION, 0, "fake", "()V", null, null)
+internal fun createEmptyMethodNode() = MethodNode(Opcodes.ASM9, 0, "fake", "()V", null, null)
 
 internal fun createFakeContinuationMethodNodeForInline(): MethodNode {
     val methodNode = createEmptyMethodNode()
@@ -554,7 +554,7 @@
     val isValueOf = "enumValueOf" == name
     val invokeType = typeMapper.mapType(type)
     val desc = getSpecialEnumFunDescriptor(invokeType, isValueOf)
-    val node = MethodNode(Opcodes.API_VERSION, Opcodes.ACC_STATIC, "fake", desc, null, null)
+    val node = MethodNode(Opcodes.ASM9, Opcodes.ACC_STATIC, "fake", desc, null, null)
     ExpressionCodegen.putReifiedOperationMarkerIfTypeIsReifiedParameterWithoutPropagation(
         type,
         ReifiedTypeInliner.OperationKind.ENUM_REIFIED,
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/PopBackwardPropagationTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/PopBackwardPropagationTransformer.kt
@@ -119,7 +119,7 @@
             throw AssertionError("Incorrect bytecode at ${methodNode.instructions.indexOf(insn)}: ${insn.debugText} $frame")
         }
 
-        private inner class HazardsTrackingInterpreter : SourceInterpreter(Opcodes.API_VERSION) {
+        private inner class HazardsTrackingInterpreter : SourceInterpreter(Opcodes.ASM9) {
             override fun naryOperation(insn: AbstractInsnNode, values: MutableList<out SourceValue>): SourceValue {
                 for (value in values) {
                     value.insns.markAsDontTouch()
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/RedundantBoxingMethodTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/RedundantBoxingMethodTransformer.kt
@@ -251,7 +251,7 @@
         castWithType: Pair<AbstractInsnNode, Type>
     ) {
         val castInsn = castWithType.getFirst()
-        val castInsnsListener = MethodNode(Opcodes.API_VERSION)
+        val castInsnsListener = MethodNode(Opcodes.ASM9)
         InstructionAdapter(castInsnsListener).cast(value.unboxedType, castWithType.getSecond())
 
         for (insn in castInsnsListener.instructions.toArray()) {
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java
@@ -34,7 +34,7 @@
 
 public class OptimizationBasicInterpreter extends Interpreter<BasicValue> implements Opcodes {
     public OptimizationBasicInterpreter() {
-        super(API_VERSION);
+        super(Opcodes.ASM9);
     }
 
     @Override
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt
@@ -78,8 +78,8 @@
     maxStack = -1
     accept(
         MaxStackFrameSizeAndLocalsCalculator(
-            Opcodes.API_VERSION, access, desc,
-            object : MethodVisitor(Opcodes.API_VERSION) {
+            Opcodes.ASM9, access, desc,
+            object : MethodVisitor(Opcodes.ASM9) {
                 override fun visitMaxs(maxStack: Int, maxLocals: Int) {
                     this@prepareForEmitting.maxStack = maxStack
                 }
--- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt
+++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt
@@ -23,7 +23,7 @@
 import org.jetbrains.kotlin.load.java.structure.MapBasedJavaAnnotationOwner
 import org.jetbrains.org.objectweb.asm.Opcodes
 
-internal const val ASM_API_VERSION_FOR_CLASS_READING = Opcodes.API_VERSION
+internal const val ASM_API_VERSION_FOR_CLASS_READING = Opcodes.ASM9
 
 internal interface BinaryJavaModifierListOwner : JavaModifierListOwner, MapBasedJavaAnnotationOwner {
     val access: Int
--- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java
+++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java
@@ -34,9 +34,10 @@
 import java.util.*;
 
 import static org.jetbrains.org.objectweb.asm.ClassReader.*;
-import static org.jetbrains.org.objectweb.asm.Opcodes.API_VERSION;
+
 
 public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
+	static int API_VERSION=Opcodes.ASM9;
     private final ClassId classId;
     private final int classVersion;
     private final KotlinClassHeader classHeader;
--- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt
+++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt
@@ -65,11 +65,11 @@
             val exports = arrayListOf<Exports>()
 
             try {
-                ClassReader(contents).accept(object : ClassVisitor(Opcodes.API_VERSION) {
+                ClassReader(contents).accept(object : ClassVisitor(Opcodes.ASM9) {
                     override fun visitModule(name: String, access: Int, version: String?): ModuleVisitor {
                         moduleName = name
 
-                        return object : ModuleVisitor(Opcodes.API_VERSION) {
+                        return object : ModuleVisitor(Opcodes.ASM9) {
                             override fun visitRequire(module: String, access: Int, version: String?) {
                                 requires.add(Requires(module, (access and ACC_TRANSITIVE) != 0))
                             }
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt
@@ -115,7 +115,7 @@
         val functionCodegen = object : FunctionCodegen(irFunction, fakeClassCodegen) {
             override fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor {
                 node = MethodNode(
-                    Opcodes.API_VERSION,
+                    Opcodes.ASM9,
                     flags,
                     signature.asmMethod.name, signature.asmMethod.descriptor,
                     signature.genericsSignature, null
--- a/compiler/preloader/instrumentation/src/org/jetbrains/kotlin/preloading/instrumentation/InterceptionInstrumenter.java
+++ b/compiler/preloader/instrumentation/src/org/jetbrains/kotlin/preloading/instrumentation/InterceptionInstrumenter.java
@@ -265,7 +265,7 @@
     private byte[] instrument(byte[] classData, List<MethodInstrumenter> instrumenters) {
         ClassReader cr = new ClassReader(classData);
         ClassWriter cw = new ClassWriter(cr, 0);
-        cr.accept(new ClassVisitor(API_VERSION, cw) {
+        cr.accept(new ClassVisitor(Opcodes.ASM9, cw) {
             private final Map<MethodInstrumenter, String> matchedMethods = new HashMap<>();
 
             @Override
@@ -316,7 +316,7 @@
                 int maxStackDepth = getMaxStackDepth(name, desc, normalReturnData, enterData, exceptionData);
                 boolean isConstructor = "<init>".equals(name);
 
-                return new MethodVisitor(API_VERSION, mv) {
+                return new MethodVisitor(Opcodes.ASM9, mv) {
 
                     private InstructionAdapter ia = null;
 
@@ -421,7 +421,7 @@
             }
 
             private TraceMethodVisitor getDumpingVisitorWrapper(MethodVisitor mv, String methodName, String methodDesc) {
-                return new TraceMethodVisitor(mv, new Textifier(API_VERSION) {
+                return new TraceMethodVisitor(mv, new Textifier(Opcodes.ASM9) {
                     @Override
                     public void visitMethodEnd() {
                         System.out.println(cr.getClassName() + ":" + methodName + methodDesc);
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt
@@ -36,7 +36,7 @@
     var result: String? = null
 
     fun checkVersion(bytes: ByteArray) {
-        ClassReader(bytes).accept(object : ClassVisitor(Opcodes.API_VERSION) {
+        ClassReader(bytes).accept(object : ClassVisitor(Opcodes.ASM9) {
             override fun visitField(access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor {
                 if (name == KotlinCompilerVersion::VERSION.name && value is String) {
                     result = value
@@ -130,4 +130,4 @@
 
     log.debug("Could not find exit code by value: $code")
     return if (code == 0) ExitCode.OK else ExitCode.COMPILATION_ERROR
-}
\ No newline at end of file
+}
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt
@@ -9,7 +9,7 @@
 
 const val metadataDescriptor: String = "Lkotlin/Metadata;"
 
-class ClassAbiExtractor(private val writer: ClassWriter) : ClassVisitor(Opcodes.API_VERSION, writer) {
+class ClassAbiExtractor(private val writer: ClassWriter) : ClassVisitor(Opcodes.ASM7, writer) {
 
     override fun visitMethod(
         access: Int,
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt
@@ -9,7 +9,7 @@
 
 private val toIgnore = setOf("java/lang/Object", "kotlin/Metadata", "org/jetbrains/annotations/NotNull")
 
-class ClassTypeExtractorVisitor(visitor: ClassVisitor) : ClassVisitor(Opcodes.API_VERSION, visitor) {
+class ClassTypeExtractorVisitor(visitor: ClassVisitor) : ClassVisitor(Opcodes.ASM7, visitor) {
 
     private val abiTypes = mutableSetOf<String>()
     private val privateTypes = mutableSetOf<String>()
--- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt
+++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt
@@ -134,7 +134,7 @@
         }
     }
 
-    private class ClinitAwareMethodVisitor(val parcelableName: String, mv: MethodVisitor) : MethodVisitor(Opcodes.API_VERSION, mv) {
+    private class ClinitAwareMethodVisitor(val parcelableName: String, mv: MethodVisitor) : MethodVisitor(Opcodes.ASM9, mv) {
         override fun visitInsn(opcode: Int) {
             if (opcode == Opcodes.RETURN) {
                 val iv = InstructionAdapter(this)
--- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt
+++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt
@@ -101,7 +101,7 @@
                 signature: String?,
                 exceptions: Array<out String>?
         ): MethodVisitor {
-            return object : MethodVisitor(Opcodes.API_VERSION, super.newMethod(origin, access, name, desc, signature, exceptions)) {
+            return object : MethodVisitor(Opcodes.ASM9, super.newMethod(origin, access, name, desc, signature, exceptions)) {
                 override fun visitInsn(opcode: Int) {
                     if (opcode == Opcodes.RETURN) {
                         generateClearCacheMethodCall()
--- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt
+++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt
@@ -156,7 +156,7 @@
                 output.delete()
             } else {
                 output.transform { writer ->
-                    FilterInnerClassesVisitor(classesToRemove, Opcodes.API_VERSION, writer)
+                    FilterInnerClassesVisitor(classesToRemove, Opcodes.ASM9, writer)
                 }
             }
         }
--- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt
+++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt
@@ -3,7 +3,7 @@
 import org.jetbrains.org.objectweb.asm.ClassVisitor
 import org.jetbrains.org.objectweb.asm.Opcodes
 
-internal class InnerClassesCollectingVisitor : ClassVisitor(Opcodes.API_VERSION) {
+internal class InnerClassesCollectingVisitor : ClassVisitor(Opcodes.ASM9) {
     lateinit var ownInternalName: String
         private set
 
--- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/ReplaceWithEmptyMethodVisitor.kt
+++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/ReplaceWithEmptyMethodVisitor.kt
@@ -16,7 +16,7 @@
     desc: String,
     signature: String?,
     exceptions: Array<out String>?
-) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions, api = Opcodes.API_VERSION) {
+) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions, api = Opcodes.ASM9) {
     override fun performTransformations(methodNode: MethodNode) {
         methodNode.instructions.clear()
         methodNode.localVariables.clear()
--- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/SignatureParserVisitor.kt
+++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/SignatureParserVisitor.kt
@@ -314,7 +314,7 @@
     }
 }
 
-private class SignatureParserVisitor : SignatureVisitor(Opcodes.API_VERSION) {
+private class SignatureParserVisitor : SignatureVisitor(Opcodes.ASM9) {
     val root = SignatureNode(Root)
     private val stack = ArrayDeque<SignatureNode>(5).apply { add(root) }
 
--- a/plugins/scripting/scripting-impl/src/org/jetbrains/kotlin/scripting/shared/definitions/asmBasedAnnotationsLoading.kt
+++ b/plugins/scripting/scripting-impl/src/org/jetbrains/kotlin/scripting/shared/definitions/asmBasedAnnotationsLoading.kt
@@ -17,13 +17,13 @@
     val args: ArrayList<BinAnnArgData> = arrayListOf()
 )
 
-private class TemplateAnnotationVisitor(val anns: ArrayList<BinAnnData> = arrayListOf()) : AnnotationVisitor(Opcodes.API_VERSION) {
+private class TemplateAnnotationVisitor(val anns: ArrayList<BinAnnData> = arrayListOf()) : AnnotationVisitor(Opcodes.ASM9) {
     override fun visit(name: String?, value: Any?) {
         anns.last().args.add(BinAnnArgData(name, value.toString()))
     }
 }
 
-private class TemplateClassVisitor(val annVisitor: TemplateAnnotationVisitor) : ClassVisitor(Opcodes.API_VERSION) {
+private class TemplateClassVisitor(val annVisitor: TemplateAnnotationVisitor) : ClassVisitor(Opcodes.ASM9) {
     override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
         val shortName = Type.getType(desc).internalName.substringAfterLast("/")
         if (shortName.startsWith("KotlinScript") || shortName.startsWith("ScriptTemplate")) {
