FIR2IR entry points: don't create JvmDescriptorMangler if not needed

This commit is contained in:
Mikhail Glukhikh
2022-07-07 13:30:21 +02:00
committed by Space
parent 1a45284e86
commit 7bbd8d3b95
4 changed files with 91 additions and 24 deletions
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.pipeline
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
@@ -30,22 +28,17 @@ fun FirSession.convertToIr(
fir2IrExtensions: Fir2IrExtensions,
irGeneratorExtensions: Collection<IrGenerationExtension>
): Fir2IrResult {
val mangler = JvmDescriptorMangler(null)
val signaturer = JvmIdSignatureDescriptor(mangler)
val commonFirFiles = moduleData.dependsOnDependencies
.map { it.session }
.filter { it.kind == FirSession.Kind.Source }
.flatMap { (it.firProvider as FirProviderImpl).getAllFirFiles() }
return Fir2IrConverter.createModuleFragment(
return Fir2IrConverter.createModuleFragmentWithoutSignatures(
this, scopeSession, firFiles + commonFirFiles,
languageVersionSettings, signaturer,
fir2IrExtensions,
FirJvmKotlinMangler(this), JvmIrMangler, IrFactoryImpl,
FirJvmVisibilityConverter,
languageVersionSettings, fir2IrExtensions,
FirJvmKotlinMangler(this),
JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions,
generateSignatures = false
irGeneratorExtensions
)
}
@@ -10,6 +10,9 @@ import org.jetbrains.kotlin.KtSourceFileLinesMappingFromLineStartOffsets
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.generators.*
import org.jetbrains.kotlin.fir.backend.generators.DataClassMembersGenerator
@@ -394,7 +397,7 @@ class Fir2IrConverter(
}
}
fun createModuleFragment(
fun createModuleFragmentWithSignaturesIfNeeded(
session: FirSession,
scopeSession: ScopeSession,
firFiles: List<FirFile>,
@@ -409,10 +412,64 @@ class Fir2IrConverter(
irGenerationExtensions: Collection<IrGenerationExtension>,
generateSignatures: Boolean
): Fir2IrResult {
val moduleDescriptor = FirModuleDescriptor(session)
if (!generateSignatures) {
return createModuleFragmentWithoutSignatures(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, mangler, irMangler, irFactory,
visibilityConverter, specialSymbolProvider, irGenerationExtensions
)
}
val signatureComposer = FirBasedSignatureComposer(mangler)
val wrappedSignaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer)
val symbolTable = SymbolTable(wrappedSignaturer, irFactory)
return createModuleFragmentWithSymbolTable(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, irMangler, irFactory, visibilityConverter,
specialSymbolProvider, irGenerationExtensions, signatureComposer,
symbolTable, generateSignatures = true
)
}
fun createModuleFragmentWithoutSignatures(
session: FirSession,
scopeSession: ScopeSession,
firFiles: List<FirFile>,
languageVersionSettings: LanguageVersionSettings,
fir2IrExtensions: Fir2IrExtensions,
mangler: FirMangler,
irMangler: KotlinMangler.IrMangler,
irFactory: IrFactory,
visibilityConverter: Fir2IrVisibilityConverter,
specialSymbolProvider: Fir2IrSpecialSymbolProvider,
irGenerationExtensions: Collection<IrGenerationExtension>
): Fir2IrResult {
val signatureComposer = FirBasedSignatureComposer(mangler)
val signaturer = DescriptorSignatureComposerStub()
val symbolTable = SymbolTable(signaturer, irFactory)
return createModuleFragmentWithSymbolTable(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, irMangler, irFactory, visibilityConverter,
specialSymbolProvider, irGenerationExtensions, signatureComposer,
symbolTable, generateSignatures = false
)
}
private fun createModuleFragmentWithSymbolTable(
session: FirSession,
scopeSession: ScopeSession,
firFiles: List<FirFile>,
languageVersionSettings: LanguageVersionSettings,
fir2IrExtensions: Fir2IrExtensions,
irMangler: KotlinMangler.IrMangler,
irFactory: IrFactory,
visibilityConverter: Fir2IrVisibilityConverter,
specialSymbolProvider: Fir2IrSpecialSymbolProvider,
irGenerationExtensions: Collection<IrGenerationExtension>,
signatureComposer: FirBasedSignatureComposer,
symbolTable: SymbolTable,
generateSignatures: Boolean
): Fir2IrResult {
val moduleDescriptor = FirModuleDescriptor(session)
val components = Fir2IrComponentsStorage(
session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions, generateSignatures
)
@@ -475,3 +532,25 @@ private class WrappedDescriptorSignatureComposer(
}
}
}
private class DescriptorSignatureComposerStub : IdSignatureComposer {
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
return null
}
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
return null
}
override fun composeFieldSignature(descriptor: PropertyDescriptor): IdSignature? {
return null
}
override fun composeAnonInitSignature(descriptor: ClassDescriptor): IdSignature? {
return null
}
override fun withFileSignature(fileSignature: IdSignature.FileSignature, body: () -> Unit) {
body()
}
}
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.KtVirtualFileSourceFile
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.build.report.BuildReporter
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
@@ -55,7 +54,6 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistory
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.util.IrMessageLogger
@@ -272,20 +270,17 @@ class IncrementalFirJvmCompilerRunner(
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
val irGenerationExtensions =
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
val signaturer = JvmIdSignatureDescriptor(JvmDescriptorMangler(null))
val allCommonFirFiles = cycleResult.session.moduleData.dependsOnDependencies
.map { it.session }
.filter { it.kind == FirSession.Kind.Source }
.flatMap { (it.firProvider as FirProviderImpl).getAllFirFiles() }
val (irModuleFragment, components) = Fir2IrConverter.createModuleFragment(
val (irModuleFragment, components) = Fir2IrConverter.createModuleFragmentWithoutSignatures(
cycleResult.session, cycleResult.scopeSession, cycleResult.fir + allCommonFirFiles,
cycleResult.session.languageVersionSettings, signaturer,
extensions, FirJvmKotlinMangler(cycleResult.session), JvmIrMangler, IrFactoryImpl,
FirJvmVisibilityConverter,
cycleResult.session.languageVersionSettings, extensions,
FirJvmKotlinMangler(cycleResult.session), JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGenerationExtensions,
generateSignatures = false
irGenerationExtensions
)
performanceManager?.notifyIRTranslationFinished()
@@ -111,7 +111,7 @@ class FirAnalyzerFacade(
.filter { it.kind == FirSession.Kind.Source }
.flatMap { (it.firProvider as FirProviderImpl).getAllFirFiles() }
return Fir2IrConverter.createModuleFragment(
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
session, _scopeSession!!, firFiles!! + commonFirFiles,
languageVersionSettings, signaturer,
fir2IrExtensions,