[FIR] Support rendering diagnostic names in CLI FIR compiler
This commit is contained in:
committed by
TeamCityServer
parent
5055e1eaf1
commit
aab66bd623
+21
-8
@@ -11,24 +11,29 @@ import org.jetbrains.kotlin.KtPsiSourceElement
|
||||
import org.jetbrains.kotlin.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.diagnostics.*
|
||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
|
||||
import java.io.Closeable
|
||||
import java.io.File
|
||||
import java.io.InputStreamReader
|
||||
|
||||
object FirDiagnosticsCompilerResultsReporter {
|
||||
fun reportDiagnostics(diagnostics: Collection<KtDiagnostic>, reporter: MessageCollector): Boolean {
|
||||
fun reportDiagnostics(diagnostics: Collection<KtDiagnostic>, reporter: MessageCollector, renderDiagnosticName: Boolean): Boolean {
|
||||
var hasErrors = false
|
||||
for (diagnostic in diagnostics.sortedWith(DiagnosticComparator)) {
|
||||
hasErrors = reportDiagnostic(diagnostic, reporter) || hasErrors
|
||||
hasErrors = reportDiagnostic(diagnostic, reporter, renderDiagnosticName) || hasErrors
|
||||
}
|
||||
reportSpecialErrors(diagnostics)
|
||||
return hasErrors
|
||||
}
|
||||
|
||||
fun reportToMessageCollector(diagnosticsCollector: BaseDiagnosticsCollector, messageCollector: MessageCollector): Boolean {
|
||||
fun reportToMessageCollector(
|
||||
diagnosticsCollector: BaseDiagnosticsCollector,
|
||||
messageCollector: MessageCollector,
|
||||
renderDiagnosticName: Boolean
|
||||
): Boolean {
|
||||
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
|
||||
diagnostic.location()?.let {
|
||||
reportDiagnosticToMessageCollector(diagnostic, it, reporter)
|
||||
reportDiagnosticToMessageCollector(diagnostic, it, reporter, renderDiagnosticName)
|
||||
}
|
||||
return diagnostic.severity == Severity.ERROR
|
||||
}
|
||||
@@ -96,11 +101,19 @@ object FirDiagnosticsCompilerResultsReporter {
|
||||
private fun reportDiagnosticToMessageCollector(
|
||||
diagnostic: KtDiagnostic,
|
||||
location: CompilerMessageSourceLocation,
|
||||
reporter: MessageCollector
|
||||
reporter: MessageCollector,
|
||||
renderDiagnosticName: Boolean
|
||||
) {
|
||||
val severity = AnalyzerWithCompilerReport.convertSeverity(diagnostic.severity)
|
||||
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(
|
||||
|
||||
+4
-2
@@ -130,12 +130,14 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
|
||||
if (!checkKotlinPackageUsage(moduleConfiguration, allSources)) return null
|
||||
|
||||
val renderDiagnosticNames = moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
|
||||
val diagnosticsReporter = DiagnosticReporterFactory.createReporter()
|
||||
val firResult = runFrontend(allSources, diagnosticsReporter).also {
|
||||
performanceManager?.notifyAnalysisFinished()
|
||||
}
|
||||
if (firResult == null) {
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -155,7 +157,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
diagnosticsReporter
|
||||
)
|
||||
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
|
||||
|
||||
performanceManager?.notifyIRGenerationFinished()
|
||||
performanceManager?.notifyGenerationFinished()
|
||||
|
||||
+5
-1
@@ -403,7 +403,11 @@ object KotlinToJVMBytecodeCompiler {
|
||||
messageCollector,
|
||||
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
|
||||
diagnosticsReporter,
|
||||
messageCollector,
|
||||
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
)
|
||||
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
return state
|
||||
|
||||
+5
-1
@@ -256,6 +256,10 @@ private fun generate(
|
||||
diagnosticsReporter
|
||||
).build().also {
|
||||
KotlinCodegenFacade.compileCorrectFiles(it)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
|
||||
diagnosticsReporter,
|
||||
messageCollector,
|
||||
kotlinCompilerConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user