* Removed all Id tags.
[cacao.git] / src / native / vm / java_lang_Class.c
index ed55b58d809842c787c38f8daa81741dab675d16..12b534177051ddd93da0014e99250609ab47a48b 100644 (file)
@@ -22,8 +22,6 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: java_lang_Class.c 8339 2007-08-17 21:21:51Z twisti $
-
 */
 
 
@@ -62,7 +60,6 @@
 #endif
 
 #include "native/vm/java_lang_Class.h"
-#include "native/vm/java_lang_String.h"
 
 #if defined(ENABLE_JAVASE)
 # include "native/vm/reflect.h"
@@ -99,7 +96,7 @@ java_lang_String *_Jv_java_lang_Class_getName(java_lang_Class *klass)
        java_chararray_t *ca;
        u4                i;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        /* create a java string */
 
@@ -190,7 +187,7 @@ java_lang_Class *_Jv_java_lang_Class_forName(java_lang_String *name)
                if (!initialize_class(c))
                        return NULL;
 
-       return (java_lang_Class *) c;
+       return LLNI_classinfo_wrap(c);
 }
 
 
@@ -204,7 +201,7 @@ s4 _Jv_java_lang_Class_isInstance(java_lang_Class *klass, java_lang_Object *o)
        classinfo     *c;
        java_handle_t *ob;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
        ob = (java_handle_t *) o;
 
        if (!(c->state & CLASS_LINKED))
@@ -225,8 +222,8 @@ s4 _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class
        classinfo *kc;
        classinfo *cc;
 
-       kc = (classinfo *) klass;
-       cc = (classinfo *) c;
+       kc = LLNI_classinfo_unwrap(klass);
+       cc = LLNI_classinfo_unwrap(c);
 
        if (cc == NULL) {
                exceptions_throw_nullpointerexception();
@@ -254,7 +251,7 @@ JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isInterface(JNIEnv *env, java_lang
 {
        classinfo *c;
 
-       c = (classinfo *) this;
+       c = LLNI_classinfo_unwrap(this);
 
        return class_is_interface(c);
 }
@@ -271,7 +268,7 @@ s4 _Jv_java_lang_Class_isPrimitive(java_lang_Class *klass)
 {
        classinfo *c;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        return class_is_primitive(c);
 }
@@ -287,11 +284,11 @@ java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass)
        classinfo *c;
        classinfo *super;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        super = class_get_superclass(c);
 
-       return (java_lang_Class *) super;
+       return LLNI_classinfo_wrap(super);
 }
 
 
@@ -305,7 +302,7 @@ java_handle_objectarray_t *_Jv_java_lang_Class_getInterfaces(java_lang_Class *kl
        classinfo                 *c;
        java_handle_objectarray_t *oa;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        oa = class_get_interfaces(c);
 
@@ -326,7 +323,7 @@ s4 _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClasse
        utf                   *innername;
        s4                     i;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        if (!ignoreInnerClassesAttrib && (c->innerclasscount != 0)) {
                /* search for passed class as inner class */
@@ -368,10 +365,13 @@ s4 _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClasse
 java_lang_Class *_Jv_java_lang_Class_getDeclaringClass(java_lang_Class *klass)
 {
        classinfo *c;
+       classinfo *dc;
+
+       c = LLNI_classinfo_unwrap(klass);
 
-       c = (classinfo *) klass;
+       dc = class_get_declaringclass(c);
 
-       return (java_lang_Class *) class_get_declaringclass(c);
+       return LLNI_classinfo_wrap(dc);
 }
 
 
@@ -385,7 +385,7 @@ java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Clas
        classinfo                 *c;
        java_handle_objectarray_t *oa;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        oa = class_get_declaredclasses(c, publicOnly);
 
@@ -408,7 +408,7 @@ java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class
        s4 pos;
        s4 i;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        /* determine number of fields */
 
@@ -459,7 +459,7 @@ java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Clas
        s4 pos;
        s4 i;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        public_methods = 0;
 
@@ -523,7 +523,7 @@ java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredConstructors(java_lang
        s4 pos;
        s4 i;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        /* determine number of constructors */
 
@@ -569,7 +569,7 @@ java_lang_ClassLoader *_Jv_java_lang_Class_getClassLoader(java_lang_Class *klass
 {
        classinfo *c;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        return (java_lang_ClassLoader *) c->classloader;
 }
@@ -586,7 +586,7 @@ JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isArray(JNIEnv *env, java_lang_Cla
 {
        classinfo *c;
 
-       c = (classinfo *) this;
+       c = LLNI_classinfo_unwrap(this);
 
        return class_is_array(c);
 }
@@ -617,32 +617,28 @@ void _Jv_java_lang_Class_throwException(java_lang_Throwable *t)
  */
 java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass)
 {
-       classinfo                *c               = (classinfo*)klass;
+       classinfo                *c               = NULL;
        static methodinfo        *m_parseAnnotationsIntoArray   = NULL;
        utf                      *utf_parseAnnotationsIntoArray = NULL;
        utf                      *utf_desc        = NULL;
        java_handle_bytearray_t  *annotations     = NULL;
        sun_reflect_ConstantPool *constantPool    = NULL;
-       uint32_t                  size            = 0;
        java_lang_Object         *constantPoolOop = (java_lang_Object*)klass;
 
-       if (c == NULL) {
+       if (klass == NULL) {
                exceptions_throw_nullpointerexception();
                return NULL;
        }
        
-       /* Return null for arrays and primitives: */
-       if (class_is_primitive(c) || class_is_array(c)) {
-               return NULL;
-       }
+       c = LLNI_classinfo_unwrap(klass);
 
-       if (c->annotations != NULL) {
-               size        = c->annotations->size;
-               annotations = builtin_newarray_byte(size);
+       /* get annotations: */
+       annotations = class_get_annotations(c);
 
-               if(annotations != NULL) {
-                       MCOPY(annotations->data, c->annotations->data, uint8_t, size);
-               }
+       if (exceptions_get_exception() != NULL) {
+               /* the only exception possible here should be a out of memory exception
+                * raised by copying the annotations into a java bytearray */
+               return NULL;
        }
 
        constantPool = 
@@ -738,7 +734,7 @@ java_lang_reflect_Constructor *_Jv_java_lang_Class_getEnclosingConstructor(java_
        methodinfo                    *m;
        java_lang_reflect_Constructor *rc;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        /* get enclosing method */
 
@@ -771,7 +767,7 @@ java_lang_reflect_Method *_Jv_java_lang_Class_getEnclosingMethod(java_lang_Class
        methodinfo               *m;
        java_lang_reflect_Method *rm;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        /* get enclosing method */
 
@@ -803,7 +799,7 @@ java_lang_String *_Jv_java_lang_Class_getClassSignature(java_lang_Class* klass)
        classinfo     *c;
        java_handle_t *o;
 
-       c = (classinfo *) klass;
+       c = LLNI_classinfo_unwrap(klass);
 
        if (c->signature == NULL)
                return NULL;