Improve script and REPL result handling:
- implement error result - refactor other result classes - implement handling in the script evaluation extension - also restores previous script error reporting functionality - add possibility to customize result fileds in script and REPL - refactor result calculation in the backend: cleanup, rename (since it is not only about REPL now)
This commit is contained in:
+15
-13
@@ -5,6 +5,7 @@
|
||||
|
||||
package kotlin.script.experimental.jvm
|
||||
|
||||
import java.lang.reflect.InvocationTargetException
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.api.*
|
||||
import kotlin.script.experimental.jvm.impl.getConfigurationWithClassloader
|
||||
@@ -43,13 +44,18 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
|
||||
?.valueOrNull()
|
||||
?: configuration
|
||||
|
||||
val instance =
|
||||
scriptClass.evalWithConfigAndOtherScriptsResults(refinedEvalConfiguration, importedScriptsEvalResults)
|
||||
val resultValue = try {
|
||||
val instance =
|
||||
scriptClass.evalWithConfigAndOtherScriptsResults(refinedEvalConfiguration, importedScriptsEvalResults)
|
||||
|
||||
val resultValue = compiledScript.resultField?.let { (resultFieldName, resultType) ->
|
||||
val resultField = scriptClass.java.getDeclaredField(resultFieldName).apply { isAccessible = true }
|
||||
ResultValue.Value(resultFieldName, resultField.get(instance), resultType.typeName, instance)
|
||||
} ?: ResultValue.Value("", instance, "", instance)
|
||||
compiledScript.resultField?.let { (resultFieldName, resultType) ->
|
||||
val resultField = scriptClass.java.getDeclaredField(resultFieldName).apply { isAccessible = true }
|
||||
ResultValue.Value(resultFieldName, resultField.get(instance), resultType.typeName, instance)
|
||||
} ?: ResultValue.Unit(instance)
|
||||
|
||||
} catch (e: InvocationTargetException) {
|
||||
ResultValue.Error(e.targetException ?: e, e)
|
||||
}
|
||||
|
||||
EvaluationResult(resultValue, refinedEvalConfiguration).let {
|
||||
sharedScripts?.put(scriptClass, it)
|
||||
@@ -59,10 +65,7 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
ResultWithDiagnostics.Failure(
|
||||
e.asDiagnostics(
|
||||
"Error evaluating script",
|
||||
path = compiledScript.sourceLocationId
|
||||
)
|
||||
e.asDiagnostics(path = compiledScript.sourceLocationId)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -89,13 +92,12 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
|
||||
}
|
||||
|
||||
importedScriptsEvalResults.forEach {
|
||||
args.add((it.returnValue as ResultValue.Value).scriptInstance)
|
||||
args.add(it.returnValue.scriptInstance)
|
||||
}
|
||||
|
||||
val ctor = java.constructors.single()
|
||||
val instance = ctor.newInstance(*args.toArray())
|
||||
|
||||
return instance
|
||||
return ctor.newInstance(*args.toArray())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user