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 803f04bc395..692d804cd94 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt @@ -138,6 +138,24 @@ operator fun List.plus(result: ResultWithDiagnostics): fun R.asSuccess(reports: List = listOf()): ResultWithDiagnostics.Success = ResultWithDiagnostics.Success(this, reports) +/** + * Makes Failure result with optional diagnostic [reports] + */ +fun makeFailureResult(reports: List): ResultWithDiagnostics.Failure = + ResultWithDiagnostics.Failure(reports) + +/** + * Makes Failure result with optional diagnostic [reports] + */ +fun makeFailureResult(vararg reports: ScriptDiagnostic): ResultWithDiagnostics.Failure = + ResultWithDiagnostics.Failure(reports.asList()) + +/** + * Makes Failure result with diagnostic [message] with optional [path] and [location] + */ +fun makeFailureResult(message: String, path: String? = null, location: SourceCode.Location? = null): ResultWithDiagnostics.Failure = + ResultWithDiagnostics.Failure(message.asErrorDiagnostics(path, location)) + /** * Converts the receiver Throwable to the Failure results wrapper with optional [customMessage], [path] and [location] */ 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 a5603537c90..4d9ee725835 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt @@ -34,6 +34,16 @@ open class ScriptCompilationConfiguration(baseConfigurations: Iterable Unit = {}): ScriptCompilationConfiguration { + val newConfiguration = ScriptCompilationConfiguration(this, body = body) + return if (newConfiguration == this) this + else newConfiguration + } } /** diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt index ce549cf8510..d4e034d793b 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt @@ -39,5 +39,17 @@ fun mapToLegacyScriptReportSeverity(severity: ScriptDiagnostic.Severity): Script fun mapLegacyScriptPosition(pos: ScriptContents.Position?): SourceCode.Location? = pos?.let { SourceCode.Location(SourceCode.Position(pos.line, pos.col)) } +fun mapLegacyScriptPosition(pos: ScriptReport.Position?): SourceCode.Location? = + pos?.let { + val endPos = + if (pos.endLine == null || pos.endColumn == null) null + else SourceCode.Position(pos.endLine!!, pos.endColumn!!) + SourceCode.Location(SourceCode.Position(pos.startLine, pos.startColumn), endPos) + } + fun mapToLegacyScriptReportPosition(pos: SourceCode.Location?): ScriptReport.Position? = pos?.let { ScriptReport.Position(pos.start.line, pos.start.col) } + +fun Iterable.mapToDiagnostics(): List = map { (message, severity, position: ScriptReport.Position?) -> + ScriptDiagnostic(message, mapLegacyDiagnosticSeverity(severity), null, mapLegacyScriptPosition(position)) +}