diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt index 17a123ebf74..c217c6f8345 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.backend.common.ir.BuiltinSymbolsBase import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry @@ -53,20 +54,24 @@ object JvmBackendFacade { mangler ) + val pluginContext by lazy { + psi2irContext.run { + val symbols = BuiltinSymbolsBase(irBuiltIns, moduleDescriptor.builtIns, symbolTable.lazyWrapper) + IrPluginContext( + moduleDescriptor, bindingContext, languageVersionSettings, symbolTable, typeTranslator, irBuiltIns, irLinker, symbols + ) + } + } + for (extension in pluginExtensions) { psi2ir.addPostprocessingStep { module -> - extension.generate( - module, - IrPluginContext( - psi2irContext.moduleDescriptor, - psi2irContext.bindingContext, - psi2irContext.languageVersionSettings, - psi2irContext.symbolTable, - psi2irContext.typeTranslator, - psi2irContext.irBuiltIns, - linker = irLinker - ) - ) + val old = stubGenerator.unboundSymbolGeneration + try { + stubGenerator.unboundSymbolGeneration = true + extension.generate(module, pluginContext) + } finally { + stubGenerator.unboundSymbolGeneration = old + } } } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt index 0eab445bcde..97f7482d928 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt @@ -8,6 +8,23 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa DUP INVOKESPECIAL (ListOfUsers$$serializer, , ()V) PUTSTATIC (INSTANCE, LListOfUsers$$serializer;) + LABEL (L0) + LINENUMBER (12) + NEW + DUP + LDC (ListOfUsers) + GETSTATIC (INSTANCE, LListOfUsers$$serializer;) + CHECKCAST + ICONST_1 + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) + ASTORE (0) + ALOAD (0) + LDC (list) + ICONST_0 + INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) + ALOAD (0) + CHECKCAST + PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN } @@ -17,21 +34,6 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa LABEL (L1) LINENUMBER (12) INVOKESPECIAL (java/lang/Object, , ()V) - NEW - DUP - LDC (ListOfUsers) - ALOAD (0) - CHECKCAST - ICONST_1 - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) - ASTORE (1) - ALOAD (1) - LDC (list) - ICONST_0 - INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) - ALOAD (1) - CHECKCAST - PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN LABEL (L2) } @@ -203,10 +205,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/CompositeEncoder, endStructure, (Lkotlinx/serialization/SerialDescriptor;)V) - LABEL (L2) - LINENUMBER (13) RETURN - LABEL (L3) + LABEL (L2) } public void serialize(kotlinx.serialization.Encoder encoder, java.lang.Object value) { @@ -317,6 +317,23 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ DUP INVOKESPECIAL (OptionalUser$$serializer, , ()V) PUTSTATIC (INSTANCE, LOptionalUser$$serializer;) + LABEL (L0) + LINENUMBER (9) + NEW + DUP + LDC (OptionalUser) + GETSTATIC (INSTANCE, LOptionalUser$$serializer;) + CHECKCAST + ICONST_1 + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) + ASTORE (0) + ALOAD (0) + LDC (user) + ICONST_1 + INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) + ALOAD (0) + CHECKCAST + PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN } @@ -326,21 +343,6 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ LABEL (L1) LINENUMBER (9) INVOKESPECIAL (java/lang/Object, , ()V) - NEW - DUP - LDC (OptionalUser) - ALOAD (0) - CHECKCAST - ICONST_1 - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) - ASTORE (1) - ALOAD (1) - LDC (user) - ICONST_1 - INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) - ALOAD (1) - CHECKCAST - PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN LABEL (L2) } @@ -519,10 +521,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/CompositeEncoder, endStructure, (Lkotlinx/serialization/SerialDescriptor;)V) - LABEL (L7) - LINENUMBER (10) RETURN - LABEL (L8) + LABEL (L7) } public void serialize(kotlinx.serialization.Encoder encoder, java.lang.Object value) { @@ -670,6 +670,27 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in DUP INVOKESPECIAL (User$$serializer, , ()V) PUTSTATIC (INSTANCE, LUser$$serializer;) + LABEL (L0) + LINENUMBER (6) + NEW + DUP + LDC (User) + GETSTATIC (INSTANCE, LUser$$serializer;) + CHECKCAST + ICONST_2 + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) + ASTORE (0) + ALOAD (0) + LDC (firstName) + ICONST_0 + INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) + ALOAD (0) + LDC (lastName) + ICONST_0 + INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) + ALOAD (0) + CHECKCAST + PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN } @@ -679,25 +700,6 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in LABEL (L1) LINENUMBER (6) INVOKESPECIAL (java/lang/Object, , ()V) - NEW - DUP - LDC (User) - ALOAD (0) - CHECKCAST - ICONST_2 - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) - ASTORE (1) - ALOAD (1) - LDC (firstName) - ICONST_0 - INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) - ALOAD (1) - LDC (lastName) - ICONST_0 - INVOKEVIRTUAL (kotlinx/serialization/internal/SerialClassDescImpl, addElement, (Ljava/lang/String;Z)V) - ALOAD (1) - CHECKCAST - PUTSTATIC (descriptor, Lkotlinx/serialization/SerialDescriptor;) RETURN LABEL (L2) } @@ -878,10 +880,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/CompositeEncoder, endStructure, (Lkotlinx/serialization/SerialDescriptor;)V) - LABEL (L2) - LINENUMBER (7) RETURN - LABEL (L3) + LABEL (L2) } public void serialize(kotlinx.serialization.Encoder encoder, java.lang.Object value) { @@ -1008,4 +1008,4 @@ public final class User : java/lang/Object { public final java.lang.String getFirstName() public final java.lang.String getLastName() -} +} \ No newline at end of file diff --git a/tests/mute-common.csv b/tests/mute-common.csv index 7bfbca75d3d..772b557126b 100644 --- a/tests/mute-common.csv +++ b/tests/mute-common.csv @@ -52,7 +52,6 @@ org.jetbrains.kotlin.psi.injection.StringInterpolationInjectionTest.testInterpol org.jetbrains.kotlin.nj2k.NewJavaToKotlinConverterSingleFileTestGenerated.Issues.testKt_8170, KT-36459,, org.jetbrains.kotlin.shortenRefs.ShortenRefsTestGenerated.testExtensionForObject2, Always red,, org.jetbrains.kotlin.util.KotlinVersionsTest.testVersionsAreConsistent, KT-35567,, -org.jetbrains.kotlinx.serialization.SerializationIrBytecodeListingTestGenerated.testBasic, wait until new serialization runtime version will be publicly available,, org.jetbrains.kotlin.jvm.compiler.CompileKotlinAgainstJavaTestGenerated.WithAPT.testClassWithTypeParameter, KT-36448,, org.jetbrains.kotlin.jvm.compiler.CompileKotlinAgainstJavaTestGenerated.WithoutAPT.testClassWithTypeParameter, KT-36448,, org.jetbrains.kotlin.idea.debugger.test.AsyncStackTraceTestGenerated.testAllFilesPresentInAsyncStackTrace, redesign test AsyncStackTraces,,