[IR] Implement checker for friendship of modules in fake override builder

- pass corresponding information to FO builder
 - implement check
 - fix KT-47192 and KT-48673
This commit is contained in:
Roman Artemev
2021-10-06 14:51:06 +03:00
committed by teamcityserver
parent ed8e7c754d
commit e6de812788
9 changed files with 56 additions and 33 deletions
@@ -277,6 +277,8 @@ fun loadIr(
JsIrLinker.JsFePluginContext(moduleDescriptor, symbolTable, typeTranslator, irBuiltIns)
}
val moduleFragmentToUniqueName = mutableMapOf<IrModuleFragment, String>()
val friendModules =
mapOf(psi2IrContext.moduleDescriptor.name.asString() to depsDescriptors.friendDependencies.map { it.library.uniqueName })
val irLinker =
JsIrLinker(
psi2IrContext.moduleDescriptor,
@@ -285,7 +287,8 @@ fun loadIr(
symbolTable,
feContext,
null,
depsDescriptors.loweredIcData
depsDescriptors.loweredIcData,
friendModules
)
val deserializedModuleFragments = sortDependencies(allDependencies, depsDescriptors.descriptors).map { klib ->
irLinker.deserializeIrModuleHeader(
@@ -345,6 +348,8 @@ fun loadIr(
result
}
val friendModules = mapOf(mainModuleLib.uniqueName to depsDescriptors.friendDependencies.map { it.library.uniqueName })
val irLinker =
JsIrLinker(
null,
@@ -353,7 +358,8 @@ fun loadIr(
symbolTable,
null,
null,
loweredIcData
loweredIcData,
friendModules
)
val moduleFragmentToUniqueName = mutableMapOf<IrModuleFragment, String>()
@@ -30,9 +30,10 @@ class JsIrLinker(
override val translationPluginContext: TranslationPluginContext?,
private val icData: ICData? = null,
private val loweredIcData: Map<ModuleDescriptor, SerializedIcData> = emptyMap(),
friendModules: Map<String, Collection<String>> = emptyMap()
) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, emptyList()) {
override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, JsManglerIr, IrTypeSystemContextImpl(builtIns))
override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, JsManglerIr, IrTypeSystemContextImpl(builtIns), friendModules)
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean =
moduleDescriptor === moduleDescriptor.builtIns.builtInsModule