minor: avoid double reporting of scripting diagnostics
also fix arror reporting for scripts with location
This commit is contained in:
+15
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.cli.common.ExitCode
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.extensions.ScriptEvaluationExtension
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
@@ -133,8 +134,21 @@ abstract class AbstractScriptEvaluationExtension : ScriptEvaluationExtension {
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
return internalScriptingRunSuspend {
|
||||
val compiledScript = scriptCompiler.compile(script, scriptCompilationConfiguration).valueOr {
|
||||
val lines = if (it.reports.isEmpty()) null else script.text.lines()
|
||||
for (report in it.reports) {
|
||||
messageCollector.report(report.severity.toCompilerMessageSeverity(), report.render(withSeverity = false))
|
||||
val location = report.location
|
||||
val sourcePath = report.sourcePath
|
||||
messageCollector.report(
|
||||
report.severity.toCompilerMessageSeverity(),
|
||||
report.render(withSeverity = false, withLocation = location == null || sourcePath == null),
|
||||
if (location != null && sourcePath != null) {
|
||||
CompilerMessageLocation.create(
|
||||
sourcePath,
|
||||
location.start.line, location.start.col,
|
||||
lines?.getOrNull(location.start.line - 1)
|
||||
)
|
||||
} else null
|
||||
)
|
||||
}
|
||||
return@internalScriptingRunSuspend ExitCode.COMPILATION_ERROR
|
||||
}
|
||||
|
||||
+5
-6
@@ -61,9 +61,8 @@ class ScriptJvmCompilerFromEnvironment(val environment: KotlinCoreEnvironment) :
|
||||
override fun compile(
|
||||
script: SourceCode,
|
||||
scriptCompilationConfiguration: ScriptCompilationConfiguration
|
||||
): ResultWithDiagnostics<CompiledScript> {
|
||||
val parentMessageCollector = environment.configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]
|
||||
return withMessageCollector(script = script, parentMessageCollector = parentMessageCollector) { messageCollector ->
|
||||
): ResultWithDiagnostics<CompiledScript> =
|
||||
withMessageCollector(script = script) { messageCollector ->
|
||||
withScriptCompilationCache(script, scriptCompilationConfiguration, messageCollector) {
|
||||
|
||||
val initialConfiguration = scriptCompilationConfiguration.refineBeforeParsing(script).valueOr {
|
||||
@@ -72,17 +71,17 @@ class ScriptJvmCompilerFromEnvironment(val environment: KotlinCoreEnvironment) :
|
||||
|
||||
val context = createCompilationContextFromEnvironment(initialConfiguration, environment, messageCollector)
|
||||
|
||||
val previousMessageCollector = environment.configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]
|
||||
try {
|
||||
environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||
|
||||
compileImpl(script, context, initialConfiguration, messageCollector)
|
||||
} finally {
|
||||
if (parentMessageCollector != null)
|
||||
environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, parentMessageCollector)
|
||||
if (previousMessageCollector != null)
|
||||
environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, previousMessageCollector)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun withScriptCompilationCache(
|
||||
|
||||
Reference in New Issue
Block a user