From 7bbd8d3b958acd5a96e4adb3bc9e7c57f42578fc Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 7 Jul 2022 13:30:21 +0200 Subject: [PATCH] FIR2IR entry points: don't create JvmDescriptorMangler if not needed --- .../kotlin/fir/pipeline/convertToIr.kt | 17 ++-- .../kotlin/fir/backend/Fir2IrConverter.kt | 83 ++++++++++++++++++- .../IncrementalFirJvmCompilerRunner.kt | 13 +-- .../jetbrains/kotlin/fir/FirAnalyzerFacade.kt | 2 +- 4 files changed, 91 insertions(+), 24 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 633f809872d..2630b051abb 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 @@ -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 ): 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 ) } 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 6134036a721..b458d064a17 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 @@ -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, @@ -409,10 +412,64 @@ class Fir2IrConverter( irGenerationExtensions: Collection, 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, + languageVersionSettings: LanguageVersionSettings, + fir2IrExtensions: Fir2IrExtensions, + mangler: FirMangler, + irMangler: KotlinMangler.IrMangler, + irFactory: IrFactory, + visibilityConverter: Fir2IrVisibilityConverter, + specialSymbolProvider: Fir2IrSpecialSymbolProvider, + irGenerationExtensions: Collection + ): 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, + languageVersionSettings: LanguageVersionSettings, + fir2IrExtensions: Fir2IrExtensions, + irMangler: KotlinMangler.IrMangler, + irFactory: IrFactory, + visibilityConverter: Fir2IrVisibilityConverter, + specialSymbolProvider: Fir2IrSpecialSymbolProvider, + irGenerationExtensions: Collection, + 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() + } +} diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt index 3dc9cfbba17..b1ad4f98596 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt @@ -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() diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/FirAnalyzerFacade.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/FirAnalyzerFacade.kt index d0afe8a42fe..bacadd7af85 100644 --- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/FirAnalyzerFacade.kt +++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/FirAnalyzerFacade.kt @@ -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,