Fir2Ir: pass file data to Fir2IrSignatureComposer
This commit is contained in:
committed by
Alexander Udalov
parent
ae158e4c5b
commit
9ea14a6eab
@@ -428,8 +428,9 @@ class Fir2IrConverter(
|
|||||||
irGenerationExtensions: Collection<IrGenerationExtension>
|
irGenerationExtensions: Collection<IrGenerationExtension>
|
||||||
): Fir2IrResult {
|
): Fir2IrResult {
|
||||||
val moduleDescriptor = FirModuleDescriptor(session)
|
val moduleDescriptor = FirModuleDescriptor(session)
|
||||||
val symbolTable = SymbolTable(signaturer, irFactory)
|
|
||||||
val signatureComposer = FirBasedSignatureComposer(mangler)
|
val signatureComposer = FirBasedSignatureComposer(mangler)
|
||||||
|
val wrappedSignaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer)
|
||||||
|
val symbolTable = SymbolTable(wrappedSignaturer, irFactory)
|
||||||
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions)
|
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions)
|
||||||
val converter = Fir2IrConverter(moduleDescriptor, components)
|
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.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
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.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||||
|
|
||||||
interface Fir2IrSignatureComposer {
|
interface Fir2IrSignatureComposer {
|
||||||
|
val mangler: FirMangler
|
||||||
fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
||||||
fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
||||||
|
fun withFileSignature(sig: IdSignature.FileSignature, body: () -> Unit)
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-1
@@ -17,7 +17,15 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
|||||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||||
|
|
||||||
@NoMutableState
|
@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?>() {
|
inner class SignatureBuilder : FirVisitor<Unit, Any?>() {
|
||||||
var hashId: Long? = null
|
var hashId: Long? = null
|
||||||
var mask = 0L
|
var mask = 0L
|
||||||
|
|||||||
Reference in New Issue
Block a user