Fir2Ir: pass file data to Fir2IrSignatureComposer

This commit is contained in:
Georgy Bronnikov
2021-12-22 18:57:35 +03:00
committed by Alexander Udalov
parent ae158e4c5b
commit 9ea14a6eab
3 changed files with 25 additions and 2 deletions
@@ -428,8 +428,9 @@ class Fir2IrConverter(
irGenerationExtensions: Collection<IrGenerationExtension>
): 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)
}
}
}
@@ -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)
}
@@ -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<Unit, Any?>() {
var hashId: Long? = null
var mask = 0L