diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt index 3f630e81f32..f4500652272 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequenc import org.jetbrains.kotlin.resolve.jvm.diagnostics.* import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.utils.addIfNotNull +import org.jetbrains.org.objectweb.asm.commons.Method import java.util.* private val EXTERNAL_SOURCES_KINDS = arrayOf( @@ -50,14 +51,15 @@ class BuilderFactoryForDuplicateSignatureDiagnostics( moduleName: String, languageVersionSettings: LanguageVersionSettings, shouldGenerate: (JvmDeclarationOrigin) -> Boolean, - isIrBackend: Boolean + mapAsmMethod: ((FunctionDescriptor) -> Method)? ) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) { - // Avoid errors when some classes are not loaded for some reason - private val typeMapper = KotlinTypeMapper( - bindingContext, ClassBuilderMode.LIGHT_CLASSES, moduleName, languageVersionSettings, - isIrBackend = isIrBackend - ) + private val mapAsmMethod = mapAsmMethod + ?: KotlinTypeMapper( + // Avoid errors when some classes are not loaded for some reason + bindingContext, ClassBuilderMode.LIGHT_CLASSES, moduleName, languageVersionSettings, isIrBackend = false + )::mapAsmMethod + private val reportDiagnosticsTasks = ArrayList<() -> Unit>() fun reportDiagnostics() { @@ -240,7 +242,7 @@ class BuilderFactoryForDuplicateSignatureDiagnostics( } private fun FunctionDescriptor.asRawSignature() = - with(typeMapper.mapAsmMethod(this)) { + with(mapAsmMethod(this)) { RawSignature(name, descriptor, MemberKind.METHOD) } 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 35a6036e078..ae0c3aca0e8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -44,6 +45,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.* import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.org.objectweb.asm.commons.Method import java.io.File class GenerationState private constructor( @@ -258,6 +260,7 @@ class GenerationState private constructor( val metadataVersion = configuration.get(CommonConfigurationKeys.METADATA_VERSION) ?: JvmMetadataVersion.INSTANCE val globalSerializationBindings = JvmSerializationBindings() + lateinit var irBasedMapAsmMethod: (FunctionDescriptor) -> Method init { this.interceptedBuilderFactory = builderFactory @@ -272,7 +275,7 @@ class GenerationState private constructor( BuilderFactoryForDuplicateSignatureDiagnostics( it, this.bindingContext, diagnostics, this.moduleName, this.languageVersionSettings, shouldGenerate = { !shouldOnlyCollectSignatures(it) }, - isIrBackend = isIrBackend + mapAsmMethod = if (isIrBackend) { descriptor: FunctionDescriptor -> irBasedMapAsmMethod(descriptor) } else null ).apply { duplicateSignatureFactory = this } }, { BuilderFactoryForDuplicateClassNameDiagnostics(it, diagnostics) }, 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 64cc4639c50..47daf4a2329 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 @@ -65,6 +65,9 @@ object JvmBackendFacade { val context = JvmBackendContext( state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, firMode ) + state.irBasedMapAsmMethod = { descriptor -> + context.methodSignatureMapper.mapAsmMethod(context.referenceFunction(descriptor).owner) + } //TODO ExternalDependenciesGenerator( irModuleFragment.descriptor,