From 65e6d3b0ff6fcdbb69600800ccbcd1762aad9a17 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 22 Jul 2019 14:11:58 +0200 Subject: [PATCH] [minor] Add a small diagnostics handling utility fun --- .../kotlin/script/experimental/api/errorHandling.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 7156a201531..bb81f1dd00f 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt @@ -10,6 +10,7 @@ package kotlin.script.experimental.api import java.io.ByteArrayOutputStream import java.io.File import java.io.PrintStream +import java.lang.RuntimeException /** * The single script diagnostic report @@ -220,3 +221,14 @@ inline fun ResultWithDiagnostics.valueOr(body: (ResultWithDiagnostics.Fai is ResultWithDiagnostics.Success -> value is ResultWithDiagnostics.Failure -> body(this) } + +/** + * Extracts the result value from the receiver wrapper or throw RuntimeException with diagnostics + */ +fun ResultWithDiagnostics.valueOrThrow(): R = valueOr { + throw RuntimeException( + reports.joinToString("\n") { it.exception?.toString() ?: it.message }, + reports.find { it.exception != null }?.exception + ) +} +