* src/vm/loader.c (load_attributes): Load Signature attribute.
authortwisti <none@none>
Sun, 5 Nov 2006 21:18:05 +0000 (21:18 +0000)
committertwisti <none@none>
Sun, 5 Nov 2006 21:18:05 +0000 (21:18 +0000)
* src/vm/class.h (classinfo): Added signature.
* src/native/vm/java_lang_VMClass.c (getClassSignature): Implemented.

src/native/vm/java_lang_VMClass.c
src/vm/class.h
src/vm/loader.c

index 90960b3479e2730d0c97315895aec5e2479d02c6..4e532120a56ac026efad87f81ba2b6b4464c225a 100644 (file)
    Contact: cacao@cacaojvm.org
 
    Authors: Roman Obermaiser
-
-   Changes: Joseph Wenninger
+            Joseph Wenninger
             Christian Thalinger
             Edwin Steiner
 
-   $Id: java_lang_VMClass.c 5153 2006-07-18 08:19:24Z twisti $
+   $Id: java_lang_VMClass.c 5919 2006-11-05 21:18:05Z twisti $
 
 */
 
@@ -767,6 +766,91 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass
 }
 
 
+#if 0
+/*
+ * Class:     java/lang/VMClass
+ * Method:    getDeclaredAnnotations
+ * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
+ */
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, java_lang_Class* klass)
+{
+}
+
+
+/*
+ * Class:     java/lang/VMClass
+ * Method:    getEnclosingClass
+ * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
+ */
+JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+
+
+/*
+ * Class:     java/lang/VMClass
+ * Method:    getEnclosingConstructor
+ * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+ */
+JNIEXPORT struct java_lang_reflect_Constructor* JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+
+
+/*
+ * Class:     java/lang/VMClass
+ * Method:    getEnclosingMethod
+ * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Method;
+ */
+JNIEXPORT struct java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+#endif
+
+
+/*
+ * Class:     java/lang/VMClass
+ * 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)
+{
+       classinfo        *c;
+       java_lang_String *s;
+
+       c = (classinfo *) klass;
+
+       if (c->signature == NULL)
+               return NULL;
+
+       s = javastring_new(c->signature);
+
+       /* in error case, s == NULL */
+
+       return s;
+}
+
+
+#if 0
+/*
+ * Class:     java/lang/VMClass
+ * Method:    isAnonymousClass
+ * Signature: (Ljava/lang/Class;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+
+
+/*
+ * Class:     java/lang/VMClass
+ * Method:    isLocalClass
+ * Signature: (Ljava/lang/Class;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+
+
+/*
+ * Class:     java/lang/VMClass
+ * Method:    isMemberClass
+ * Signature: (Ljava/lang/Class;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+#endif
+
+
 /*
  * 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
index 50ee3633583220d0f01a1ffa1e37f84c0cbc4886..5a1af884eba50c99e7e55b5e66fa64c6b002d702 100644 (file)
@@ -26,9 +26,7 @@
 
    Authors: Christian Thalinger
 
-   Changes:
-
-   $Id: class.h 5492 2006-09-14 18:20:28Z edwin $
+   $Id: class.h 5919 2006-11-05 21:18:05Z twisti $
 
 */
 
@@ -120,6 +118,7 @@ struct classinfo {                /* class structure                          */
 
        utf        *packagename;      /* full name of the package                 */
        utf        *sourcefile;       /* classfile name containing this class     */
+       utf        *signature;        /* classfile signature                      */
        java_objectheader *classloader; /* NULL for bootstrap classloader         */
 };
 
index ac6644b7b8aedbf606fd49471e6010c1a0db5694..c992a7ea9ddaec3e9deff89dc786ef1b00c9a41c 100644 (file)
    Contact: cacao@cacaojvm.org
 
    Authors: Reinhard Grafl
-
-   Changes: Andreas Krall
+            Andreas Krall
             Roman Obermaiser
             Mark Probst
             Edwin Steiner
             Christian Thalinger
 
-   $Id: loader.c 5904 2006-11-04 23:24:48Z edwin $
+   $Id: loader.c 5919 2006-11-05 21:18:05Z twisti $
 
 */
 
@@ -1305,6 +1304,7 @@ static bool load_attributes(classbuffer *cb, u4 num)
 
        for (i = 0; i < num; i++) {
                /* retrieve attribute name */
+
                if (!suck_check_classbuffer_size(cb, 2))
                        return false;
 
@@ -1312,8 +1312,9 @@ static bool load_attributes(classbuffer *cb, u4 num)
                        return false;
 
                if (aname == utf_InnerClasses) {
-                       /* innerclasses attribute */
-                       if (c->innerclass) {
+                       /* InnerClasses attribute */
+
+                       if (c->innerclass != NULL) {
                                exceptions_throw_classformaterror(c, "Multiple InnerClasses attributes");
                                return false;
                        }
@@ -1350,8 +1351,10 @@ static bool load_attributes(classbuffer *cb, u4 num)
                                        innerclass_getconstant(c, suck_u2(cb), CONSTANT_Utf8);
                                info->flags = suck_u2(cb);
                        }
+               }
+               else if (aname == utf_SourceFile) {
+                       /* SourceFile attribute */
 
-               } else if (aname == utf_SourceFile) {
                        if (!suck_check_classbuffer_size(cb, 4 + 2))
                                return false;
 
@@ -1360,16 +1363,36 @@ static bool load_attributes(classbuffer *cb, u4 num)
                                return false;
                        }
 
-                       if (c->sourcefile) {
+                       if (c->sourcefile != NULL) {
                                exceptions_throw_classformaterror(c, "Multiple SourceFile attributes");
                                return false;
                        }
 
                        if (!(c->sourcefile = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
                                return false;
+               }
+               else if (aname == utf_Signature) {
+                       /* Signature attribute */
+
+                       if (!suck_check_classbuffer_size(cb, 4 + 2))
+                               return false;
 
-               } else {
+                       if (suck_u4(cb) != 2) {
+                               exceptions_throw_classformaterror(c, "Wrong size for VALUE attribute");
+                               return false;
+                       }
+
+                       if (c->signature != NULL) {
+                               exceptions_throw_classformaterror(c, "Multiple Signature attributes");
+                               return false;
+                       }
+
+                       if (!(c->signature = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
+                               return false;
+               }
+               else {
                        /* unknown attribute */
+
                        if (!skipattributebody(cb))
                                return false;
                }