[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.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(
|
||||||
|
|||||||
+4
-2
@@ -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()
|
||||||
|
|||||||
+5
-1
@@ -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
|
||||||
|
|||||||
+5
-1
@@ -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)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user