diff options
author | 2012-03-30 17:24:47 -0700 | |
---|---|---|
committer | 2012-03-30 17:24:47 -0700 | |
commit | c1503430c715f9d71cf4297a186a9a3442f5b9ee (patch) | |
tree | 2835f926b366f23c09d0e09a12df62c77b2c3e8b | |
parent | 8d524a1bd3cbbe701572b232cf2e690835c95346 (diff) |
Remove the native Class.isInstance, and add tests.
Change-Id: I5e669b71e11a6b794e3434e0406d891edd3fe59d
-rw-r--r-- | src/java_lang_Class.cc | 10 | ||||
-rw-r--r-- | test/031-class-attributes/src/ClassAttrs.java | 75 |
2 files changed, 75 insertions, 10 deletions
diff --git a/src/java_lang_Class.cc b/src/java_lang_Class.cc index d16524b09e..20af47a594 100644 --- a/src/java_lang_Class.cc +++ b/src/java_lang_Class.cc @@ -365,15 +365,6 @@ static jboolean Class_isAssignableFrom(JNIEnv* env, jobject javaLhs, jclass java return lhs->IsAssignableFrom(rhs) ? JNI_TRUE : JNI_FALSE; } -static jboolean Class_isInstance(JNIEnv* env, jobject javaClass, jobject javaObject) { - Class* c = DecodeClass(env, javaClass); - Object* o = Decode<Object*>(env, javaObject); - if (o == NULL) { - return JNI_FALSE; - } - return o->InstanceOf(c) ? JNI_TRUE : JNI_FALSE; -} - // Validate method/field access. static bool CheckMemberAccess(const Class* access_from, Class* access_to, uint32_t member_flags) { // quick accept for public access */ @@ -478,7 +469,6 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(Class, getNameNative, "()Ljava/lang/String;"), NATIVE_METHOD(Class, getProxyInterfaces, "()[Ljava/lang/Class;"), NATIVE_METHOD(Class, isAssignableFrom, "(Ljava/lang/Class;)Z"), - NATIVE_METHOD(Class, isInstance, "(Ljava/lang/Object;)Z"), NATIVE_METHOD(Class, newInstanceImpl, "()Ljava/lang/Object;"), }; diff --git a/test/031-class-attributes/src/ClassAttrs.java b/test/031-class-attributes/src/ClassAttrs.java index c3c61bfaed..8719e3bd06 100644 --- a/test/031-class-attributes/src/ClassAttrs.java +++ b/test/031-class-attributes/src/ClassAttrs.java @@ -70,6 +70,81 @@ public class ClassAttrs { System.err.println("FAILED: " + re); re.printStackTrace(); } + + test_isAssignableFrom(); + test_isInstance(); + } + + private static void test_isAssignableFrom() { + // Can always assign to things of the same type. + assertTrue(String.class.isAssignableFrom(String.class)); + + // Can assign any reference to java.lang.Object. + assertTrue(Object.class.isAssignableFrom(Object.class)); + assertTrue(Object.class.isAssignableFrom(Class.class)); + assertTrue(Object.class.isAssignableFrom(String.class)); + assertFalse(Object.class.isAssignableFrom(int.class)); + assertFalse(Object.class.isAssignableFrom(long.class)); + + // Interfaces. + assertTrue(CharSequence.class.isAssignableFrom(String.class)); + assertFalse(CharSequence.class.isAssignableFrom(Object.class)); + + // Superclasses. + assertTrue(AccessibleObject.class.isAssignableFrom(Method.class)); + assertFalse(Method.class.isAssignableFrom(AccessibleObject.class)); + + // Arrays. + assertTrue(int[].class.isAssignableFrom(int[].class)); + assertFalse(int[].class.isAssignableFrom(char[].class)); + assertFalse(char[].class.isAssignableFrom(int[].class)); + assertTrue(Object.class.isAssignableFrom(int[].class)); + assertFalse(int[].class.isAssignableFrom(Object.class)); + + try { + assertFalse(Object.class.isAssignableFrom(null)); + fail(); + } catch (NullPointerException expected) { + } + } + + private static void test_isInstance() { + // Can always assign to things of the same type. + assertTrue(String.class.isInstance("hello")); + + // Can assign any reference to java.lang.Object. + assertTrue(Object.class.isInstance(new Object())); + assertTrue(Object.class.isInstance(Class.class)); + assertTrue(Object.class.isInstance("hello")); + + // Interfaces. + assertTrue(CharSequence.class.isInstance("hello")); + assertFalse(CharSequence.class.isInstance(new Object())); + + // Superclasses. + assertTrue(AccessibleObject.class.isInstance(Method.class.getDeclaredMethods()[0])); + assertFalse(Method.class.isInstance(Method.class.getDeclaredFields()[0])); + + // Arrays. + assertTrue(int[].class.isInstance(new int[0])); + assertFalse(int[].class.isInstance(new char[0])); + assertFalse(char[].class.isInstance(new int[0])); + assertTrue(Object.class.isInstance(new int[0])); + assertFalse(int[].class.isInstance(new Object())); + + assertFalse(Object.class.isInstance(null)); + } + + private static void assertTrue(boolean b) { + if (!b) throw new RuntimeException(); + } + + private static void assertFalse(boolean b) { + if (b) throw new RuntimeException(); + } + + private static void fail() { + throw new RuntimeException(); } /* to call the (out-of-scope) <code>getSignatureAttribute</code> methods */ |