From 04ef856780dda1f0a8913e73bdba2ec383b4ec47 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Sun, 17 Apr 2022 20:18:32 +0500 Subject: [PATCH] [IR] Replaced K/N findPackage with common getPackageFragment --- .../jetbrains/kotlin/backend/common/ir/Ir.kt | 2 +- .../backend/jvm/codegen/ExpressionCodegen.kt | 2 +- .../backend/jvm/lower/AssertionLowering.kt | 2 +- .../PropertyReferenceDelegationLowering.kt | 2 +- .../jvm/lower/SyntheticAccessorLowering.kt | 2 +- .../backend/jvm/lower/VarargLowering.kt | 2 +- .../jvm/ir/IrInlineReferenceLocator.kt | 4 ++-- .../jvm/mapping/MethodSignatureMapper.kt | 2 +- .../metadata/DescriptorMetadataSerializer.kt | 2 +- .../ir2wasm/WasmCompiledModuleFragment.kt | 1 - .../org/jetbrains/kotlin/ir/util/IrUtils.kt | 20 ++++++++----------- .../backend/konan/KonanBackendContext.kt | 4 ++-- .../konan/descriptors/ClassLayoutBuilder.kt | 2 +- .../konan/descriptors/DescriptorUtils.kt | 6 ------ .../kotlin/backend/konan/ir/FakeIrUtils.kt | 4 ++-- .../backend/konan/llvm/RTTIGenerator.kt | 2 +- .../lower/NativeInlineFunctionResolver.kt | 7 ++++--- .../konan/serialization/KonanIrlinker.kt | 2 +- 18 files changed, 29 insertions(+), 39 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index 8a32e8125b3..dbadb5663ee 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -250,7 +250,7 @@ abstract class Symbols( symbol is IrSimpleFunctionSymbol && symbol.owner.let { function -> function.name.asString() == "" && function.isTopLevel && - function.getPackageFragment()!!.fqName.asString() == "kotlin" && + function.getPackageFragment().fqName.asString() == "kotlin" && function.valueParameters.isEmpty() && symbol.owner.extensionReceiverParameter?.type?.classOrNull?.owner.let { receiverClass -> receiverClass?.fqNameWhenAvailable?.toUnsafe() == StandardNames.FqNames.kProperty0 diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 64f2c1f0e18..8dd17b3deed 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -582,7 +582,7 @@ class ExpressionCodegen( // Copy-pasted bytecode blocks are not suspension points. symbol.owner.isInline -> if (symbol.owner.name.asString() == "suspendCoroutineUninterceptedOrReturn" && - symbol.owner.getPackageFragment()?.fqName == FqName("kotlin.coroutines.intrinsics") + symbol.owner.getPackageFragment().fqName == FqName("kotlin.coroutines.intrinsics") ) SuspensionPointKind.ALWAYS else diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt index dea7c0a2143..f1eaccc14c6 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt @@ -119,5 +119,5 @@ private class AssertionLowering(private val context: JvmBackendContext) : } private val IrFunction.isAssert: Boolean - get() = name.asString() == "assert" && getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME + get() = name.asString() == "assert" && getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME } diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceDelegationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceDelegationLowering.kt index 752642717b5..a9cd416422b 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceDelegationLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceDelegationLowering.kt @@ -85,7 +85,7 @@ private class PropertyReferenceDelegationTransformer(val context: JvmBackendCont } private val IrStatement.isStdlibCall: Boolean - get() = this is IrCall && symbol.owner.getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME + get() = this is IrCall && symbol.owner.getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME // Some receivers don't need to be stored in fields and can be reevaluated every time an accessor is called: private fun IrExpression.canInline(visibleScopes: Set): Boolean = when (this) { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt index 3c29697b24e..d4234755321 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt @@ -89,7 +89,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : FileL val ownerClass = declaration.parent as? IrClass ?: return true // locals are always accessible val scopeClassOrPackage = inlineScopeResolver.findContainer(currentScope!!.irElement) ?: return false - val samePackage = ownerClass.getPackageFragment()?.fqName == scopeClassOrPackage.getPackageFragment()?.fqName + val samePackage = ownerClass.getPackageFragment().fqName == scopeClassOrPackage.getPackageFragment()?.fqName return when { jvmVisibility == 0 /* package only */ -> samePackage jvmVisibility == Opcodes.ACC_PRIVATE -> ownerClass == scopeClassOrPackage diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt index 7667f287fa5..1c93f9ad0d3 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt @@ -101,7 +101,7 @@ internal const val ARRAY_OF_NAME = "arrayOf" internal fun IrFunction.isArrayOf(): Boolean { val parent = when (val directParent = parent) { - is IrClass -> directParent.getPackageFragment() ?: return false + is IrClass -> directParent.getPackageFragment() is IrPackageFragment -> directParent else -> return false } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt index 457578730e4..5da52d21c0b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt @@ -65,8 +65,8 @@ class IrInlineScopeResolver(context: JvmBackendContext) : IrInlineReferenceLocat get() = isInline && DescriptorVisibilities.isPrivate(visibility) private fun IrFunction.isCoroutineIntrinsic(): Boolean = - (name.asString() == "suspendCoroutine" && getPackageFragment()?.fqName == FqName("kotlin.coroutines")) || - (name.asString() == "suspendCoroutineUninterceptedOrReturn" && getPackageFragment()?.fqName == FqName("kotlin.coroutines.intrinsics")) + (name.asString() == "suspendCoroutine" && getPackageFragment().fqName == FqName("kotlin.coroutines")) || + (name.asString() == "suspendCoroutineUninterceptedOrReturn" && getPackageFragment().fqName == FqName("kotlin.coroutines.intrinsics")) fun findContainer(scope: IrElement): IrDeclarationContainer? = findContainer(scope, approximateToPackage = false) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt index a507fc0d04f..f91e9b33b41 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt @@ -452,7 +452,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { } private val IrSimpleFunction.isBuiltIn: Boolean - get() = getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME || + get() = getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME || parent.safeAs()?.fqNameWhenAvailable?.toUnsafe()?.let(JavaToKotlinClassMap::mapKotlinToJava) != null // From BuiltinMethodsWithDifferentJvmName.isBuiltinFunctionWithDifferentNameInJvm, BuiltinMethodsWithDifferentJvmName.getJvmName diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/metadata/DescriptorMetadataSerializer.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/metadata/DescriptorMetadataSerializer.kt index fb0f6ce8659..c0b89f942fc 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/metadata/DescriptorMetadataSerializer.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/metadata/DescriptorMetadataSerializer.kt @@ -63,7 +63,7 @@ class DescriptorMetadataSerializer( is DescriptorMetadataSource.Class -> serializer!!.classProto(metadata.descriptor).build() is DescriptorMetadataSource.Script -> serializer!!.classProto(metadata.descriptor).build() is DescriptorMetadataSource.File -> - serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply { + serializer!!.packagePartProto(irClass.getPackageFragment().fqName, metadata.descriptors).apply { serializerExtension.serializeJvmPackage(this, type) }.build() is DescriptorMetadataSource.Function -> { diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmCompiledModuleFragment.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmCompiledModuleFragment.kt index 35b3077f4ab..0b343f688d7 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmCompiledModuleFragment.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmCompiledModuleFragment.kt @@ -95,7 +95,6 @@ class WasmCompiledModuleFragment(val irBuiltIns: IrBuiltIns) { val declaration = (ir as? IrSymbol)?.owner as? IrDeclarationWithName if (declaration != null) { val packageFragment = declaration.getPackageFragment() - ?: error("Referencing declaration without package fragment ${declaration.fqNameWhenAvailable}") if (packageFragment is IrExternalPackageFragment) { error("Referencing declaration without package fragment ${declaration.fqNameWhenAvailable}") } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index a7bc2e0ea20..15581b9644c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -273,12 +273,13 @@ val IrDeclaration.parentAsClass: IrClass get() = parent as? IrClass ?: error("Parent of this declaration is not a class: ${render()}") -tailrec fun IrElement.getPackageFragment(): IrPackageFragment? { - if (this is IrPackageFragment) return this - return when (val parent = (this as? IrDeclaration)?.parent) { - is IrPackageFragment -> parent - else -> parent?.getPackageFragment() - } +fun IrElement.getPackageFragment(): IrPackageFragment? = + this as? IrPackageFragment ?: (this as? IrDeclaration)?.getPackageFragment() + +tailrec fun IrDeclaration.getPackageFragment(): IrPackageFragment { + val parent = this.parent + return parent as? IrPackageFragment + ?: (parent as IrDeclaration).getPackageFragment() } fun IrConstructorCall.isAnnotation(name: FqName) = symbol.owner.parentAsClass.fqNameWhenAvailable == name @@ -484,12 +485,7 @@ fun IrMemberAccessExpression.copyValueArgumentsFrom( } val IrDeclaration.fileOrNull: IrFile? - get() = when (val parent = parent) { - is IrFile -> parent - is IrPackageFragment -> null - is IrDeclaration -> parent.fileOrNull - else -> TODO("Unexpected declaration parent") - } + get() = getPackageFragment() as? IrFile val IrDeclaration.file: IrFile get() = fileOrNull ?: TODO("Unknown file") diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanBackendContext.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanBackendContext.kt index 7a1b923ff36..6806f3a06bd 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanBackendContext.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanBackendContext.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.DefaultMapping import org.jetbrains.kotlin.backend.common.Mapping import org.jetbrains.kotlin.backend.konan.descriptors.KonanSharedVariablesManager -import org.jetbrains.kotlin.backend.konan.descriptors.findPackage import org.jetbrains.kotlin.backend.konan.ir.KonanIr import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys @@ -22,6 +21,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl +import org.jetbrains.kotlin.ir.util.getPackageFragment internal abstract class KonanBackendContext(val config: KonanConfig) : CommonBackendContext { abstract override val builtIns: KonanBuiltIns @@ -59,7 +59,7 @@ internal fun IrElement.getCompilerMessageLocation(containingFile: IrFile): Compi internal fun IrBuilderWithScope.getCompilerMessageLocation(): CompilerMessageLocation? { val declaration = this.scope.scopeOwnerSymbol.owner as? IrDeclaration ?: return null - val file = declaration.findPackage() as? IrFile ?: return null + val file = declaration.getPackageFragment() as? IrFile ?: return null return createCompilerMessageLocation(file, startOffset, endOffset) } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt index 71c7cca7331..9785d867682 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt @@ -472,7 +472,7 @@ internal class ClassLayoutBuilder(val irClass: IrClass, val context: Context) { context.specialDeclarationsFactory.getOuterThisField(irClass) else null if (context.config.lazyIrForCaches && !context.llvmModuleSpecification.containsDeclaration(irClass)) { - val packageFragment = irClass.findPackage() + val packageFragment = irClass.getPackageFragment() val moduleDescriptor = packageFragment.packageFragmentDescriptor.containingDeclaration if (moduleDescriptor.isFromInteropLibrary()) return emptyList() diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt index 7916b9ccae8..faa7b55cae8 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt @@ -236,12 +236,6 @@ internal fun IrSimpleFunction.bridgeDirectionsTo(overriddenFunction: IrSimpleFun return ourDirections } -internal tailrec fun IrDeclaration.findPackage(): IrPackageFragment { - val parent = this.parent - return parent as? IrPackageFragment - ?: (parent as IrDeclaration).findPackage() -} - fun IrFunctionSymbol.isComparisonFunction(map: Map): Boolean = this in map.values diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/FakeIrUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/FakeIrUtils.kt index 819c37ab551..1c48e6da633 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/FakeIrUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/FakeIrUtils.kt @@ -6,16 +6,16 @@ package org.jetbrains.kotlin.backend.konan.ir import org.jetbrains.kotlin.backend.konan.* -import org.jetbrains.kotlin.backend.konan.descriptors.findPackage import org.jetbrains.kotlin.backend.konan.llvm.llvmSymbolOrigin import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.toKotlinType +import org.jetbrains.kotlin.ir.util.getPackageFragment // This file contains some IR utilities which actually use descriptors. // TODO: port this code to IR. -internal val IrDeclaration.llvmSymbolOrigin get() = findPackage().packageFragmentDescriptor.llvmSymbolOrigin +internal val IrDeclaration.llvmSymbolOrigin get() = getPackageFragment().packageFragmentDescriptor.llvmSymbolOrigin internal fun IrType.isObjCObjectType() = this.toKotlinType().isObjCObjectType() diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/RTTIGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/RTTIGenerator.kt index b4cd6d13237..a8125617945 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/RTTIGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/RTTIGenerator.kt @@ -564,7 +564,7 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils { } private fun getReflectionInfo(irClass: IrClass): ReflectionInfo { - val packageName: String = irClass.findPackage().fqName.asString() // Compute and store package name in TypeInfo anyways. + val packageName: String = irClass.getPackageFragment().fqName.asString() // Compute and store package name in TypeInfo anyways. val relativeName: String? val flags: Int diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt index 6596da62dc8..036c62bd315 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt @@ -13,13 +13,14 @@ import org.jetbrains.kotlin.backend.common.lower.inline.LocalClassesInInlineFunc import org.jetbrains.kotlin.backend.common.lower.inline.LocalClassesInInlineLambdasLowering import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.InlineFunctionOriginInfo -import org.jetbrains.kotlin.backend.konan.descriptors.findPackage import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.file import org.jetbrains.kotlin.ir.util.render +import org.jetbrains.kotlin.ir.util.getPackageFragment // TODO: This is a bit hacky. Think about adopting persistent IR ideas. internal class NativeInlineFunctionResolver(override val context: Context) : DefaultInlineFunctionResolver(context) { @@ -28,11 +29,11 @@ internal class NativeInlineFunctionResolver(override val context: Context) : Def context.specialDeclarationsFactory.loweredInlineFunctions[function]?.let { return it.irFunction } - val packageFragment = function.findPackage() + val packageFragment = function.getPackageFragment() val notLoweredFunction = if (packageFragment !is IrExternalPackageFragment) { context.specialDeclarationsFactory.getNonLoweredInlineFunction(function).also { context.specialDeclarationsFactory.loweredInlineFunctions[function] = - InlineFunctionOriginInfo(it, function.file, function.startOffset, function.endOffset) + InlineFunctionOriginInfo(it, packageFragment as IrFile, function.startOffset, function.endOffset) } } else { // The function is from Lazy IR, get its body from the IR linker. diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt index a54d606a93c..3290d852b0e 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt @@ -714,7 +714,7 @@ internal class KonanIrLinker( private val inlineFunctionFiles = mutableMapOf() fun deserializeInlineFunction(function: IrFunction): InlineFunctionOriginInfo { - val packageFragment = function.findPackage() as? IrExternalPackageFragment + val packageFragment = function.getPackageFragment() as? IrExternalPackageFragment ?: error("Expected an external package fragment for ${function.render()}") if (function.parents.any { (it as? IrFunction)?.isInline == true}) { // Already deserialized by the top-most inline function.