[FIR2IR] add option to allow IdSignature for members of local classes
^KT-54311
This commit is contained in:
committed by
Space Team
parent
c6a3ca86eb
commit
1dfca7aca9
@@ -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(
|
||||
|
||||
+6
-2
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user