* src/vm/field.h (fieldinfo): Added signature.
* src/vm/loader.c (load_method): Load signature attribute.
(load_field): Likewise.
* src/native/vm/java_lang_reflect_Method.c (getSignature):
Implemented.
* src/native/vm/java_lang_reflect_Field.c (getSignature): Likewise.
-/* src/native/vm/Field.c - java/lang/reflect/Field
+/* src/native/vm/java_lang_reflect_Field.c - java/lang/reflect/Field
Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
Contact: cacao@cacaojvm.org
Authors: Roman Obermaiser
-
- Changes: Joseph Wenninger
+ Joseph Wenninger
Christian Thalinger
- $Id: java_lang_reflect_Field.c 5224 2006-08-08 19:18:49Z edwin $
+ $Id: java_lang_reflect_Field.c 5937 2006-11-08 22:00:57Z twisti $
*/
}
+/*
+ * Class: java/lang/reflect/Field
+ * Method: getModifiersInternal
+ * Signature: ()I
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_reflect_Field_getModifiersInternal(JNIEnv *env, java_lang_reflect_Field *this)
+{
+ classinfo *c;
+ fieldinfo *f;
+
+ c = (classinfo *) this->declaringClass;
+ f = &(c->fields[this->slot]);
+
+ return f->flags;
+}
+
+
+/*
+ * Class: java/lang/reflect/Field
+ * Method: getType
+ * Signature: ()Ljava/lang/Class;
+ */
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_reflect_Field_getType(JNIEnv *env, java_lang_reflect_Field *this)
+{
+ classinfo *c;
+ typedesc *desc;
+ classinfo *ret;
+
+ c = (classinfo *) this->declaringClass;
+ desc = c->fields[this->slot].parseddesc;
+
+ if (desc == NULL)
+ return NULL;
+
+ if (!resolve_class_from_typedesc(desc, true, false, &ret))
+ return NULL;
+
+ return (java_lang_Class *) ret;
+}
+
+
/*
* Class: java/lang/reflect/Field
* Method: get
/*
* Class: java/lang/reflect/Field
- * Method: getType
- * Signature: ()Ljava/lang/Class;
+ * Method: getSignature
+ * Signature: ()Ljava/lang/String;
*/
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_reflect_Field_getType(JNIEnv *env, java_lang_reflect_Field *this)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_reflect_Field_getSignature(JNIEnv *env, java_lang_reflect_Field* this)
{
- classinfo *c;
- typedesc *desc;
- classinfo *ret;
+ classinfo *c;
+ fieldinfo *f;
+ java_lang_String *s;
+
+ /* get the class and the field */
c = (classinfo *) this->declaringClass;
- desc = c->fields[this->slot].parseddesc;
+ f = &c->fields[this->slot];
- if (!desc)
+ if (f->signature == NULL)
return NULL;
- if (!resolve_class_from_typedesc(desc, true, false, &ret))
- return NULL;
-
- return (java_lang_Class *) ret;
-}
+ s = javastring_new(f->signature);
+ /* in error case, s == NULL */
-/*
- * Class: java/lang/reflect/Field
- * Method: getModifiersInternal
- * Signature: ()I
- */
-JNIEXPORT s4 JNICALL Java_java_lang_reflect_Field_getModifiersInternal(JNIEnv *env, java_lang_reflect_Field *this)
-{
- classinfo *c;
- fieldinfo *f;
-
- c = (classinfo *) this->declaringClass;
- f = &(c->fields[this->slot]);
-
- return f->flags;
+ return s;
}
Contact: cacao@cacaojvm.org
Authors: Roman Obermaiser
-
- Changes: Joseph Wenninger
+ Joseph Wenninger
Christian Thalinger
- $Id: java_lang_reflect_Method.c 5225 2006-08-08 19:23:44Z edwin $
+ $Id: java_lang_reflect_Method.c 5937 2006-11-08 22:00:57Z twisti $
*/
}
+/*
+ * Class: java/lang/reflect/Method
+ * Method: getSignature
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_reflect_Method_getSignature(JNIEnv *env, java_lang_reflect_Method* this)
+{
+ classinfo *c;
+ methodinfo *m;
+ java_lang_String *s;
+
+ c = (classinfo *) this->declaringClass;
+ m = &(c->methods[this->slot]);
+
+ if (m->signature == NULL)
+ return NULL;
+
+ s = javastring_new(m->signature);
+
+ /* in error case, s == NULL */
+
+ return s;
+}
+
+
/*
* 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
Contact: cacao@cacaojvm.org
Authors: Reinhard Grafl
+ Christian Thalinger
- Changes: Christian Thalinger
-
- $Id: field.h 4758 2006-04-12 17:51:10Z edwin $
+ $Id: field.h 5937 2006-11-08 22:00:57Z twisti $
*/
s4 type; /* basic data type */
utf *name; /* name of field */
utf *descriptor;/* JavaVM descriptor string of field */
+ utf *signature; /* Signature attribute string */
typedesc *parseddesc;/* parsed descriptor */
s4 offset; /* offset from start of object (instance variables) */
Edwin Steiner
Christian Thalinger
- $Id: loader.c 5919 2006-11-05 21:18:05Z twisti $
+ $Id: loader.c 5937 2006-11-08 22:00:57Z twisti $
*/
return false;
/* check attribute length */
+
if (suck_u4(cb) != 2) {
exceptions_throw_classformaterror(c, "Wrong size for VALUE attribute");
return false;
}
/* constant value attribute */
+
if (pindex != field_load_NOVALUE) {
exceptions_throw_classformaterror(c, "Multiple ConstantValue attributes");
return false;
}
- /* index of value in constantpool */
+ /* index of value in constantpool */
+
pindex = suck_u2(cb);
/* initialize field with value from constantpool */
default:
log_text("Invalid Constant - Type");
}
+ }
+ else if (u == utf_Signature) {
+ if (!suck_check_classbuffer_size(cb, 4 + 2))
+ return false;
- } else {
+ /* check attribute length */
+
+ if (suck_u4(cb) != 2) {
+ exceptions_throw_classformaterror(c, "Wrong size for VALUE attribute");
+ return false;
+ }
+
+ if (f->signature != NULL) {
+ exceptions_throw_classformaterror(c, "Multiple Signature attributes");
+ return false;
+ }
+
+ if (!(f->signature = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
+ return false;
+ }
+ else {
/* unknown attribute */
if (!skipattributebody(cb))
return false;
return false;
}
}
-
- } else if (aname == utf_Exceptions) {
+ }
+ else if (aname == utf_Exceptions) {
s4 j;
if (m->thrownexceptions) {
(utf*) class_getconstant(c, suck_u2(cb), CONSTANT_Class)))
return false;
}
-
- } else {
+ }
+ else if (aname == utf_Signature) {
+ if (!suck_check_classbuffer_size(cb, 4 + 2))
+ return false;
+
+ /* check attribute length */
+
+ if (suck_u4(cb) != 2) {
+ exceptions_throw_classformaterror(c, "Wrong size for VALUE attribute");
+ return false;
+ }
+
+ if (m->signature != NULL) {
+ exceptions_throw_classformaterror(c, "Multiple Signature attributes");
+ return false;
+ }
+
+ if (!(m->signature = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
+ return false;
+ }
+ else {
if (!skipattributebody(cb))
return false;
}
Contact: cacao@cacaojvm.org
Authors: Reinhard Grafl
-
- Changes: Christian Thalinger
+ Christian Thalinger
Edwin Steiner
- $Id: method.h 5785 2006-10-15 22:25:54Z edwin $
+ $Id: method.h 5937 2006-11-08 22:00:57Z twisti $
*/
s4 flags; /* ACC flags */
utf *name; /* name of method */
utf *descriptor; /* JavaVM descriptor string of method */
+ utf *signature; /* Signature attribute string */
methoddesc *parseddesc; /* parsed descriptor */
classinfo *class; /* class, the method belongs to */