Class.isAssignableFrom and Class.isInstance.
Change-Id: I5fd52a80a08cad1ca98f7e13a6cf56add952d8af
diff --git a/src/java_lang_Class.cc b/src/java_lang_Class.cc
index 69ad910..ec0b0ed 100644
--- a/src/java_lang_Class.cc
+++ b/src/java_lang_Class.cc
@@ -198,6 +198,25 @@
return JNI_FALSE;
}
+jboolean Class_isAssignableFrom(JNIEnv* env, jobject javaLhs, jclass javaRhs) {
+ Class* lhs = Decode<Class*>(env, javaLhs);
+ Class* rhs = Decode<Class*>(env, javaRhs);
+ if (rhs == NULL) {
+ Thread::Current()->ThrowNewException("Ljava/lang/NullPointerException;", "class == null");
+ return JNI_FALSE;
+ }
+ return lhs->IsAssignableFrom(rhs) ? JNI_TRUE : JNI_FALSE;
+}
+
+jboolean Class_isInstance(JNIEnv* env, jobject javaClass, jobject javaObject) {
+ Class* c = Decode<Class*>(env, javaClass);
+ Object* o = Decode<Object*>(env, javaObject);
+ if (o == NULL) {
+ return JNI_FALSE;
+ }
+ return Object::InstanceOf(o, c) ? JNI_TRUE : JNI_FALSE;
+}
+
jboolean Class_isInterface(JNIEnv* env, jobject javaThis) {
Class* c = Decode<Class*>(env, javaThis);
return c->IsInterface();
@@ -320,8 +339,8 @@
NATIVE_METHOD(Class, getNameNative, "()Ljava/lang/String;"),
NATIVE_METHOD(Class, getSuperclass, "()Ljava/lang/Class;"),
NATIVE_METHOD(Class, isAnonymousClass, "()Z"),
- //NATIVE_METHOD(Class, isAssignableFrom, "(Ljava/lang/Class;)Z"),
- //NATIVE_METHOD(Class, isInstance, "(Ljava/lang/Object;)Z"),
+ NATIVE_METHOD(Class, isAssignableFrom, "(Ljava/lang/Class;)Z"),
+ NATIVE_METHOD(Class, isInstance, "(Ljava/lang/Object;)Z"),
NATIVE_METHOD(Class, isInterface, "()Z"),
NATIVE_METHOD(Class, isPrimitive, "()Z"),
NATIVE_METHOD(Class, newInstanceImpl, "()Ljava/lang/Object;"),