[PL] Support handling IR error types

This commit is contained in:
Dmitriy Dolovov
2023-04-16 17:00:30 +02:00
committed by Space Team
parent 161c3fccb6
commit 16da1af525
6 changed files with 50 additions and 9 deletions
@@ -30,7 +30,11 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageUtils.Module as PLModule
internal class ClassifierExplorer(private val builtIns: IrBuiltIns, private val stubGenerator: MissingDeclarationStubGenerator) {
internal class ClassifierExplorer(
private val builtIns: IrBuiltIns,
private val stubGenerator: MissingDeclarationStubGenerator,
private val allowErrorTypes: Boolean
) {
private val exploredSymbols = ExploredClassifiers()
private val permittedAnnotationArrayParameterSymbols: Set<IrClassSymbol> by lazy {
@@ -72,7 +76,12 @@ internal class ClassifierExplorer(private val builtIns: IrBuiltIns, private val
?: arguments.firstUnusable { it.typeOrNull?.exploreType(visitedSymbols) }
?: Usable
is IrDynamicType -> Usable
else -> throw IllegalArgumentException("Unsupported IR type: ${this::class.java}, $this")
else -> {
if (this is IrErrorType && allowErrorTypes)
Usable
else
throw IllegalArgumentException("Unsupported IR type: ${this::class.java}, $this")
}
}
}
@@ -18,20 +18,22 @@ import org.jetbrains.kotlin.ir.util.allUnbound
fun createPartialLinkageSupportForLinker(
partialLinkageConfig: PartialLinkageConfig,
allowErrorTypes: Boolean,
builtIns: IrBuiltIns,
messageLogger: IrMessageLogger
): PartialLinkageSupportForLinker = if (partialLinkageConfig.isEnabled)
PartialLinkageSupportForLinkerImpl(builtIns, partialLinkageConfig.logLevel, messageLogger)
PartialLinkageSupportForLinkerImpl(builtIns, allowErrorTypes, partialLinkageConfig.logLevel, messageLogger)
else
PartialLinkageSupportForLinker.DISABLED
internal class PartialLinkageSupportForLinkerImpl(
builtIns: IrBuiltIns,
allowErrorTypes: Boolean,
logLevel: PartialLinkageLogLevel,
messageLogger: IrMessageLogger
) : PartialLinkageSupportForLinker {
private val stubGenerator = MissingDeclarationStubGenerator(builtIns)
private val classifierExplorer = ClassifierExplorer(builtIns, stubGenerator)
private val classifierExplorer = ClassifierExplorer(builtIns, stubGenerator, allowErrorTypes)
private val patcher = PartiallyLinkedIrTreePatcher(builtIns, classifierExplorer, stubGenerator, logLevel, messageLogger)
override val isEnabled get() = true