[FIR2IR] Split composeSignature method into three for different types of declarations

This is needed to avoid passing `containingClass` for non-callable
  declarations
This commit is contained in:
Dmitriy Novozhilov
2023-07-12 17:21:46 +03:00
committed by Space Team
parent a75d5353ee
commit 45d9f9edf9
2 changed files with 19 additions and 3 deletions
@@ -87,7 +87,7 @@ class Fir2IrPluginContext(
private inline fun <R> referenceClassLikeSymbol( private inline fun <R> referenceClassLikeSymbol(
id: ClassId, id: ClassId,
firSymbolExtractor: (ClassId) -> FirBasedSymbol<*>?, firSymbolExtractor: (ClassId) -> FirClassLikeSymbol<*>?,
irSymbolExtractor: (IdSignature) -> R irSymbolExtractor: (IdSignature) -> R
): R? { ): R? {
val firSymbol = firSymbolExtractor(id) ?: return null val firSymbol = firSymbolExtractor(id) ?: return null
@@ -84,10 +84,26 @@ class FirBasedSignatureComposer(val mangler: FirMangler) {
} }
} }
fun composeSignature(declaration: FirClassLikeDeclaration): IdSignature? {
return composeSignatureImpl(declaration, containingClass = null, forceExpect = false)
}
fun composeSignature( fun composeSignature(
declaration: FirDeclaration, declaration: FirCallableDeclaration,
containingClass: ConeClassLikeLookupTag? = null, containingClass: ConeClassLikeLookupTag? = null,
forceExpect: Boolean = false, forceExpect: Boolean = false
): IdSignature? {
return composeSignatureImpl(declaration, containingClass, forceExpect)
}
fun composeSignature(declaration: FirScript): IdSignature? {
return composeSignatureImpl(declaration, containingClass = null, forceExpect = false)
}
private fun composeSignatureImpl(
declaration: FirDeclaration,
containingClass: ConeClassLikeLookupTag?,
forceExpect: 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