From ced974fcb70193ba86863e9508754b5ce1a4baee Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Tue, 23 Aug 2022 16:03:20 +0300 Subject: [PATCH] [IR] Fixed non-friend module visibility for LazyIR caches K/N builds Lazy IR for cached libraries - so no IrModule for them, have to use descriptors to find the module's name for the friend module predicate --- .../kotlin/ir/overrides/IrOverridingUtil.kt | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt index 6338bde5c9f..dbb9a4c4ece 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt @@ -5,17 +5,12 @@ package org.jetbrains.kotlin.ir.overrides -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.DescriptorVisibilities -import org.jetbrains.kotlin.descriptors.DescriptorVisibility -import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.util.collectAndFilterRealOverrides -import org.jetbrains.kotlin.ir.util.fileOrNull -import org.jetbrains.kotlin.ir.util.isReal -import org.jetbrains.kotlin.ir.util.render +import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo import org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo.incompatible import org.jetbrains.kotlin.types.AbstractTypeChecker @@ -39,22 +34,19 @@ abstract class FakeOverrideBuilderStrategy(private val friendModules: Map>): Boolean { if (visibility != DescriptorVisibilities.INTERNAL) return false - val thisModule = thisClass.fileOrNull?.module - val memberModule = memberClass.fileOrNull?.module - if (thisModule == memberModule) return false - // Note: On WASM backend there is possible if `thisClass` is from `IrExternalPackageFragment` which module is null + val thisModule = thisClass.getPackageFragment().packageFragmentDescriptor.containingDeclaration + val memberModule = memberClass.getPackageFragment().packageFragmentDescriptor.containingDeclaration - if (thisModule == null || memberModule == null) return false - - return !isInFriendModules(thisModule, memberModule, friendModules) + return thisModule != memberModule && !isInFriendModules(thisModule, memberModule, friendModules) } private fun isInFriendModules( - fromModule: IrModuleFragment, - toModule: IrModuleFragment, + fromModule: ModuleDescriptor, + toModule: ModuleDescriptor, friendModules: Map> ): Boolean {