[FIR] Pass diagnosticReporter in Fir2IrConfiguration

This parameter will be used to report diagnostics from constant
evaluator, in addition to report diagnostic from actualizer.
This commit is contained in:
Ivan Kylchik
2023-07-16 18:54:41 +02:00
committed by Space Team
parent 6e45c9d4c7
commit 84159596bd
12 changed files with 57 additions and 33 deletions
@@ -24,10 +24,13 @@ import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
import org.jetbrains.kotlin.codegen.CodegenFactory
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticMarker
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.backend.Fir2IrCommonMemberStorage
@@ -80,9 +83,11 @@ internal class KtFirCompilerFacility(
val generateClassFilter = SingleFileGenerateClassFilter(file, compilationPeerData.inlinedClasses)
val fir2IrExtensions = JvmFir2IrExtensions(effectiveConfiguration, JvmIrDeserializerImpl(), JvmIrMangler)
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
val fir2IrConfiguration = Fir2IrConfiguration(
effectiveConfiguration.languageVersionSettings,
diagnosticsReporter,
linkViaSignatures = false,
effectiveConfiguration[CommonConfigurationKeys.EVALUATED_CONST_TRACKER] ?: EvaluatedConstTracker.create(),
effectiveConfiguration[CommonConfigurationKeys.INLINE_CONST_TRACKER]
@@ -117,6 +122,7 @@ internal class KtFirCompilerFacility(
effectiveConfiguration,
).generateDeclaredClassFilter(generateClassFilter)
.codegenFactory(codegenFactory)
.diagnosticReporter(diagnosticsReporter)
.build()
try {
@@ -229,6 +229,7 @@ fun transformFirToIr(
fir2IrExtensions,
Fir2IrConfiguration(
languageVersionSettings = moduleStructure.compilerConfiguration.languageVersionSettings,
diagnosticReporter = diagnosticsReporter,
linkViaSignatures = false,
evaluatedConstTracker = moduleStructure.compilerConfiguration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -240,12 +241,10 @@ fun transformFirToIr(
firMangler = FirJsKotlinMangler(),
visibilityConverter = Fir2IrVisibilityConverter.Default,
kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance,
diagnosticReporter = diagnosticsReporter,
actualizerTypeContextProvider = ::IrTypeSystemContextImpl,
fir2IrResultPostCompute = {
(this.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors }
}
)
actualizerTypeContextProvider = ::IrTypeSystemContextImpl
) {
(this.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors }
}
}
private class Fir2KlibSerializer(
@@ -155,6 +155,7 @@ object FirKotlinToJvmBytecodeCompiler {
val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler)
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = moduleConfiguration.languageVersionSettings,
diagnosticReporter = diagnosticsReporter,
linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
evaluatedConstTracker = moduleConfiguration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -164,7 +165,6 @@ object FirKotlinToJvmBytecodeCompiler {
fir2IrExtensions,
fir2IrConfiguration,
irGenerationExtensions,
diagnosticsReporter,
)
performanceManager?.notifyIRTranslationFinished()
@@ -180,6 +180,7 @@ fun convertAnalyzedFirToIr(
} ?: emptyList()
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = input.configuration.languageVersionSettings,
diagnosticReporter = environment.diagnosticsReporter,
linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
evaluatedConstTracker = input.configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -187,7 +188,7 @@ fun convertAnalyzedFirToIr(
)
val (irModuleFragment, components, pluginContext, irActualizedResult) =
analysisResults.convertToIrAndActualizeForJvm(
extensions, fir2IrConfiguration, irGenerationExtensions, environment.diagnosticsReporter,
extensions, fir2IrConfiguration, irGenerationExtensions,
)
return ModuleCompilerIrBackendInput(
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
@@ -69,7 +68,6 @@ fun FirResult.convertToIrAndActualizeForJvm(
fir2IrExtensions: Fir2IrExtensions,
fir2IrConfiguration: Fir2IrConfiguration,
irGeneratorExtensions: Collection<IrGenerationExtension>,
diagnosticReporter: DiagnosticReporter,
): Fir2IrActualizedResult = this.convertToIrAndActualize(
fir2IrExtensions,
fir2IrConfiguration,
@@ -78,7 +76,6 @@ fun FirResult.convertToIrAndActualizeForJvm(
irMangler = JvmIrMangler,
firMangler = FirJvmKotlinMangler(),
visibilityConverter = FirJvmVisibilityConverter,
diagnosticReporter = diagnosticReporter,
kotlinBuiltIns = DefaultBuiltIns.Instance,
actualizerTypeContextProvider = ::JvmIrTypeSystemContext,
)
@@ -101,7 +98,6 @@ fun FirResult.convertToIrAndActualize(
firMangler: FirMangler,
visibilityConverter: Fir2IrVisibilityConverter,
kotlinBuiltIns: KotlinBuiltIns,
diagnosticReporter: DiagnosticReporter,
actualizerTypeContextProvider: (IrBuiltIns) -> IrTypeSystemContext,
fir2IrResultPostCompute: Fir2IrResult.() -> Unit = {},
): Fir2IrActualizedResult {
@@ -161,7 +157,7 @@ fun FirResult.convertToIrAndActualize(
actualizationResult = IrActualizer.actualize(
fir2IrResult.irModuleFragment,
commonIrOutputs.map { it.irModuleFragment },
diagnosticReporter,
fir2IrConfiguration.diagnosticReporter,
actualizerTypeContextProvider(fir2IrResult.irModuleFragment.irBuiltins),
fir2IrConfiguration.languageVersionSettings
)
@@ -18,10 +18,12 @@ package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
data class Fir2IrConfiguration(
val languageVersionSettings: LanguageVersionSettings,
val diagnosticReporter: DiagnosticReporter,
val linkViaSignatures: Boolean,
val evaluatedConstTracker: EvaluatedConstTracker,
val inlineConstTracker: InlineConstTracker?,
@@ -276,6 +276,7 @@ open class IncrementalFirJvmCompilerRunner(
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = compilerEnvironment.diagnosticsReporter,
linkViaSignatures = false,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -284,7 +285,7 @@ open class IncrementalFirJvmCompilerRunner(
val irGenerationExtensions =
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
val (irModuleFragment, components, pluginContext, irActualizedResult) = cycleResult.convertToIrAndActualizeForJvm(
extensions, fir2IrConfiguration, irGenerationExtensions, compilerEnvironment.diagnosticsReporter,
extensions, fir2IrConfiguration, irGenerationExtensions,
)
performanceManager?.notifyIRTranslationFinished()
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.js.FirJsKotlinMangler
@@ -82,13 +83,15 @@ class Fir2IrJsResultsConverter(
val commonMemberStorage = Fir2IrCommonMemberStorage(IdSignatureDescriptor(JsManglerDesc), FirJsKotlinMangler())
val irMangler = JsManglerIr
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
for ((index, part) in inputArtifact.partsForDependsOnModules.withIndex()) {
val (irModuleFragment, components, pluginContext) =
part.firAnalyzerFacade.result.outputs.single().convertToJsIr(
testServices,
module,
configuration,
testServices,
diagnosticReporter,
commonMemberStorage,
irBuiltIns,
)
@@ -119,7 +122,7 @@ class Fir2IrJsResultsConverter(
sourceFiles,
configuration.incrementalDataProvider?.getSerializedData(sourceFiles) ?: emptyList(),
expectDescriptorToSymbol = mutableMapOf(),
diagnosticReporter = DiagnosticReporterFactory.createReporter(),
diagnosticReporter = diagnosticReporter,
hasErrors = inputArtifact.hasErrors,
descriptorMangler = commonMemberStorage.symbolTable.signaturer.mangler,
irMangler = irMangler,
@@ -150,9 +153,10 @@ class Fir2IrJsResultsConverter(
}
fun ModuleCompilerAnalyzedOutput.convertToJsIr(
testServices: TestServices,
module: TestModule,
configuration: CompilerConfiguration,
testServices: TestServices,
diagnosticReporter: DiagnosticReporter,
commonMemberStorage: Fir2IrCommonMemberStorage,
irBuiltIns: IrBuiltInsOverFir?
): Fir2IrResult {
@@ -162,6 +166,7 @@ fun ModuleCompilerAnalyzedOutput.convertToJsIr(
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = true,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.backend.Fir2IrCommonMemberStorage
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
@@ -92,17 +93,18 @@ class Fir2IrJvmResultsConverter(
.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
val commonMemberStorage = Fir2IrCommonMemberStorage(signatureComposerForJvmFir2Ir(generateSignatures), FirJvmKotlinMangler())
var irBuiltIns: IrBuiltInsOverFir? = null
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
for ((index, firOutputPart) in inputArtifact.partsForDependsOnModules.withIndex()) {
val compilerConfiguration = compilerConfigurationProvider.getCompilerConfiguration(module)
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = module.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = compilerConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
evaluatedConstTracker = compilerConfiguration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = compilerConfiguration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
)
val (irModuleFragment, components, pluginContext) = firOutputPart.firAnalyzerFacade.result.outputs.single().convertToIr(
fir2IrExtensions,
fir2IrConfiguration,
@@ -139,6 +141,8 @@ class Fir2IrJvmResultsConverter(
true
).jvmBackendClassResolver(
FirJvmBackendClassResolver(mainModuleComponents)
).diagnosticReporter(
diagnosticReporter
).build()
val result = IrBackendInput.JvmIrBackendInput(
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.js.FirJsKotlinMangler
@@ -80,13 +81,15 @@ class Fir2IrWasmResultsConverter(
var irBuiltIns: IrBuiltInsOverFir? = null
val commonMemberStorage = Fir2IrCommonMemberStorage(IdSignatureDescriptor(JsManglerDesc), FirJsKotlinMangler())
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
for ((index, part) in inputArtifact.partsForDependsOnModules.withIndex()) {
val (irModuleFragment, components, pluginContext) =
part.firAnalyzerFacade.result.outputs.single().convertToWasmIr(
testServices,
module,
configuration,
testServices,
diagnosticReporter,
commonMemberStorage,
irBuiltIns,
)
@@ -117,7 +120,7 @@ class Fir2IrWasmResultsConverter(
sourceFiles,
configuration.incrementalDataProvider?.getSerializedData(sourceFiles) ?: emptyList(),
expectDescriptorToSymbol = mutableMapOf(),
diagnosticReporter = DiagnosticReporterFactory.createReporter(),
diagnosticReporter = diagnosticReporter,
hasErrors = inputArtifact.hasErrors,
descriptorMangler = commonMemberStorage.symbolTable.signaturer.mangler,
irMangler = JsManglerIr,
@@ -146,9 +149,10 @@ class Fir2IrWasmResultsConverter(
}
fun ModuleCompilerAnalyzedOutput.convertToWasmIr(
testServices: TestServices,
module: TestModule,
configuration: CompilerConfiguration,
testServices: TestServices,
diagnosticReporter: DiagnosticReporter,
commonMemberStorage: Fir2IrCommonMemberStorage,
irBuiltIns: IrBuiltInsOverFir?
): Fir2IrResult {
@@ -158,6 +162,7 @@ fun ModuleCompilerAnalyzedOutput.convertToWasmIr(
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = true,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.FirTestSessionFactoryHelper
import org.jetbrains.kotlin.fir.backend.Fir2IrCommonMemberStorage
@@ -126,9 +127,11 @@ object GenerationUtils {
)
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = linkViaSignatures,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
@@ -160,6 +163,8 @@ object GenerationUtils {
true
).jvmBackendClassResolver(
FirJvmBackendClassResolver(components)
).diagnosticReporter(
diagnosticReporter
).build()
generationState.beforeCompile()
@@ -6,8 +6,8 @@ import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDes
import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
import org.jetbrains.kotlin.backend.konan.driver.phases.Fir2IrOutput
import org.jetbrains.kotlin.backend.konan.driver.phases.FirOutput
import org.jetbrains.kotlin.backend.konan.ir.SymbolOverIrLookupUtils
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
import org.jetbrains.kotlin.backend.konan.ir.SymbolOverIrLookupUtils
import org.jetbrains.kotlin.backend.konan.serialization.KonanIdSignaturer
import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerDesc
import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerIr
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.descriptors.isEmpty
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
@@ -35,8 +34,8 @@ import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.name.*
internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer)
@@ -73,21 +72,22 @@ internal fun PhaseContext.fir2Ir(
}
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
diagnosticReporter = diagnosticsReporter,
linkViaSignatures = false,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = null,
)
val (irModuleFragment, components, pluginContext, irActualizedResult) = input.firResult.convertToIrAndActualize(
fir2IrExtensions,
Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
linkViaSignatures = false,
evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = null,
),
fir2IrConfiguration,
IrGenerationExtension.getInstances(config.project),
signatureComposer = DescriptorSignatureComposerStub(KonanManglerDesc),
irMangler = KonanManglerIr,
firMangler = FirNativeKotlinMangler(),
visibilityConverter = Fir2IrVisibilityConverter.Default,
diagnosticReporter = diagnosticsReporter,
kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance,
actualizerTypeContextProvider = ::IrTypeSystemContextImpl,
fir2IrResultPostCompute = {