minor: unwrapping InvocationTargetException on repl line evaluation...
To provide better error diagnostics
This commit is contained in:
+8
-3
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.cli.common.repl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.lang.reflect.InvocationTargetException
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||||
import kotlin.concurrent.write
|
import kotlin.concurrent.write
|
||||||
|
|
||||||
@@ -88,14 +89,18 @@ open class GenericReplEvaluator(val baseClasspath: Iterable<File>,
|
|||||||
if (invokeWrapper != null) invokeWrapper.invoke { scriptInstanceConstructor.newInstance(*constructorArgs) }
|
if (invokeWrapper != null) invokeWrapper.invoke { scriptInstanceConstructor.newInstance(*constructorArgs) }
|
||||||
else scriptInstanceConstructor.newInstance(*constructorArgs)
|
else scriptInstanceConstructor.newInstance(*constructorArgs)
|
||||||
}
|
}
|
||||||
|
catch (e: InvocationTargetException) {
|
||||||
|
// ignore everything in the stack trace until this constructor call
|
||||||
|
return@eval ReplEvalResult.Error.Runtime(renderReplStackTrace(e.cause!!, startFromMethodName = "${scriptClass.name}.<init>"), e.targetException as? Exception)
|
||||||
|
}
|
||||||
catch (e: Throwable) {
|
catch (e: Throwable) {
|
||||||
historyActor.removePlaceholder(compileResult.lineId)
|
|
||||||
|
|
||||||
// ignore everything in the stack trace until this constructor call
|
// ignore everything in the stack trace until this constructor call
|
||||||
return@eval ReplEvalResult.Error.Runtime(renderReplStackTrace(e.cause!!, startFromMethodName = "${scriptClass.name}.<init>"), e as? Exception)
|
return@eval ReplEvalResult.Error.Runtime(renderReplStackTrace(e.cause!!, startFromMethodName = "${scriptClass.name}.<init>"), e as? Exception)
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
historyActor.removePlaceholder(compileResult.lineId)
|
||||||
|
}
|
||||||
|
|
||||||
historyActor.removePlaceholder(compileResult.lineId)
|
|
||||||
historyActor.addFinal(compileResult.lineId, EvalClassWithInstanceAndLoader(scriptClass.kotlin, scriptInstance, classLoader, invokeWrapper))
|
historyActor.addFinal(compileResult.lineId, EvalClassWithInstanceAndLoader(scriptClass.kotlin, scriptInstance, classLoader, invokeWrapper))
|
||||||
|
|
||||||
val resultField = scriptClass.getDeclaredField(SCRIPT_RESULT_FIELD_NAME).apply { isAccessible = true }
|
val resultField = scriptClass.getDeclaredField(SCRIPT_RESULT_FIELD_NAME).apply { isAccessible = true }
|
||||||
|
|||||||
Reference in New Issue
Block a user