From 52f6868b7479e2ac78854ea1f102ca31ed955b77 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 5 Mar 2024 10:39:50 +0200 Subject: [PATCH] [FIR2IR] Don't compose signatures if f/o building with FIR is disabled ^KT-66341 Fixed --- .../kotlin/fir/pipeline/convertToIr.kt | 3 +- .../fir/backend/Fir2IrCommonMemberStorage.kt | 4 +-- .../signaturer/FirBasedSignatureComposer.kt | 36 ++++++++++++++++--- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt index c67ad4d15cb..f9027085356 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProv import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext @@ -71,7 +72,7 @@ fun FirResult.convertToIrAndActualize( actualizerTypeContextProvider: (IrBuiltIns) -> IrTypeSystemContext, fir2IrResultPostCompute: (ModuleCompilerAnalyzedOutput, Fir2IrResult) -> Unit = { _, _ -> }, ): Fir2IrActualizedResult { - val commonMemberStorage = Fir2IrCommonMemberStorage(firMangler) + val commonMemberStorage = Fir2IrCommonMemberStorage(FirBasedSignatureComposer.create(firMangler, fir2IrConfiguration)) require(outputs.isNotEmpty()) { "No modules found" } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt index bcfdd786c39..546a3d0336c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt @@ -21,9 +21,7 @@ import java.util.concurrent.ConcurrentHashMap * * See `/docs/fir/k2_kmp.md` */ -class Fir2IrCommonMemberStorage(firMangler: FirMangler) { - val firSignatureComposer = FirBasedSignatureComposer(firMangler) - +class Fir2IrCommonMemberStorage(val firSignatureComposer: FirBasedSignatureComposer) { val symbolTable = SymbolTable(signaturer = null, irFactory = IrFactoryImpl) val classCache: MutableMap = mutableMapOf() 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 6b88add7720..e6cd6cbcb46 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 @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.signaturer import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration import org.jetbrains.kotlin.fir.backend.FirMangler import org.jetbrains.kotlin.fir.backend.conversionData import org.jetbrains.kotlin.fir.declarations.* @@ -19,8 +20,33 @@ import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -// @NoMutableState -- we'll restore this annotation once we get rid of withFileSignature(). -class FirBasedSignatureComposer(val mangler: FirMangler) { + +sealed class FirBasedSignatureComposer(val mangler: FirMangler) { + companion object { + fun create(mangler: FirMangler, configuration: Fir2IrConfiguration): FirBasedSignatureComposer { + return when (configuration.useFirBasedFakeOverrideGenerator) { + false -> Empty(mangler) + true -> FirBasedSignatureComposerImpl(mangler) + } + } + } + + abstract fun composeSignature( + declaration: FirCallableDeclaration, + containingClass: ConeClassLikeLookupTag? = null, + forceExpect: Boolean = false + ): IdSignature? + + class Empty(mangler: FirMangler) : FirBasedSignatureComposer(mangler) { + override fun composeSignature( + declaration: FirCallableDeclaration, + containingClass: ConeClassLikeLookupTag?, + forceExpect: Boolean + ): IdSignature? = null + } +} + +class FirBasedSignatureComposerImpl(mangler: FirMangler) : FirBasedSignatureComposer(mangler) { private data class FirDeclarationWithParentId(val declaration: FirDeclaration, val classId: ClassId?, val forceExpect: Boolean) private val signatureCache = mutableMapOf() @@ -29,10 +55,10 @@ class FirBasedSignatureComposer(val mangler: FirMangler) { declaration.signatureString(compatibleMode = false).let { it.hashMangle to it } } - fun composeSignature( + override fun composeSignature( declaration: FirCallableDeclaration, - containingClass: ConeClassLikeLookupTag? = null, - forceExpect: Boolean = false + containingClass: ConeClassLikeLookupTag?, + forceExpect: Boolean ): IdSignature? { return composeSignatureImpl(declaration, containingClass, forceExpect) }