[FIR2IR] Use single IrBuiltInsOverFir for all MPP source modules

^KT-56229 Fixed
This commit is contained in:
Ivan Kochurkin
2023-01-26 21:20:34 +01:00
committed by Space Team
parent 001b11f285
commit e601b01be2
13 changed files with 71 additions and 23 deletions
@@ -79,9 +79,6 @@ class Fir2IrClassifierStorage(
with(typeConverter) { toIrType(typeContext) }
fun preCacheBuiltinClasses() {
// dependentStorages are only actual for MPP scenario
// There is no need to precache them twice: the same library session is used and FIR and IR elements are the same
if (dependentStorages.isNotEmpty()) return
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
val firClass = ConeClassLikeLookupTagImpl(classId).toSymbol(session)!!.fir as FirRegularClass
val irClass = irBuiltinSymbol.owner
@@ -61,12 +61,15 @@ class Fir2IrConverter(
irGenerationExtensions: Collection<IrGenerationExtension>,
fir2irVisitor: Fir2IrVisitor,
fir2IrExtensions: Fir2IrExtensions,
runPreCacheBuiltinClasses: Boolean
) {
session.lazyDeclarationResolver.disableLazyResolveContractChecks()
for (firFile in allFirFiles) {
registerFileAndClasses(firFile, irModuleFragment)
}
classifierStorage.preCacheBuiltinClasses()
if (runPreCacheBuiltinClasses) {
classifierStorage.preCacheBuiltinClasses()
}
// The file processing is performed phase-to-phase:
// 1. Creation of all non-local regular classes
// 2. Class header processing (type parameters, supertypes, this receiver)
@@ -459,7 +462,8 @@ class Fir2IrConverter(
kotlinBuiltIns: KotlinBuiltIns,
signatureComposer: FirBasedSignatureComposer,
symbolTable: SymbolTable,
dependentComponents: List<Fir2IrComponents>
dependentComponents: List<Fir2IrComponents>,
initializedIrBuiltIns: IrBuiltInsOverFir?
): Fir2IrResult {
val moduleDescriptor = FirModuleDescriptor(session, kotlinBuiltIns)
val components = Fir2IrComponentsStorage(
@@ -477,7 +481,7 @@ class Fir2IrConverter(
components.visibilityConverter = visibilityConverter
val typeConverter = Fir2IrTypeConverter(components)
components.typeConverter = typeConverter
val irBuiltIns = dependentComponents.lastOrNull()?.irBuiltIns ?: IrBuiltInsOverFir(
val irBuiltIns = initializedIrBuiltIns ?: IrBuiltInsOverFir(
components, languageVersionSettings, moduleDescriptor, irMangler,
languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources) || kotlinBuiltIns !== DefaultBuiltIns.Instance
)
@@ -505,7 +509,8 @@ class Fir2IrConverter(
}
converter.runSourcesConversion(
allFirFiles, irModuleFragment, irGenerationExtensions, fir2irVisitor, fir2IrExtensions
allFirFiles, irModuleFragment, irGenerationExtensions, fir2irVisitor, fir2IrExtensions,
runPreCacheBuiltinClasses = initializedIrBuiltIns == null
)
return Fir2IrResult(irModuleFragment, components, moduleDescriptor)
@@ -33082,6 +33082,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/multiplatform/multiModule/getRidOfDoubleBindingInFir2IrLazyProperty.kt");
}
@Test
@TestMetadata("independentCommonSourceModules.kt")
public void testIndependentCommonSourceModules() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/multiModule/independentCommonSourceModules.kt");
}
@Test
@TestMetadata("kt-51753-1.kt")
public void testKt_51753_1() throws Exception {