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 fab1a62e650..c81ed1348d2 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 @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -240,7 +239,7 @@ abstract class Symbols(val context: T, private val fun isLateinitIsInitializedPropertyGetter(symbol: IrFunctionSymbol): Boolean = symbol is IrSimpleFunctionSymbol && symbol.owner.let { function -> function.name.asString() == "" && - function.parent is IrPackageFragment && + function.isTopLevel && function.getPackageFragment()!!.fqName.asString() == "kotlin" && function.valueParameters.isEmpty() && symbol.owner.extensionReceiverParameter?.type?.classOrNull?.owner.let { receiverClass -> diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 451c3460358..a2d6d8a04cd 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -350,8 +350,11 @@ val IrFunction.isStatic: Boolean get() = parent is IrClass && dispatchReceiverParameter == null val IrDeclaration.isTopLevel: Boolean - get() = parent is IrPackageFragment - + get() { + if (parent is IrPackageFragment) return true + val parentClass = parent as? IrClass + return parentClass?.origin == IrDeclarationOrigin.FILE_CLASS && parentClass.parent is IrPackageFragment + } fun Scope.createTemporaryVariableWithWrappedDescriptor( irExpression: IrExpression, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index bdfaacfbe75..4485a1ada14 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -67,8 +67,9 @@ class DeclarationStubGenerator( } fun generateOrGetFacadeClass(descriptor: DeclarationDescriptor): IrClass? { - val packageFragment = descriptor.containingDeclaration as? PackageFragmentDescriptor ?: return null - val containerSource = descriptor.safeAs()?.containerSource ?: return null + val directMember = descriptor.safeAs()?.correspondingProperty ?: descriptor + val packageFragment = directMember.containingDeclaration as? PackageFragmentDescriptor ?: return null + val containerSource = directMember.safeAs()?.containerSource ?: return null return facadeClassMap.getOrPut(containerSource) { facadeClassGenerator(containerSource)?.also { facade -> val packageStub = generateOrGetEmptyExternalPackageFragmentStub(packageFragment)