JVM IR: do not use KotlinTypeMapper in BuilderFactoryForDuplicateSignatureDiagnostics
This commit is contained in:
+9
-7
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user