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.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)
}
@@ -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) },
@@ -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,