aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2012-02-18 10:21:33 +0200
committerPekka Enberg <penberg@kernel.org>2012-02-18 10:22:23 +0200
commit8736a3382e051054486dc474408755ab23a4eb9b (patch)
tree546bcf85e4702280d78a894dbde99b26813a813c
parent9a061b4a7ed1e59374e4aa75f57d44073b1c9e29 (diff)
downloadjato-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.c2
-rw-r--r--test/functional/test/java/lang/reflect/FieldTest.java22
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();
}
}