NewObjectValue simply carries a type, the actual object will be created later
This commit is contained in:
@@ -66,7 +66,7 @@ class LongValue(value: Long): AbstractValue<Long>(value, Type.LONG_TYPE)
|
|||||||
class FloatValue(value: Float): AbstractValue<Float>(value, Type.FLOAT_TYPE)
|
class FloatValue(value: Float): AbstractValue<Float>(value, Type.FLOAT_TYPE)
|
||||||
class DoubleValue(value: Double): AbstractValue<Double>(value, Type.DOUBLE_TYPE)
|
class DoubleValue(value: Double): AbstractValue<Double>(value, Type.DOUBLE_TYPE)
|
||||||
class ObjectValue(value: Any?, asmType: Type): AbstractValue<Any?>(value, asmType)
|
class ObjectValue(value: Any?, asmType: Type): AbstractValue<Any?>(value, asmType)
|
||||||
class NewObjectValue(val _class: Class<*>, asmType: Type): AbstractValueBase<Any?>(asmType) {
|
class NewObjectValue(asmType: Type): AbstractValueBase<Any?>(asmType) {
|
||||||
override var value: Any? = null
|
override var value: Any? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ object REFLECTION_EVAL : Eval {
|
|||||||
override fun loadString(str: String): Value = ObjectValue(str, Type.getType(javaClass<String>()))
|
override fun loadString(str: String): Value = ObjectValue(str, Type.getType(javaClass<String>()))
|
||||||
|
|
||||||
override fun newInstance(classType: Type): Value {
|
override fun newInstance(classType: Type): Value {
|
||||||
val _class = findClass(classType)
|
return NewObjectValue(classType)
|
||||||
return NewObjectValue(_class, classType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isInstanceOf(value: Value, targetType: Type): Boolean {
|
override fun isInstanceOf(value: Value, targetType: Type): Boolean {
|
||||||
@@ -298,7 +297,7 @@ object REFLECTION_EVAL : Eval {
|
|||||||
if (methodDesc.name == "<init>") {
|
if (methodDesc.name == "<init>") {
|
||||||
// Constructor call
|
// Constructor call
|
||||||
[suppress("UNCHECKED_CAST")]
|
[suppress("UNCHECKED_CAST")]
|
||||||
val _class = (instance as NewObjectValue)._class as Class<Any>
|
val _class = findClass((instance as NewObjectValue).asmType)
|
||||||
val ctor = _class.findConstructor(methodDesc)
|
val ctor = _class.findConstructor(methodDesc)
|
||||||
assertNotNull("Constructor not found: $methodDesc", ctor)
|
assertNotNull("Constructor not found: $methodDesc", ctor)
|
||||||
val args = arguments.map { v -> v.obj }.copyToArray()
|
val args = arguments.map { v -> v.obj }.copyToArray()
|
||||||
|
|||||||
Reference in New Issue
Block a user