From bda1ef8d57732e39d6f16800b2f9fcb0261880a7 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 15 Oct 2018 15:26:23 +0300 Subject: [PATCH] Do not run bytecode optimization passes for in bodyless modes FunctionsFromAnyGeneratorImpl has been changed because previously it didn't satisfy annotation visitor contract but it wasn't important for MethodNode --- .../codegen/FunctionsFromAnyGeneratorImpl.java | 18 ++++++++++++------ .../kotlin/codegen/state/GenerationState.kt | 7 ++++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java index de24729f79b..12c48d2068c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.descriptors.PropertyDescriptor; import org.jetbrains.kotlin.lexer.KtTokens; -import org.jetbrains.kotlin.load.java.JvmAbi; import org.jetbrains.kotlin.psi.KtClassOrObject; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt; @@ -24,6 +23,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.SimpleType; +import org.jetbrains.org.objectweb.asm.AnnotationVisitor; import org.jetbrains.org.objectweb.asm.Label; import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.Type; @@ -34,9 +34,7 @@ import java.util.List; import static org.jetbrains.kotlin.codegen.AsmUtil.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.JAVA_STRING_TYPE; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; -import static org.jetbrains.org.objectweb.asm.Opcodes.ACC_PUBLIC; -import static org.jetbrains.org.objectweb.asm.Opcodes.ACC_STATIC; -import static org.jetbrains.org.objectweb.asm.Opcodes.IRETURN; +import static org.jetbrains.org.objectweb.asm.Opcodes.*; public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator { private final ClassDescriptor classDescriptor; @@ -83,7 +81,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator { return; } - mv.visitAnnotation(Type.getDescriptor(NotNull.class), false); + visitEndForAnnotationVisitor(mv.visitAnnotation(Type.getDescriptor(NotNull.class), false)); if (!generationState.getClassBuilderMode().generateBodies) { FunctionCodegen.endVisit(mv, toStringMethodName, getDeclaration()); @@ -218,7 +216,9 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator { return; } - mv.visitParameterAnnotation(isErasedInlineClassKind ? 1 : 0, Type.getDescriptor(Nullable.class), false); + visitEndForAnnotationVisitor( + mv.visitParameterAnnotation(isErasedInlineClassKind ? 1 : 0, Type.getDescriptor(Nullable.class), false) + ); if (!generationState.getClassBuilderMode().generateBodies) { FunctionCodegen.endVisit(mv, equalsMethodName, getDeclaration()); @@ -271,6 +271,12 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator { FunctionCodegen.endVisit(mv, equalsMethodName, getDeclaration()); } + private static void visitEndForAnnotationVisitor(@Nullable AnnotationVisitor annotation) { + if (annotation != null) { + annotation.visitEnd(); + } + } + private int generateBasicChecksAndStoreTarget(InstructionAdapter iv, Label eq, Label ne) { if (fieldOwnerContext.getContextKind() == OwnerKind.ERASED_INLINE_CLASS) { SimpleType wrapperKotlinType = classDescriptor.getDefaultType(); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index d8107b1523e..391238572ec 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -252,7 +252,12 @@ class GenerationState private constructor( init { this.interceptedBuilderFactory = builderFactory .wrapWith( - { OptimizationClassBuilderFactory(it, this) }, + { + if (classBuilderMode.generateBodies) + OptimizationClassBuilderFactory(it, this) + else + it + }, { BuilderFactoryForDuplicateSignatureDiagnostics( it, this.bindingContext, diagnostics, this.moduleName,