minor: avoid double reporting of scripting diagnostics

also fix arror reporting for scripts with location
This commit is contained in:
Ilya Chernikov
2022-05-31 14:56:15 +02:00
committed by teamcity
parent 855059b93c
commit f5950ac8f3
3 changed files with 22 additions and 12 deletions
@@ -245,9 +245,7 @@ class LauncherScriptTest : TestCaseWithTmpdir() {
runProcess( runProcess(
"kotlin", "-no-stdlib", "-e", "println(42)", "kotlin", "-no-stdlib", "-e", "println(42)",
expectedExitCode = 1, expectedExitCode = 1,
expectedStderr = """error: unresolved reference: println (script.kts:1:1) expectedStderr = """script.kts:1:1: error: unresolved reference: println
error: no script runtime was found in the classpath: class 'kotlin.script.templates.standard.ScriptTemplateWithArgs' not found. Please add kotlin-script-runtime.jar to the module dependencies. (script.kts:1:1)
script.kts:1:1: error: unresolved reference: println
println(42) println(42)
^ ^
script.kts:1:1: error: no script runtime was found in the classpath: class 'kotlin.script.templates.standard.ScriptTemplateWithArgs' not found. Please add kotlin-script-runtime.jar to the module dependencies. script.kts:1:1: error: no script runtime was found in the classpath: class 'kotlin.script.templates.standard.ScriptTemplateWithArgs' not found. Please add kotlin-script-runtime.jar to the module dependencies.
@@ -300,8 +298,7 @@ println(42)
) )
runProcess( runProcess(
"kotlin", "-Xallow-any-scripts-in-source-roots", "-howtorun", ".kts", "$testDataDirectory/noInline.myscript", "kotlin", "-Xallow-any-scripts-in-source-roots", "-howtorun", ".kts", "$testDataDirectory/noInline.myscript",
expectedExitCode = 1, expectedStderr = """error: unresolved reference: CompilerOptions (noInline.myscript:1:7) expectedExitCode = 1, expectedStderr = """compiler/testData/launcher/noInline.myscript:1:7: error: unresolved reference: CompilerOptions
compiler/testData/launcher/noInline.myscript:1:7: error: unresolved reference: CompilerOptions
@file:CompilerOptions("-Xno-inline") @file:CompilerOptions("-Xno-inline")
^ ^
""" """
@@ -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.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.extensions.ScriptEvaluationExtension 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.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -133,8 +134,21 @@ abstract class AbstractScriptEvaluationExtension : ScriptEvaluationExtension {
@Suppress("DEPRECATION_ERROR") @Suppress("DEPRECATION_ERROR")
return internalScriptingRunSuspend { return internalScriptingRunSuspend {
val compiledScript = scriptCompiler.compile(script, scriptCompilationConfiguration).valueOr { val compiledScript = scriptCompiler.compile(script, scriptCompilationConfiguration).valueOr {
val lines = if (it.reports.isEmpty()) null else script.text.lines()
for (report in it.reports) { 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 return@internalScriptingRunSuspend ExitCode.COMPILATION_ERROR
} }
@@ -61,9 +61,8 @@ class ScriptJvmCompilerFromEnvironment(val environment: KotlinCoreEnvironment) :
override fun compile( override fun compile(
script: SourceCode, script: SourceCode,
scriptCompilationConfiguration: ScriptCompilationConfiguration scriptCompilationConfiguration: ScriptCompilationConfiguration
): ResultWithDiagnostics<CompiledScript> { ): ResultWithDiagnostics<CompiledScript> =
val parentMessageCollector = environment.configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY] withMessageCollector(script = script) { messageCollector ->
return withMessageCollector(script = script, parentMessageCollector = parentMessageCollector) { messageCollector ->
withScriptCompilationCache(script, scriptCompilationConfiguration, messageCollector) { withScriptCompilationCache(script, scriptCompilationConfiguration, messageCollector) {
val initialConfiguration = scriptCompilationConfiguration.refineBeforeParsing(script).valueOr { val initialConfiguration = scriptCompilationConfiguration.refineBeforeParsing(script).valueOr {
@@ -72,17 +71,17 @@ class ScriptJvmCompilerFromEnvironment(val environment: KotlinCoreEnvironment) :
val context = createCompilationContextFromEnvironment(initialConfiguration, environment, messageCollector) val context = createCompilationContextFromEnvironment(initialConfiguration, environment, messageCollector)
val previousMessageCollector = environment.configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]
try { try {
environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
compileImpl(script, context, initialConfiguration, messageCollector) compileImpl(script, context, initialConfiguration, messageCollector)
} finally { } finally {
if (parentMessageCollector != null) if (previousMessageCollector != null)
environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, parentMessageCollector) environment.configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, previousMessageCollector)
} }
} }
} }
}
} }
private fun withScriptCompilationCache( private fun withScriptCompilationCache(