JVM IR: do not use KotlinTypeMapper in BuilderFactoryForDuplicateSignatureDiagnostics

This commit is contained in:
Alexander Udalov
2019-08-30 14:42:01 +02:00
parent 3a0c41dca4
commit c425bd0e0b
3 changed files with 16 additions and 8 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequenc
import org.jetbrains.kotlin.resolve.jvm.diagnostics.* import org.jetbrains.kotlin.resolve.jvm.diagnostics.*
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.org.objectweb.asm.commons.Method
import java.util.* import java.util.*
private val EXTERNAL_SOURCES_KINDS = arrayOf( private val EXTERNAL_SOURCES_KINDS = arrayOf(
@@ -50,14 +51,15 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
moduleName: String, moduleName: String,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
shouldGenerate: (JvmDeclarationOrigin) -> Boolean, shouldGenerate: (JvmDeclarationOrigin) -> Boolean,
isIrBackend: Boolean mapAsmMethod: ((FunctionDescriptor) -> Method)?
) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) { ) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) {
// Avoid errors when some classes are not loaded for some reason private val mapAsmMethod = mapAsmMethod
private val typeMapper = KotlinTypeMapper( ?: KotlinTypeMapper(
bindingContext, ClassBuilderMode.LIGHT_CLASSES, moduleName, languageVersionSettings, // Avoid errors when some classes are not loaded for some reason
isIrBackend = isIrBackend bindingContext, ClassBuilderMode.LIGHT_CLASSES, moduleName, languageVersionSettings, isIrBackend = false
) )::mapAsmMethod
private val reportDiagnosticsTasks = ArrayList<() -> Unit>() private val reportDiagnosticsTasks = ArrayList<() -> Unit>()
fun reportDiagnostics() { fun reportDiagnostics() {
@@ -240,7 +242,7 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
} }
private fun FunctionDescriptor.asRawSignature() = private fun FunctionDescriptor.asRawSignature() =
with(typeMapper.mapAsmMethod(this)) { with(mapAsmMethod(this)) {
RawSignature(name, descriptor, MemberKind.METHOD) RawSignature(name, descriptor, MemberKind.METHOD)
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods
import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic 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.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.commons.Method
import java.io.File import java.io.File
class GenerationState private constructor( class GenerationState private constructor(
@@ -258,6 +260,7 @@ class GenerationState private constructor(
val metadataVersion = configuration.get(CommonConfigurationKeys.METADATA_VERSION) ?: JvmMetadataVersion.INSTANCE val metadataVersion = configuration.get(CommonConfigurationKeys.METADATA_VERSION) ?: JvmMetadataVersion.INSTANCE
val globalSerializationBindings = JvmSerializationBindings() val globalSerializationBindings = JvmSerializationBindings()
lateinit var irBasedMapAsmMethod: (FunctionDescriptor) -> Method
init { init {
this.interceptedBuilderFactory = builderFactory this.interceptedBuilderFactory = builderFactory
@@ -272,7 +275,7 @@ class GenerationState private constructor(
BuilderFactoryForDuplicateSignatureDiagnostics( BuilderFactoryForDuplicateSignatureDiagnostics(
it, this.bindingContext, diagnostics, this.moduleName, this.languageVersionSettings, it, this.bindingContext, diagnostics, this.moduleName, this.languageVersionSettings,
shouldGenerate = { !shouldOnlyCollectSignatures(it) }, shouldGenerate = { !shouldOnlyCollectSignatures(it) },
isIrBackend = isIrBackend mapAsmMethod = if (isIrBackend) { descriptor: FunctionDescriptor -> irBasedMapAsmMethod(descriptor) } else null
).apply { duplicateSignatureFactory = this } ).apply { duplicateSignatureFactory = this }
}, },
{ BuilderFactoryForDuplicateClassNameDiagnostics(it, diagnostics) }, { BuilderFactoryForDuplicateClassNameDiagnostics(it, diagnostics) },
@@ -65,6 +65,9 @@ object JvmBackendFacade {
val context = JvmBackendContext( val context = JvmBackendContext(
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, firMode state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, firMode
) )
state.irBasedMapAsmMethod = { descriptor ->
context.methodSignatureMapper.mapAsmMethod(context.referenceFunction(descriptor).owner)
}
//TODO //TODO
ExternalDependenciesGenerator( ExternalDependenciesGenerator(
irModuleFragment.descriptor, irModuleFragment.descriptor,