diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index c1cada31e84..44e45788057 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -68,6 +68,7 @@ import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PRO import org.jetbrains.kotlin.cli.common.config.ContentRoot import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING @@ -429,7 +430,7 @@ class KotlinCoreEnvironment private constructor( internal fun report(severity: CompilerMessageSeverity, message: String) = report(configuration, severity, message) companion object { - internal val LOG = Logger.getInstance(KotlinCoreEnvironment::class.java) + private val LOG = Logger.getInstance(KotlinCoreEnvironment::class.java) private val APPLICATION_LOCK = Object() private var ourApplicationEnvironment: JavaCoreApplicationEnvironment? = null @@ -479,14 +480,20 @@ class KotlinCoreEnvironment private constructor( // used in the daemon for jar cache cleanup val applicationEnvironment: JavaCoreApplicationEnvironment? get() = ourApplicationEnvironment - internal fun report(configuration: CompilerConfiguration, severity: CompilerMessageSeverity, message: String) { - configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(severity, message) + internal fun report( + configuration: CompilerConfiguration, + severity: CompilerMessageSeverity, + message: String, + location: CompilerMessageLocation? = null + ) { + configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(severity, message, location) } internal fun createSourceFilesFromSourceRoots( configuration: CompilerConfiguration, project: Project, - sourceRoots: List + sourceRoots: List, + reportLocation: CompilerMessageLocation? = null ): MutableList { val localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL) val psiManager = PsiManager.getInstance(project) @@ -506,12 +513,12 @@ class KotlinCoreEnvironment private constructor( KotlinCoreEnvironment.LOG.warn("$message\n\nbuild file path: $buildFilePath\ncontent:\n${buildFilePath.readText()}") } - report(configuration, ERROR, message) + report(configuration, ERROR, message, reportLocation) continue } if (!vFile.isDirectory && vFile.fileType != KotlinFileType.INSTANCE) { - report(configuration, ERROR, "Source entry is not a Kotlin file: $sourceRootPath") + report(configuration, ERROR, "Source entry is not a Kotlin file: $sourceRootPath", reportLocation) continue } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ScriptsCompilationDependencies.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ScriptsCompilationDependencies.kt index 9c8f5133710..43134535df1 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ScriptsCompilationDependencies.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ScriptsCompilationDependencies.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler import com.intellij.openapi.project.Project import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.script.ScriptDependenciesProvider @@ -46,7 +47,11 @@ fun collectScriptsCompilationDependencies( KotlinSourceRoot(it.path, false) } val sourceDependencies = - KotlinCoreEnvironment.createSourceFilesFromSourceRoots(configuration, project, sourceDependenciesRoots) + KotlinCoreEnvironment.createSourceFilesFromSourceRoots( + configuration, project, sourceDependenciesRoots, + // TODO: consider receiving and using precise location from the resolver in the future + source.virtualFile?.path?.let { CompilerMessageLocation.create(it) } + ) if (sourceDependencies.isNotEmpty()) { collectedSourceDependencies.add(ScriptsCompilationDependencies.SourceDependencies(source, sourceDependencies)) diff --git a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt index 5fa1b37fe91..c816773b359 100644 --- a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt +++ b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt @@ -52,7 +52,14 @@ fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinementContex } val diagnostics = arrayListOf() fun report(severity: ScriptDependenciesResolver.ReportSeverity, message: String, position: ScriptContents.Position?) { - diagnostics.add(ScriptDiagnostic(message, mapLegacyDiagnosticSeverity(severity), mapLegacyScriptPosition(position))) + diagnostics.add( + ScriptDiagnostic( + message, + mapLegacyDiagnosticSeverity(severity), + context.script.locationId, + mapLegacyScriptPosition(position) + ) + ) } return try { val newDepsFromResolver = resolver.resolve(scriptContents, emptyMap(), ::report, null).get() @@ -63,7 +70,7 @@ fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinementContex dependencies.append(JvmDependency(resolvedClasspath)) }.asSuccess(diagnostics) } catch (e: Throwable) { - ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics()) + ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics(path = context.script.locationId)) } } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt index f00d7aae3bb..1418c28f8e3 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt @@ -17,6 +17,7 @@ package kotlin.script.experimental.api data class ScriptDiagnostic( val message: String, val severity: Severity = Severity.ERROR, + val sourcePath: String? = null, val location: SourceCode.Location? = null, val exception: Throwable? = null ) { @@ -92,21 +93,25 @@ fun R.asSuccess(reports: List = listOf()): ResultWithDiagn ResultWithDiagnostics.Success(this, reports) /** - * Converts the receiver Throwable to the Failure results wrapper with optional [message] and [location] + * Converts the receiver Throwable to the Failure results wrapper with optional [customMessage], [path] and [location] */ -fun Throwable.asDiagnostics(customMessage: String? = null, location: SourceCode.Location? = null): ScriptDiagnostic = - ScriptDiagnostic(customMessage ?: message ?: "$this", ScriptDiagnostic.Severity.ERROR, location, this) +fun Throwable.asDiagnostics( + customMessage: String? = null, + path: String? = null, + location: SourceCode.Location? = null +): ScriptDiagnostic = + ScriptDiagnostic(customMessage ?: message ?: "$this", ScriptDiagnostic.Severity.ERROR, path, location, this) /** - * Converts the receiver String to error diagnostic report with optional [location] + * Converts the receiver String to error diagnostic report with optional [path] and [location] */ -fun String.asErrorDiagnostics(location: SourceCode.Location? = null): ScriptDiagnostic = - ScriptDiagnostic(this, ScriptDiagnostic.Severity.ERROR, location) +fun String.asErrorDiagnostics(path: String? = null, location: SourceCode.Location? = null): ScriptDiagnostic = + ScriptDiagnostic(this, ScriptDiagnostic.Severity.ERROR, path, location) /** * Extracts the result value from the receiver wrapper or null if receiver represents a Failure */ -fun ResultWithDiagnostics.resultOrNull(): R? = when (this) { +fun ResultWithDiagnostics.resultOrNull(): R? = when (this) { is ResultWithDiagnostics.Success -> value else -> null } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt index 4631725b702..5d737a9a487 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt @@ -222,6 +222,12 @@ interface ScriptCompiler { */ interface CompiledScript { + /** + * The location identifier for the script source, taken from SourceCode.locationId + */ + val sourceLocationId: String? + get() = null + /** * The compilation configuration used for script compilation */ diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt index c4c00e7e93e..2ee830a2773 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt @@ -20,6 +20,16 @@ interface SourceCode { */ val text: String + /** + * The script file or display name + */ + val name: String? + + /** + * The path or other script location identifier + */ + val locationId: String? + /** * The source code position * @param line source code position line diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt index b370594467f..277e740a3a4 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt @@ -45,6 +45,8 @@ fun getMergedScriptText(script: SourceCode, configuration: ScriptCompilationConf open class FileScriptSource(val file: File, private val preloadedText: String? = null) : ExternalSourceCode { override val externalLocation: URL get() = file.toURI().toURL() override val text: String by lazy { preloadedText ?: file.readText() } + override val name: String? get() = file.name + override val locationId: String? get() = file.path } /** @@ -52,6 +54,8 @@ open class FileScriptSource(val file: File, private val preloadedText: String? = */ open class UrlScriptSource(override val externalLocation: URL) : ExternalSourceCode { override val text: String by lazy { externalLocation.readText() } + override val name: String? get() = externalLocation.file + override val locationId: String? get() = externalLocation.toString() } /** @@ -63,7 +67,11 @@ fun File.toScriptSource(): SourceCode = FileScriptSource(this) * The implementation of the ScriptSource for a script in a String */ open class StringScriptSource(val source: String) : SourceCode { + override val text: String get() = source + + override val name: String? = null + override val locationId: String? = null } /** diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompiledScript.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompiledScript.kt index a233cf8356c..d0041f3fbe4 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompiledScript.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompiledScript.kt @@ -31,22 +31,33 @@ class KJvmCompiledModule( } class KJvmCompiledScript( + sourceLocationId: String?, compilationConfiguration: ScriptCompilationConfiguration, private var scriptClassFQName: String, - override val otherScripts: List> = emptyList(), + otherScripts: List> = emptyList(), private var compiledModule: KJvmCompiledModule? = null ) : CompiledScript, Serializable { + private var _sourceLocationId: String? = sourceLocationId + + override val sourceLocationId: String? + get() = _sourceLocationId + private var _compilationConfiguration: ScriptCompilationConfiguration? = compilationConfiguration override val compilationConfiguration: ScriptCompilationConfiguration get() = _compilationConfiguration!! + private var _otherScripts: List> = otherScripts + + override val otherScripts: List> + get() = _otherScripts + override suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?): ResultWithDiagnostics> = try { val classLoader = scriptEvaluationConfiguration?.get(JvmScriptEvaluationConfiguration.actualClassLoader) ?: run { if (compiledModule == null) - return ResultWithDiagnostics.Failure("Unable to load class $scriptClassFQName: no compiled module is provided".asErrorDiagnostics()) + return ResultWithDiagnostics.Failure("Unable to load class $scriptClassFQName: no compiled module is provided".asErrorDiagnostics(path = sourceLocationId)) val baseClassLoader = scriptEvaluationConfiguration?.get(JvmScriptEvaluationConfiguration.baseClassLoader) ?: Thread.currentThread().contextClassLoader val dependencies = compilationConfiguration[ScriptCompilationConfiguration.dependencies] @@ -64,6 +75,7 @@ class KJvmCompiledScript( ResultWithDiagnostics.Failure( ScriptDiagnostic( "Unable to instantiate class $scriptClassFQName", + sourcePath = sourceLocationId, exception = e ) ) @@ -77,18 +89,23 @@ class KJvmCompiledScript( } private fun writeObject(outputStream: ObjectOutputStream) { + outputStream.writeObject(sourceLocationId) + outputStream.writeObject(otherScripts) outputStream.writeObject(compiledModule) outputStream.writeObject(scriptClassFQName) } + @Suppress("UNCHECKED_CAST") private fun readObject(inputStream: ObjectInputStream) { _compilationConfiguration = null + _sourceLocationId = inputStream.readObject() as String? + _otherScripts = inputStream.readObject() as List> compiledModule = inputStream.readObject() as KJvmCompiledModule scriptClassFQName = inputStream.readObject() as String } companion object { @JvmStatic - private val serialVersionUID = 0L + private val serialVersionUID = 1L } } \ No newline at end of file diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompilerImpl.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompilerImpl.kt index 42ae6cc7821..e60a0168cfb 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompilerImpl.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJvmCompilerImpl.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.NameUtils -import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.script.KotlinScriptDefinition @@ -65,6 +64,12 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm fun failure(vararg diagnostics: ScriptDiagnostic): ResultWithDiagnostics.Failure = ResultWithDiagnostics.Failure(*messageCollector.diagnostics.toTypedArray(), *diagnostics) + fun failure(message: String): ResultWithDiagnostics.Failure = + ResultWithDiagnostics.Failure( + *messageCollector.diagnostics.toTypedArray(), + message.asErrorDiagnostics(path = script.locationId) + ) + try { setIdeaIoUseFallback() @@ -130,19 +135,19 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm val psiFileFactory: PsiFileFactoryImpl = PsiFileFactory.getInstance(environment.project) as PsiFileFactoryImpl val scriptText = getMergedScriptText(script, updatedConfiguration) - val scriptFileName = "script" // TODO: extract from file/url if available + val scriptFileName = script.name ?: "script.${updatedConfiguration[ScriptCompilationConfiguration.fileExtension]}" val virtualFile = LightVirtualFile( - "$scriptFileName${KotlinParserDefinition.STD_SCRIPT_EXT}", + scriptFileName, KotlinLanguage.INSTANCE, StringUtil.convertLineSeparators(scriptText) ).apply { charset = CharsetToolkit.UTF8_CHARSET } val psiFile: KtFile = psiFileFactory.trySetupPsiForFile(virtualFile, KotlinLanguage.INSTANCE, true, false) as KtFile? - ?: return failure("Unable to make PSI file from script".asErrorDiagnostics()) + ?: return failure("Unable to make PSI file from script") val ktScript = psiFile.declarations.firstIsInstanceOrNull() - ?: return failure("Not a script file".asErrorDiagnostics()) + ?: return failure("Not a script file") val sourceFiles = arrayListOf(psiFile) val (classpath, newSources, sourceDependencies) = @@ -162,7 +167,7 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm } val analysisResult = analyzerWithCompilerReport.analysisResult - if (!analysisResult.shouldGenerateCode) return failure("no code to generate".asErrorDiagnostics()) + if (!analysisResult.shouldGenerateCode) return failure("no code to generate") if (analysisResult.isError() || messageCollector.hasErrors()) return failure() val generationState = GenerationState.Builder( @@ -189,7 +194,9 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm val otherScripts: List> = sourceDependencies.find { it.scriptFile == containingKtFile }?.sourceDependencies?.mapNotNull { sourceFile -> sourceFile.declarations.firstIsInstanceOrNull()?.let { - KJvmCompiledScript(updatedConfiguration, it.fqName.asString(), makeOtherScripts(it)) + KJvmCompiledScript( + containingKtFile.virtualFile?.path, updatedConfiguration, it.fqName.asString(), makeOtherScripts(it) + ) } } ?: emptyList() @@ -198,6 +205,7 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm } val compiledScript = KJvmCompiledScript( + script.locationId, updatedConfiguration, ktScript.fqName.asString(), makeOtherScripts(ktScript), @@ -206,7 +214,7 @@ class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvm return ResultWithDiagnostics.Success(compiledScript, messageCollector.diagnostics) } catch (ex: Throwable) { - return failure(ex.asDiagnostics()) + return failure(ex.asDiagnostics(path = script.locationId)) } } } @@ -237,9 +245,10 @@ internal class ScriptDiagnosticsMessageCollector : MessageCollector { } if (mappedSeverity != null) { val mappedLocation = location?.let { - SourceCode.Location(SourceCode.Position(it.line, it.column)) + if (it.line < 0 && it.column < 0) null // special location created by CompilerMessageLocation.create + else SourceCode.Location(SourceCode.Position(it.line, it.column)) } - _diagnostics.add(ScriptDiagnostic(message, mappedSeverity, mappedLocation)) + _diagnostics.add(ScriptDiagnostic(message, mappedSeverity, location?.path, mappedLocation)) } } } diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt index c7d1b4fa1a8..4703212e559 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptEvaluation.kt @@ -92,6 +92,6 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator { } } } catch (e: Throwable) { - ResultWithDiagnostics.Failure(e.asDiagnostics("Error evaluating script")) + ResultWithDiagnostics.Failure(e.asDiagnostics("Error evaluating script", path = compiledScript.sourceLocationId)) } } diff --git a/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt index 61483d12d81..5ea31e4b05f 100644 --- a/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt +++ b/libraries/scripting/jvm-host/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt @@ -75,6 +75,25 @@ class ScriptingHostTest : TestCase() { Assert.assertEquals(greeting, output) } + @Test + fun testImportError() { + val script = "println(\"Hello from imported \$helloScriptName script!\")" + val compilationConfiguration = createJvmCompilationConfigurationFromTemplate { + refineConfiguration { + beforeCompiling { ctx -> + ScriptCompilationConfiguration(ctx.compilationConfiguration) { + importScripts(File(TEST_DATA_DIR, "missing_script.kts").toScriptSource()) + }.asSuccess() + } + } + } + val res = BasicJvmScriptingHost().eval(script.toScriptSource(), compilationConfiguration, null) + assertTrue(res is ResultWithDiagnostics.Failure) + val report = res.reports.find { it.message.startsWith("Source file or directory not found") } + assertNotNull(report) + assertEquals("/script.kts", report?.sourcePath) + } + @Test fun testMemoryCache() { diff --git a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt index 20b1b1c3764..ccd570eb1d2 100644 --- a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt +++ b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt @@ -72,6 +72,6 @@ public class KotlinVersion(val major: Int, val minor: Int, val patch: Int) : Com * Returns the current version of the Kotlin standard library. */ @kotlin.jvm.JvmField - public val CURRENT: KotlinVersion = KotlinVersion(1, 3, 0) // value is written here automatically during build + public val CURRENT: KotlinVersion = KotlinVersion(1, 3, 115) // value is written here automatically during build } } diff --git a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt index fd4dab1f77a..524724d7f32 100644 --- a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt @@ -50,7 +50,14 @@ class MainKtsConfigurator : RefineScriptCompilationConfigurationHandler { } val diagnostics = arrayListOf() fun report(severity: ScriptDependenciesResolver.ReportSeverity, message: String, position: ScriptContents.Position?) { - diagnostics.add(ScriptDiagnostic(message, mapLegacyDiagnosticSeverity(severity), mapLegacyScriptPosition(position))) + diagnostics.add( + ScriptDiagnostic( + message, + mapLegacyDiagnosticSeverity(severity), + context.script.locationId, + mapLegacyScriptPosition(position) + ) + ) } return try { val newDepsFromResolver = resolver.resolve(scriptContents, emptyMap(), ::report, null).get() @@ -62,7 +69,7 @@ class MainKtsConfigurator : RefineScriptCompilationConfigurationHandler { dependencies.append(JvmDependency(resolvedClasspath)) }.asSuccess(diagnostics) } catch (e: Throwable) { - ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics()) + ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics(path = context.script.locationId)) } } }