diff --git a/classpath/java/lang/reflect/Field.java b/classpath/java/lang/reflect/Field.java index 19df851027..36cbe8482a 100644 --- a/classpath/java/lang/reflect/Field.java +++ b/classpath/java/lang/reflect/Field.java @@ -53,7 +53,8 @@ public class Field extends AccessibleObject { } public Class getType() { - return Class.forCanonicalName(new String(spec, 0, spec.length - 1, false)); + return Class.forCanonicalName(class_.getClassLoader(), + new String(spec, 0, spec.length - 1, false)); } public Object get(Object instance) throws IllegalAccessException { diff --git a/classpath/java/lang/reflect/Method.java b/classpath/java/lang/reflect/Method.java index 6045f1a283..f15d4d4c73 100644 --- a/classpath/java/lang/reflect/Method.java +++ b/classpath/java/lang/reflect/Method.java @@ -85,11 +85,13 @@ public class Method extends AccessibleObject types[index++] = Class.forName(name); } else { String name = spec.substring(start, i + 1); - types[index++] = Class.forCanonicalName(name); + types[index++] = Class.forCanonicalName + (class_.getClassLoader(), name); } } else { String name = spec.substring(i, i + 1); - types[index++] = Class.forCanonicalName(name); + types[index++] = Class.forCanonicalName + (class_.getClassLoader(), name); } } } catch (ClassNotFoundException e) { @@ -107,6 +109,13 @@ public class Method extends AccessibleObject instance = null; } + if (arguments == null) { + if (parameterCount > 0) { + throw new NullPointerException(); + } + arguments = new Object[0]; + } + if (arguments.length == parameterCount) { return invoke(this, instance, arguments); } else { @@ -125,7 +134,8 @@ public class Method extends AccessibleObject for (int i = 0; i < spec.length - 1; ++i) { if (spec[i] == ')') { return Class.forCanonicalName - (new String(spec, i + 1, spec.length - i - 2, false)); + (class_.getClassLoader(), + new String(spec, i + 1, spec.length - i - 2, false)); } } throw new RuntimeException();