From 9ea14a6eabb2e289727319bf3d6192d4902e4801 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Wed, 22 Dec 2021 18:57:35 +0300 Subject: [PATCH] Fir2Ir: pass file data to Fir2IrSignatureComposer --- .../kotlin/fir/backend/Fir2IrConverter.kt | 14 +++++++++++++- .../kotlin/fir/backend/Fir2IrSignatureComposer.kt | 3 +++ .../fir/signaturer/FirBasedSignatureComposer.kt | 10 +++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 7b1479a8c82..51bcc0bc96a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -428,8 +428,9 @@ class Fir2IrConverter( irGenerationExtensions: Collection ): Fir2IrResult { val moduleDescriptor = FirModuleDescriptor(session) - val symbolTable = SymbolTable(signaturer, irFactory) val signatureComposer = FirBasedSignatureComposer(mangler) + val wrappedSignaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer) + val symbolTable = SymbolTable(wrappedSignaturer, irFactory) val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions) val converter = Fir2IrConverter(moduleDescriptor, components) @@ -532,3 +533,14 @@ class Fir2IrConverter( } } } + +private class WrappedDescriptorSignatureComposer( + private val delegate: IdSignatureComposer, + private val firComposer: Fir2IrSignatureComposer +) : IdSignatureComposer by delegate { + override fun withFileSignature(fileSignature: IdSignature.FileSignature, body: () -> Unit) { + firComposer.withFileSignature(fileSignature) { + delegate.withFileSignature(fileSignature, body) + } + } +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt index 1e3789030a6..4988d831329 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt @@ -7,10 +7,13 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.signaturer.FirMangler import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.ir.util.IdSignature interface Fir2IrSignatureComposer { + val mangler: FirMangler fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null): IdSignature? fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature? + fun withFileSignature(sig: IdSignature.FileSignature, body: () -> Unit) } 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 6972152b3e7..5ebab3d7e2a 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 @@ -17,7 +17,15 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.ir.util.IdSignature @NoMutableState -class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatureComposer { +class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignatureComposer { + var fileSignature: IdSignature.FileSignature? = null + + override fun withFileSignature(sig: IdSignature.FileSignature, body: () -> Unit) { + fileSignature = sig + body() + fileSignature = null + } + inner class SignatureBuilder : FirVisitor() { var hashId: Long? = null var mask = 0L