diff --git a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt index 34154dbac76..f8dc0170dcc 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt @@ -245,9 +245,7 @@ class LauncherScriptTest : TestCaseWithTmpdir() { runProcess( "kotlin", "-no-stdlib", "-e", "println(42)", expectedExitCode = 1, - expectedStderr = """error: unresolved reference: println (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) -script.kts:1:1: error: unresolved reference: println + expectedStderr = """script.kts:1:1: error: unresolved reference: println 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. @@ -300,8 +298,7 @@ println(42) ) runProcess( "kotlin", "-Xallow-any-scripts-in-source-roots", "-howtorun", ".kts", "$testDataDirectory/noInline.myscript", - expectedExitCode = 1, expectedStderr = """error: unresolved reference: CompilerOptions (noInline.myscript:1:7) -compiler/testData/launcher/noInline.myscript:1:7: error: unresolved reference: CompilerOptions + expectedExitCode = 1, expectedStderr = """compiler/testData/launcher/noInline.myscript:1:7: error: unresolved reference: CompilerOptions @file:CompilerOptions("-Xno-inline") ^ """ diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/AbstractScriptEvaluationExtension.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/AbstractScriptEvaluationExtension.kt index 2c64a3c50ad..640b985f377 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/AbstractScriptEvaluationExtension.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/AbstractScriptEvaluationExtension.kt @@ -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 } diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt index 9199bbf227d..c5a38b70595 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt @@ -61,9 +61,8 @@ class ScriptJvmCompilerFromEnvironment(val environment: KotlinCoreEnvironment) : override fun compile( script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration - ): ResultWithDiagnostics { - val parentMessageCollector = environment.configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY] - return withMessageCollector(script = script, parentMessageCollector = parentMessageCollector) { messageCollector -> + ): ResultWithDiagnostics = + 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(