diff options
author | Pekka Enberg <penberg@kernel.org> | 2012-02-18 10:21:33 +0200 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-02-18 10:22:23 +0200 |
commit | 8736a3382e051054486dc474408755ab23a4eb9b (patch) | |
tree | 546bcf85e4702280d78a894dbde99b26813a813c | |
parent | 9a061b4a7ed1e59374e4aa75f57d44073b1c9e29 (diff) | |
download | jato-8736a3382e051054486dc474408755ab23a4eb9b.tar.gz |
runtime: Fix java/lang/reflect/Field.set() for base types
This fix unblocks Maven from starting up.
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r-- | runtime/java_lang_reflect_VMField.c | 2 | ||||
-rw-r--r-- | test/functional/test/java/lang/reflect/FieldTest.java | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/runtime/java_lang_reflect_VMField.c b/runtime/java_lang_reflect_VMField.c index d32667a6..04fba48b 100644 --- a/runtime/java_lang_reflect_VMField.c +++ b/runtime/java_lang_reflect_VMField.c @@ -467,7 +467,7 @@ void java_lang_reflect_VMField_set(struct vm_object *this, struct vm_object *o, return; } - if (o->class != vmf->class) { + if (!vm_object_is_instance_of(o, vmf->class)) { signal_new_exception(vm_java_lang_IllegalArgumentException, NULL); return; } diff --git a/test/functional/test/java/lang/reflect/FieldTest.java b/test/functional/test/java/lang/reflect/FieldTest.java index 6cf546a0..9863df3f 100644 --- a/test/functional/test/java/lang/reflect/FieldTest.java +++ b/test/functional/test/java/lang/reflect/FieldTest.java @@ -107,7 +107,29 @@ public class FieldTest extends TestCase { public @interface Tag2 { } + public static class BaseType { + public Object baseField; + } + + public static class Type extends BaseType { + public Object field; + } + + public static void testSet() throws Exception { + Type t = new Type(); + Field field = t.getClass().getField("field"); + Object o1 = new Object(); + field.set(t, o1); + assertEquals(o1, t.field); + + Field baseField = t.getClass().getField("baseField"); + Object o2 = new Object(); + baseField.set(t, o2); + assertEquals(o2, t.baseField); + } + public static void main(String[] args) throws Exception { testGetAnnotation(); + testSet(); } } |