[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.
|
* 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(
|
fun composeSignature(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration,
|
||||||
containingClass: ConeClassLikeLookupTag? = null,
|
containingClass: ConeClassLikeLookupTag? = null,
|
||||||
forceTopLevelPrivate: Boolean = false
|
forceTopLevelPrivate: Boolean = false,
|
||||||
|
allowLocalClasses: Boolean = false,
|
||||||
): IdSignature?
|
): IdSignature?
|
||||||
|
|
||||||
fun composeAccessorSignature(
|
fun composeAccessorSignature(
|
||||||
|
|||||||
+6
-2
@@ -84,23 +84,27 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat
|
|||||||
override fun composeSignature(
|
override fun composeSignature(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration,
|
||||||
containingClass: ConeClassLikeLookupTag?,
|
containingClass: ConeClassLikeLookupTag?,
|
||||||
forceTopLevelPrivate: Boolean
|
forceTopLevelPrivate: Boolean,
|
||||||
|
allowLocalClasses: Boolean,
|
||||||
): IdSignature? {
|
): IdSignature? {
|
||||||
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
|
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
|
||||||
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
||||||
if (declaration is FirCallableDeclaration) {
|
if (declaration is FirCallableDeclaration) {
|
||||||
if (declaration.visibility == Visibilities.Local) return null
|
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 declarationWithParentId = FirDeclarationWithParentId(declaration, containingClass?.classId)
|
||||||
val publicSignature = signatureCache.getOrPut(declarationWithParentId) {
|
val publicSignature = signatureCache.getOrPut(declarationWithParentId) {
|
||||||
calculatePublicSignature(declarationWithParentId)
|
calculatePublicSignature(declarationWithParentId)
|
||||||
}
|
}
|
||||||
|
|
||||||
val resultSignature: IdSignature = if (isTopLevelPrivate(declaration) || forceTopLevelPrivate) {
|
val resultSignature: IdSignature = if (isTopLevelPrivate(declaration) || forceTopLevelPrivate) {
|
||||||
val fileSig = fileSignature ?: declaration.fakeFileSignature(publicSignature)
|
val fileSig = fileSignature ?: declaration.fakeFileSignature(publicSignature)
|
||||||
IdSignature.CompositeSignature(fileSig, publicSignature)
|
IdSignature.CompositeSignature(fileSig, publicSignature)
|
||||||
} else
|
} else
|
||||||
publicSignature
|
publicSignature
|
||||||
|
|
||||||
return resultSignature
|
return resultSignature
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user