From 090a451902c4e6373ae44366e776dbcff4169eab Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 31 Jan 2022 19:12:02 +0100 Subject: [PATCH] FIR: implement proper exit on errors in new cli pipeline --- .../FirDiagnosticsCompilerResultsReporter.kt | 4 ++++ .../jvm/compiler/pipeline/compilerPipeline.kt | 20 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/fir/FirDiagnosticsCompilerResultsReporter.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/fir/FirDiagnosticsCompilerResultsReporter.kt index 598bbf1963f..c730349a71b 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/fir/FirDiagnosticsCompilerResultsReporter.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/fir/FirDiagnosticsCompilerResultsReporter.kt @@ -258,3 +258,7 @@ object FirDiagnosticsCompilerResultsReporter { } } } + +fun BaseDiagnosticsCollector.reportToMessageCollector(messageCollector: MessageCollector, renderDiagnosticName: Boolean) { + FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(this, messageCollector, renderDiagnosticName) +} \ No newline at end of file diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt index 50a85574dc9..276bab17d4e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots -import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter +import org.jetbrains.kotlin.cli.common.fir.reportToMessageCollector import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.* @@ -110,6 +110,7 @@ fun compileModulesUsingFrontendIrAndLightTree( else platformSources.add(file) } + val renderDiagnosticName = moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME) val diagnosticsReporter = DiagnosticReporterFactory.createReporter() val compilerInput = ModuleCompilerInput( @@ -126,6 +127,12 @@ fun compileModulesUsingFrontendIrAndLightTree( null, diagnosticsReporter ) + + if (diagnosticsReporter.hasErrors) { + diagnosticsReporter.reportToMessageCollector(messageCollector, renderDiagnosticName) + continue + } + // TODO: consider what to do if many modules has main classes if (mainClassFqName == null && moduleConfiguration.get(JVMConfigurationKeys.OUTPUT_JAR) != null) { mainClassFqName = findMainClass(analysisResults.fir) @@ -134,12 +141,13 @@ fun compileModulesUsingFrontendIrAndLightTree( val irInput = convertAnalyzedFirToIr(compilerInput, analysisResults, compilerEnvironment) val codegenOutput = generateCodeFromIr(irInput, compilerEnvironment) - FirDiagnosticsCompilerResultsReporter.reportToMessageCollector( - diagnosticsReporter, - messageCollector, - moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME) + diagnosticsReporter.reportToMessageCollector( + messageCollector, moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME) ) - outputs.add(codegenOutput.generationState) + + if (!diagnosticsReporter.hasErrors) { + outputs.add(codegenOutput.generationState) + } } return writeOutputs(