X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fnative%2Fvm%2Fgnuclasspath%2Fjava_lang_VMClass.cpp;h=8e7e6cd148b284df9b7e606a2bb0025d38a2edc2;hb=345ceab5946711a40fdeefb55a0cf469960146d0;hp=0714944b2ab1b7c34956d57236e48880693dcc2d;hpb=9d4cb0889f6539fc4f2a82784dc4664b1a0f332d;p=cacao.git diff --git a/src/native/vm/gnuclasspath/java_lang_VMClass.cpp b/src/native/vm/gnuclasspath/java_lang_VMClass.cpp index 0714944b2..8e7e6cd14 100644 --- a/src/native/vm/gnuclasspath/java_lang_VMClass.cpp +++ b/src/native/vm/gnuclasspath/java_lang_VMClass.cpp @@ -31,18 +31,8 @@ #include "native/llni.h" #include "native/native.h" -#include "native/include/java_lang_Class.h" -#include "native/include/java_lang_ClassLoader.h" -#include "native/include/java_lang_Object.h" -#include "native/include/java_lang_String.h" -#include "native/include/java_lang_Throwable.h" -#include "native/include/java_lang_reflect_Constructor.h" -#include "native/include/java_lang_reflect_Method.h" - -//FIXME -extern "C" { -#include "native/include/java_lang_VMClass.h" -} +// FIXME +//#include "native/include/java_lang_VMClass.h" #include "vm/exceptions.hpp" #include "vm/initialize.h" @@ -50,69 +40,15 @@ extern "C" { #include "vmcore/class.h" #include "vmcore/globals.hpp" +#include "vmcore/javaobjects.hpp" #if defined(ENABLE_ANNOTATIONS) -#include "native/include/sun_reflect_ConstantPool.h" - #include "vm/vm.hpp" #include "vmcore/annotation.h" #endif -/* native methods implemented by this file ************************************/ - -static JNINativeMethod methods[] = { - { (char*) "isInstance", (char*) "(Ljava/lang/Class;Ljava/lang/Object;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInstance }, - { (char*) "isAssignableFrom", (char*) "(Ljava/lang/Class;Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAssignableFrom }, - { (char*) "isInterface", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInterface }, - { (char*) "isPrimitive", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isPrimitive }, - { (char*) "getName", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getName }, - { (char*) "getSuperclass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getSuperclass }, - { (char*) "getInterfaces", (char*) "(Ljava/lang/Class;)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getInterfaces }, - { (char*) "getComponentType", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getComponentType }, - { (char*) "getModifiers", (char*) "(Ljava/lang/Class;Z)I", (void*) (uintptr_t) &Java_java_lang_VMClass_getModifiers }, - { (char*) "getDeclaringClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaringClass }, - { (char*) "getDeclaredClasses", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredClasses }, - { (char*) "getDeclaredFields", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredFields }, - { (char*) "getDeclaredMethods", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredMethods }, - { (char*) "getDeclaredConstructors", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredConstructors }, - { (char*) "getClassLoader", (char*) "(Ljava/lang/Class;)Ljava/lang/ClassLoader;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassLoader }, - { (char*) "forName", (char*) "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_forName }, - { (char*) "isArray", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isArray }, - { (char*) "throwException", (char*) "(Ljava/lang/Throwable;)V", (void*) (uintptr_t) &Java_java_lang_VMClass_throwException }, -#if defined(ENABLE_ANNOTATIONS) - { (char*) "getDeclaredAnnotations", (char*) "(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredAnnotations }, -#endif - { (char*) "getEnclosingClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingClass }, - { (char*) "getEnclosingConstructor", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingConstructor }, - { (char*) "getEnclosingMethod", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingMethod }, - { (char*) "getClassSignature", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassSignature }, - { (char*) "isAnonymousClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAnonymousClass }, - { (char*) "isLocalClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isLocalClass }, - { (char*) "isMemberClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isMemberClass }, -}; - - -/* _Jv_java_lang_VMClass_init ************************************************** - - Register native functions. - -*******************************************************************************/ - -// FIXME -extern "C" { -void _Jv_java_lang_VMClass_init(void) -{ - utf *u; - - u = utf_new_char("java/lang/VMClass"); - - native_method_register(u, methods, NATIVE_METHODS_COUNT); -} -} - - // Native functions are exported as C functions. extern "C" { @@ -121,7 +57,7 @@ extern "C" { * Method: isInstance * Signature: (Ljava/lang/Class;Ljava/lang/Object;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, java_lang_Class *klass, java_lang_Object *o) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, jclass klass, jobject o) { classinfo *c; java_handle_t *h; @@ -138,7 +74,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass * Method: isAssignableFrom * Signature: (Ljava/lang/Class;Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, java_lang_Class *klass, java_lang_Class *c) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, jclass klass, jclass c) { classinfo *to; classinfo *from; @@ -160,7 +96,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, j * Method: isInterface * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; @@ -175,7 +111,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass * Method: isPrimitive * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; @@ -190,13 +126,13 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass * Method: getName * Signature: (Ljava/lang/Class;)Ljava/lang/String; */ -JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, jclass klass) { classinfo* c; c = LLNI_classinfo_unwrap(klass); - return (java_lang_String*) class_get_classname(c); + return (jstring) class_get_classname(c); } @@ -205,7 +141,7 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, * Method: getSuperclass * Signature: (Ljava/lang/Class;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; classinfo *super; @@ -214,7 +150,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv * super = class_get_superclass(c); - return LLNI_classinfo_wrap(super); + return (jclass) LLNI_classinfo_wrap(super); } @@ -223,7 +159,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv * * Method: getInterfaces * Signature: (Ljava/lang/Class;)[Ljava/lang/Class; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; java_handle_objectarray_t *oa; @@ -232,7 +168,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getInterface oa = class_get_interfaces(c); - return oa; + return (jobjectArray) oa; } @@ -241,7 +177,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getInterface * Method: getComponentType * Signature: (Ljava/lang/Class;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; classinfo *component; @@ -250,7 +186,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn component = class_get_componenttype(c); - return LLNI_classinfo_wrap(component); + return (jclass) LLNI_classinfo_wrap(component); } @@ -259,7 +195,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn * Method: getModifiers * Signature: (Ljava/lang/Class;Z)I */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t ignoreInnerClassesAttrib) +JNIEXPORT jint JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, jclass klass, jboolean ignoreInnerClassesAttrib) { classinfo *c; int32_t flags; @@ -277,7 +213,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclas * Method: getDeclaringClass * Signature: (Ljava/lang/Class;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; classinfo *dc; @@ -286,7 +222,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE dc = class_get_declaringclass(c); - return LLNI_classinfo_wrap(dc); + return (jclass) LLNI_classinfo_wrap(dc); } @@ -295,7 +231,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE * Method: getDeclaredClasses * Signature: (Ljava/lang/Class;Z)[Ljava/lang/Class; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t publicOnly) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly) { classinfo *c; java_handle_objectarray_t *oa; @@ -304,7 +240,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredC oa = class_get_declaredclasses(c, publicOnly); - return oa; + return (jobjectArray) oa; } @@ -313,7 +249,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredC * Method: getDeclaredFields * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t publicOnly) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly) { classinfo *c; java_handle_objectarray_t *oa; @@ -322,7 +258,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredF oa = class_get_declaredfields(c, publicOnly); - return oa; + return (jobjectArray) oa; } @@ -331,7 +267,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredF * Method: getDeclaredMethods * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Method; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t publicOnly) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly) { classinfo *c; java_handle_objectarray_t *oa; @@ -340,7 +276,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredM oa = class_get_declaredmethods(c, publicOnly); - return oa; + return (jobjectArray) oa; } @@ -349,7 +285,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredM * Method: getDeclaredConstructors * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t publicOnly) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly) { classinfo *c; java_handle_objectarray_t *oa; @@ -358,7 +294,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredC oa = class_get_declaredconstructors(c, publicOnly); - return oa; + return (jobjectArray) oa; } @@ -367,7 +303,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredC * Method: getClassLoader * Signature: (Ljava/lang/Class;)Ljava/lang/ClassLoader; */ -JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; classloader_t *cl; @@ -375,7 +311,7 @@ JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(J c = LLNI_classinfo_unwrap(klass); cl = class_get_classloader(c); - return (java_lang_ClassLoader *) cl; + return (jobject) cl; } @@ -384,13 +320,13 @@ JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(J * Method: forName * Signature: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, java_lang_String *name, int32_t initialize, java_lang_ClassLoader *loader) +JNIEXPORT jclass JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, jstring name, jboolean initialize, jobject loader) { classloader_t *cl; utf *ufile; utf *uname; classinfo *c; - u2 *pos; + char* pos; int32_t i; cl = loader_hashtable_classloader_add((java_handle_t *) loader); @@ -409,7 +345,8 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j /* name must not contain '/' (mauve test) */ - for (i = 0, pos = LLNI_field_direct(name, value)->data + LLNI_field_direct(name, offset); i < LLNI_field_direct(name, count); i++, pos++) { + // FIXME Move this check into a function. + for (i = 0, pos = uname->text; i < uname->blength; i++, pos++) { if (*pos == '/') { exceptions_throw_classnotfoundexception(uname); return NULL; @@ -434,7 +371,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j if (!initialize_class(c)) return NULL; - return LLNI_classinfo_wrap(c); + return (jclass) LLNI_classinfo_wrap(c); } @@ -443,7 +380,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j * Method: isArray * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; @@ -458,7 +395,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass cla * Method: throwException * Signature: (Ljava/lang/Throwable;)V */ -JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, java_lang_Throwable *t) +JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, jobject t) { java_handle_t *o; @@ -474,44 +411,33 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass * Method: getDeclaredAnnotations * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; */ -JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, java_lang_Class* klass) +JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, jclass klass) { - classinfo *c = NULL; /* classinfo for the java.lang.Class object 'klass' */ - static methodinfo *m_parseAnnotationsIntoArray = NULL; /* parser method (cached, therefore static) */ - utf *utf_parseAnnotationsIntoArray = NULL; /* parser method name */ - utf *utf_desc = NULL; /* parser method descriptor (signature) */ - java_handle_bytearray_t *annotations = NULL; /* unparsed annotations */ - sun_reflect_ConstantPool *constantPool = NULL; /* constant pool of klass */ - java_lang_Object *constantPoolOop = (java_lang_Object*)klass; /* constantPoolOop field of */ - /* sun.reflect.ConstantPool */ + static methodinfo* m_parseAnnotationsIntoArray = NULL; if (klass == NULL) { exceptions_throw_nullpointerexception(); return NULL; } - c = LLNI_classinfo_unwrap(klass); + classinfo* c = LLNI_classinfo_unwrap(klass); /* get annotations: */ - annotations = class_get_annotations(c); + java_handle_bytearray_t* annotations = class_get_annotations(c); - constantPool = - (sun_reflect_ConstantPool*)native_new_and_init( - class_sun_reflect_ConstantPool); + java_handle_t* h = native_new_and_init(class_sun_reflect_ConstantPool); - if (constantPool == NULL) { - /* out of memory */ + if (h == NULL) return NULL; - } - LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop); + sun_reflect_ConstantPool cp(h); + cp.set_constantPoolOop(klass); /* only resolve the parser method the first time */ if (m_parseAnnotationsIntoArray == NULL) { - utf_parseAnnotationsIntoArray = utf_new_char("parseAnnotationsIntoArray"); - utf_desc = utf_new_char( - "([BLsun/reflect/ConstantPool;Ljava/lang/Class;)" - "[Ljava/lang/annotation/Annotation;"); + utf* utf_parseAnnotationsIntoArray = utf_new_char("parseAnnotationsIntoArray"); + utf* utf_desc = utf_new_char("([BLsun/reflect/ConstantPool;Ljava/lang/Class;)" + "[Ljava/lang/annotation/Annotation;"); if (utf_parseAnnotationsIntoArray == NULL || utf_desc == NULL) { /* out of memory */ @@ -531,9 +457,8 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredA } } - return (java_handle_objectarray_t*)vm_call_method( - m_parseAnnotationsIntoArray, NULL, - annotations, constantPool, klass); + java_handle_objectarray_t* oa = (java_handle_objectarray_t*) vm_call_method(m_parseAnnotationsIntoArray, NULL, annotations, cp.get_handle(), klass); + return (jobjectArray) oa; } #endif @@ -543,7 +468,7 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredA * Method: getEnclosingClass * Signature: (Ljava/lang/Class;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; classinfo *result; @@ -552,7 +477,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIE result = class_get_enclosingclass(c); - return LLNI_classinfo_wrap(result); + return (jclass) LLNI_classinfo_wrap(result); } @@ -561,7 +486,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIE * Method: getEnclosingConstructor * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Constructor; */ -JNIEXPORT java_lang_reflect_Constructor* JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, jclass klass) { classinfo* c; java_handle_t* h; @@ -569,7 +494,7 @@ JNIEXPORT java_lang_reflect_Constructor* JNICALL Java_java_lang_VMClass_getEnclo c = LLNI_classinfo_unwrap(klass); h = class_get_enclosingconstructor(c); - return (java_lang_reflect_Constructor*) h; + return (jobject) h; } @@ -578,7 +503,7 @@ JNIEXPORT java_lang_reflect_Constructor* JNICALL Java_java_lang_VMClass_getEnclo * Method: getEnclosingMethod * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Method; */ -JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, jclass klass) { classinfo* c; java_handle_t* h; @@ -586,7 +511,7 @@ JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getEnclosingM c = LLNI_classinfo_unwrap(klass); h = class_get_enclosingmethod(c); - return (java_lang_reflect_Method*) h; + return (jobject) h; } @@ -595,7 +520,7 @@ JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getEnclosingM * Method: getClassSignature * Signature: (Ljava/lang/Class;)Ljava/lang/String; */ -JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getClassSignature(JNIEnv *env, jclass clazz, java_lang_Class* klass) +JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getClassSignature(JNIEnv *env, jclass clazz, jclass klass) { classinfo *c; utf *u; @@ -612,7 +537,7 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getClassSignature(JNI /* in error case s is NULL */ - return (java_lang_String *) s; + return (jstring) s; } @@ -621,7 +546,7 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getClassSignature(JNI * Method: isAnonymousClass * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, jclass klass) { return class_is_anonymousclass(LLNI_classinfo_unwrap(klass)); } @@ -632,7 +557,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, j * Method: isLocalClass * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, jclass klass) { return class_is_localclass(LLNI_classinfo_unwrap(klass)); } @@ -643,7 +568,7 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclas * Method: isMemberClass * Signature: (Ljava/lang/Class;)Z */ -JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, jclass klass) { return class_is_memberclass(LLNI_classinfo_unwrap(klass)); } @@ -651,6 +576,59 @@ JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jcla } // extern "C" +/* native methods implemented by this file ************************************/ + +static JNINativeMethod methods[] = { + { (char*) "isInstance", (char*) "(Ljava/lang/Class;Ljava/lang/Object;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInstance }, + { (char*) "isAssignableFrom", (char*) "(Ljava/lang/Class;Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAssignableFrom }, + { (char*) "isInterface", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInterface }, + { (char*) "isPrimitive", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isPrimitive }, + { (char*) "getName", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getName }, + { (char*) "getSuperclass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getSuperclass }, + { (char*) "getInterfaces", (char*) "(Ljava/lang/Class;)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getInterfaces }, + { (char*) "getComponentType", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getComponentType }, + { (char*) "getModifiers", (char*) "(Ljava/lang/Class;Z)I", (void*) (uintptr_t) &Java_java_lang_VMClass_getModifiers }, + { (char*) "getDeclaringClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaringClass }, + { (char*) "getDeclaredClasses", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredClasses }, + { (char*) "getDeclaredFields", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredFields }, + { (char*) "getDeclaredMethods", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredMethods }, + { (char*) "getDeclaredConstructors", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredConstructors }, + { (char*) "getClassLoader", (char*) "(Ljava/lang/Class;)Ljava/lang/ClassLoader;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassLoader }, + { (char*) "forName", (char*) "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_forName }, + { (char*) "isArray", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isArray }, + { (char*) "throwException", (char*) "(Ljava/lang/Throwable;)V", (void*) (uintptr_t) &Java_java_lang_VMClass_throwException }, +#if defined(ENABLE_ANNOTATIONS) + { (char*) "getDeclaredAnnotations", (char*) "(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredAnnotations }, +#endif + { (char*) "getEnclosingClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingClass }, + { (char*) "getEnclosingConstructor", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingConstructor }, + { (char*) "getEnclosingMethod", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingMethod }, + { (char*) "getClassSignature", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassSignature }, + { (char*) "isAnonymousClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAnonymousClass }, + { (char*) "isLocalClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isLocalClass }, + { (char*) "isMemberClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isMemberClass }, +}; + + +/* _Jv_java_lang_VMClass_init ************************************************** + + Register native functions. + +*******************************************************************************/ + +// FIXME +extern "C" { +void _Jv_java_lang_VMClass_init(void) +{ + utf *u; + + u = utf_new_char("java/lang/VMClass"); + + native_method_register(u, methods, NATIVE_METHODS_COUNT); +} +} + + /* * These are local overrides for various environment variables in Emacs. * Please do not remove this and leave it at the end of the file, where