From 1dfca7aca9e337e56d04d03a2c53b4a49c2af64e Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Fri, 4 Nov 2022 12:16:33 +0100 Subject: [PATCH] [FIR2IR] add option to allow IdSignature for members of local classes ^KT-54311 --- .../kotlin/fir/backend/Fir2IrSignatureComposer.kt | 5 +++-- .../kotlin/fir/signaturer/FirBasedSignatureComposer.kt | 8 ++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt index be71bbbdf21..67f13eb1832 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -17,7 +17,8 @@ interface Fir2IrSignatureComposer { fun composeSignature( declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null, - forceTopLevelPrivate: Boolean = false + forceTopLevelPrivate: Boolean = false, + allowLocalClasses: Boolean = false, ): IdSignature? fun composeAccessorSignature( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt index 614ec070166..e9d2c4ec14c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt @@ -84,23 +84,27 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat override fun composeSignature( declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag?, - forceTopLevelPrivate: Boolean + forceTopLevelPrivate: Boolean, + allowLocalClasses: Boolean, ): IdSignature? { if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null if (declaration is FirRegularClass && declaration.classId.isLocal) return null if (declaration is FirCallableDeclaration) { if (declaration.visibility == Visibilities.Local) return null - if (declaration.dispatchReceiverClassOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true) return null + if (!allowLocalClasses && (declaration.dispatchReceiverClassOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true)) return null } + val declarationWithParentId = FirDeclarationWithParentId(declaration, containingClass?.classId) val publicSignature = signatureCache.getOrPut(declarationWithParentId) { calculatePublicSignature(declarationWithParentId) } + val resultSignature: IdSignature = if (isTopLevelPrivate(declaration) || forceTopLevelPrivate) { val fileSig = fileSignature ?: declaration.fakeFileSignature(publicSignature) IdSignature.CompositeSignature(fileSig, publicSignature) } else publicSignature + return resultSignature }