diff --git a/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/src/org/jetbrains/eval4j/jdi/jdiEval.kt index 727bf7f5c30..32888995f0a 100644 --- a/src/org/jetbrains/eval4j/jdi/jdiEval.kt +++ b/src/org/jetbrains/eval4j/jdi/jdiEval.kt @@ -124,12 +124,23 @@ class JDIEval( } override fun getField(instance: Value, fieldDesc: FieldDescription): Value { - throw UnsupportedOperationException() + val field = findField(fieldDesc) + val obj = instance.jdiObj.checkNull() + + return obj.getValue(field).asValue() } + override fun setField(instance: Value, fieldDesc: FieldDescription, newValue: Value) { - throw UnsupportedOperationException() + val field = findField(fieldDesc) + val obj = instance.jdiObj.checkNull() + + return obj.setValue(field, newValue.asJdiValue(vm)) } + override fun invokeMethod(instance: Value, methodDesc: MethodDescription, arguments: List, invokespecial: Boolean): Value { - throw UnsupportedOperationException() + val method = findMethod(methodDesc) + + val obj = instance.jdiObj.checkNull() + return obj.invokeMethod(thread, method, arguments.map { v -> v.asJdiValue(vm) }, 0).asValue() } } \ No newline at end of file diff --git a/src/org/jetbrains/eval4j/values.kt b/src/org/jetbrains/eval4j/values.kt index 6eb79c28d9c..ec28d1082c4 100644 --- a/src/org/jetbrains/eval4j/values.kt +++ b/src/org/jetbrains/eval4j/values.kt @@ -99,7 +99,7 @@ val Value.obj: Any? return (this as AbstractValue<*>).value } -fun Any?.checkNull(): Any { +fun T?.checkNull(): T { if (this == null) { throwException(NullPointerException()) }