[FIR] Support rendering diagnostic names in CLI FIR compiler

This commit is contained in:
Dmitriy Novozhilov
2022-01-27 11:24:55 +03:00
committed by TeamCityServer
parent 5055e1eaf1
commit aab66bd623
4 changed files with 35 additions and 12 deletions
@@ -11,24 +11,29 @@ import org.jetbrains.kotlin.KtPsiSourceElement
import org.jetbrains.kotlin.cli.common.messages.* import org.jetbrains.kotlin.cli.common.messages.*
import org.jetbrains.kotlin.diagnostics.* import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
import java.io.Closeable import java.io.Closeable
import java.io.File import java.io.File
import java.io.InputStreamReader import java.io.InputStreamReader
object FirDiagnosticsCompilerResultsReporter { object FirDiagnosticsCompilerResultsReporter {
fun reportDiagnostics(diagnostics: Collection<KtDiagnostic>, reporter: MessageCollector): Boolean { fun reportDiagnostics(diagnostics: Collection<KtDiagnostic>, reporter: MessageCollector, renderDiagnosticName: Boolean): Boolean {
var hasErrors = false var hasErrors = false
for (diagnostic in diagnostics.sortedWith(DiagnosticComparator)) { for (diagnostic in diagnostics.sortedWith(DiagnosticComparator)) {
hasErrors = reportDiagnostic(diagnostic, reporter) || hasErrors hasErrors = reportDiagnostic(diagnostic, reporter, renderDiagnosticName) || hasErrors
} }
reportSpecialErrors(diagnostics) reportSpecialErrors(diagnostics)
return hasErrors return hasErrors
} }
fun reportToMessageCollector(diagnosticsCollector: BaseDiagnosticsCollector, messageCollector: MessageCollector): Boolean { fun reportToMessageCollector(
diagnosticsCollector: BaseDiagnosticsCollector,
messageCollector: MessageCollector,
renderDiagnosticName: Boolean
): Boolean {
return reportByFile(diagnosticsCollector) { diagnostic, location -> return reportByFile(diagnosticsCollector) { diagnostic, location ->
reportDiagnosticToMessageCollector(diagnostic, location, messageCollector) reportDiagnosticToMessageCollector(diagnostic, location, messageCollector, renderDiagnosticName)
} }
} }
@@ -85,10 +90,10 @@ object FirDiagnosticsCompilerResultsReporter {
*/ */
} }
private fun reportDiagnostic(diagnostic: KtDiagnostic, reporter: MessageCollector): Boolean { private fun reportDiagnostic(diagnostic: KtDiagnostic, reporter: MessageCollector, renderDiagnosticName: Boolean): Boolean {
if (!diagnostic.isValid) return false if (!diagnostic.isValid) return false
diagnostic.location()?.let { diagnostic.location()?.let {
reportDiagnosticToMessageCollector(diagnostic, it, reporter) reportDiagnosticToMessageCollector(diagnostic, it, reporter, renderDiagnosticName)
} }
return diagnostic.severity == Severity.ERROR return diagnostic.severity == Severity.ERROR
} }
@@ -96,11 +101,19 @@ object FirDiagnosticsCompilerResultsReporter {
private fun reportDiagnosticToMessageCollector( private fun reportDiagnosticToMessageCollector(
diagnostic: KtDiagnostic, diagnostic: KtDiagnostic,
location: CompilerMessageSourceLocation, location: CompilerMessageSourceLocation,
reporter: MessageCollector reporter: MessageCollector,
renderDiagnosticName: Boolean
) { ) {
val severity = AnalyzerWithCompilerReport.convertSeverity(diagnostic.severity) val severity = AnalyzerWithCompilerReport.convertSeverity(diagnostic.severity)
val renderer = RootDiagnosticRendererFactory(diagnostic) val renderer = RootDiagnosticRendererFactory(diagnostic)
reporter.report(severity, renderer.render(diagnostic), location)
val message = renderer.render(diagnostic)
val textToRender = when (renderDiagnosticName) {
true -> "[${diagnostic.factoryName}] $message"
false -> message
}
reporter.report(severity, textToRender, location)
} }
private fun throwErrorDiagnosticAsException( private fun throwErrorDiagnosticAsException(
@@ -130,12 +130,14 @@ object FirKotlinToJvmBytecodeCompiler {
if (!checkKotlinPackageUsage(moduleConfiguration, allSources)) return null if (!checkKotlinPackageUsage(moduleConfiguration, allSources)) return null
val renderDiagnosticNames = moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
val diagnosticsReporter = DiagnosticReporterFactory.createReporter() val diagnosticsReporter = DiagnosticReporterFactory.createReporter()
val firResult = runFrontend(allSources, diagnosticsReporter).also { val firResult = runFrontend(allSources, diagnosticsReporter).also {
performanceManager?.notifyAnalysisFinished() performanceManager?.notifyAnalysisFinished()
} }
if (firResult == null) { if (firResult == null) {
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector) FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
return null return null
} }
@@ -155,7 +157,7 @@ object FirKotlinToJvmBytecodeCompiler {
diagnosticsReporter diagnosticsReporter
) )
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector) FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
performanceManager?.notifyIRGenerationFinished() performanceManager?.notifyIRGenerationFinished()
performanceManager?.notifyGenerationFinished() performanceManager?.notifyGenerationFinished()
@@ -403,7 +403,11 @@ object KotlinToJVMBytecodeCompiler {
messageCollector, messageCollector,
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME) configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
) )
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector) FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
diagnosticsReporter,
messageCollector,
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
)
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled() ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
return state return state
@@ -256,6 +256,10 @@ private fun generate(
diagnosticsReporter diagnosticsReporter
).build().also { ).build().also {
KotlinCodegenFacade.compileCorrectFiles(it) KotlinCodegenFacade.compileCorrectFiles(it)
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector) FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
diagnosticsReporter,
messageCollector,
kotlinCompilerConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
)
} }
} }