From 45d9f9edf9ec2a8ca097a545feb5eb7bebd04b89 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 12 Jul 2023 17:21:46 +0300 Subject: [PATCH] [FIR2IR] Split `composeSignature` method into three for different types of declarations This is needed to avoid passing `containingClass` for non-callable declarations --- .../kotlin/fir/backend/Fir2IrPluginContext.kt | 2 +- .../signaturer/FirBasedSignatureComposer.kt | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrPluginContext.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrPluginContext.kt index 0a703db2a15..39fe3935afd 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrPluginContext.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrPluginContext.kt @@ -87,7 +87,7 @@ class Fir2IrPluginContext( private inline fun referenceClassLikeSymbol( id: ClassId, - firSymbolExtractor: (ClassId) -> FirBasedSymbol<*>?, + firSymbolExtractor: (ClassId) -> FirClassLikeSymbol<*>?, irSymbolExtractor: (IdSignature) -> R ): R? { val firSymbol = firSymbolExtractor(id) ?: return null 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 65211656721..a89f544f6c7 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,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