[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(
id: ClassId,
firSymbolExtractor: (ClassId) -> FirBasedSymbol<*>?,
firSymbolExtractor: (ClassId) -> FirClassLikeSymbol<*>?,
irSymbolExtractor: (IdSignature) -> R
): R? {
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(
declaration: FirDeclaration,
declaration: FirCallableDeclaration,
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? {
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
if (declaration is FirRegularClass && declaration.classId.isLocal) return null