diff -r 70c062dbd783 -r 62c327a1e23f emul/src/main/java/java/lang/Class.java --- a/emul/src/main/java/java/lang/Class.java Tue Jan 22 11:14:00 2013 +0100 +++ b/emul/src/main/java/java/lang/Class.java Thu Jan 24 17:08:02 2013 +0100 @@ -278,6 +278,10 @@ * @since JDK1.1 */ public boolean isInstance(Object obj) { + if (isArray()) { + return isAssignableFrom(obj.getClass()); + } + String prop = "$instOf_" + getName().replace('.', '_'); return hasProperty(obj, prop); } @@ -312,7 +316,21 @@ * null. * @since JDK1.1 */ - public native boolean isAssignableFrom(Class cls); + public boolean isAssignableFrom(Class cls) { + if (this == cls) { + return true; + } + + if (isArray()) { + final Class cmpType = cls.getComponentType(); + if (isPrimitive()) { + return this == cmpType; + } + return cmpType != null && getComponentType().isAssignableFrom(cmpType); + } + String prop = "$instOf_" + getName().replace('.', '_'); + return hasProperty(cls, prop); + } /**