From fefa72fa298044a78685e3b2062eb09294ef52e3 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 1 Jun 2023 16:01:42 +0900 Subject: [PATCH] [BE] Use more generic 'FacadeClassSource' in 'parentClassId' In the IDE's evaluator, the container source for stub-based FIR declarations is a different implementation of 'FacadeClassSource'. --- .../org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt index 180afc474c7..1fb747c46f4 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.load.kotlin.FacadeClassSource import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.name.ClassId @@ -454,8 +455,14 @@ val IrDeclaration.fileParentOrNull: IrFile? } val IrMemberWithContainerSource.parentClassId: ClassId? - get() = ((this as? IrSimpleFunction)?.correspondingPropertySymbol?.owner ?: this).let { directMember -> - (directMember.containerSource as? JvmPackagePartSource)?.classId ?: (directMember.parent as? IrClass)?.classId + get() { + val directMember = (this as? IrSimpleFunction)?.correspondingPropertySymbol?.owner ?: this + + return when (val containerSource = directMember.containerSource) { + is JvmPackagePartSource -> containerSource.classId + is FacadeClassSource -> ClassId.topLevel(containerSource.className.fqNameForClassNameWithoutDollars) + else -> (directMember.parent as? IrClass)?.classId + } } // Translated into IR-based terms from classifierDescriptor?.classId