Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: java_lang_Class.c 8299 2007-08-13 08:41:18Z michi $
+ $Id: java_lang_Class.c 8321 2007-08-16 11:37:25Z michi $
*/
#include "vmcore/loader.h"
#if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS)
+#include "vm/vm.h"
#include "vmcore/annotation.h"
#include "native/include/sun_reflect_ConstantPool.h"
#endif
{
classinfo *c;
java_lang_String *s;
- java_chararray *ca;
+ java_chararray_t *ca;
u4 i;
c = (classinfo *) klass;
LLNI_field_get_ref(s, value, ca);
- for (i = 0; i < ca->header.size; i++) {
- if (ca->data[i] == '/')
- ca->data[i] = '.';
+ for (i = 0; i < LLNI_array_size(ca); i++) {
+ if (LLNI_array_direct(ca, i) == '/')
+ LLNI_array_direct(ca, i) = '.';
}
return s;
super = class_get_superclass(c);
- return super;
+ return (java_lang_Class *) super;
}
* Method: getInterfaces
* Signature: ()[Ljava/lang/Class;
*/
-java_objectarray *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass)
+java_handle_objectarray_t *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass)
{
- classinfo *c;
- classinfo *ic;
- java_objectarray *oa;
- u4 i;
+ classinfo *c;
+ java_handle_objectarray_t *oa;
c = (classinfo *) klass;
- if (!(c->state & CLASS_LINKED))
- if (!link_class(c))
- return NULL;
-
- oa = builtin_anewarray(c->interfacescount, class_java_lang_Class);
-
- if (oa == NULL)
- return NULL;
-
- for (i = 0; i < c->interfacescount; i++) {
- ic = c->interfaces[i].cls;
-
- oa->data[i] = ic;
- }
+ oa = class_get_interfaces(c);
return oa;
}
* Method: getDeclaredClasses
* Signature: (Z)[Ljava/lang/Class;
*/
-java_objectarray *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly)
+java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly)
{
- classinfo *c;
- classref_or_classinfo outer;
- utf *outername;
- s4 declaredclasscount; /* number of declared classes */
- s4 pos; /* current declared class */
- java_objectarray *oa; /* array of declared classes */
- s4 i;
+ classinfo *c;
+ java_handle_objectarray_t *oa;
c = (classinfo *) klass;
- declaredclasscount = 0;
-
- if (!class_is_primitive(c) && (c->name->text[0] != '[')) {
- /* determine number of declared classes */
-
- for (i = 0; i < c->innerclasscount; i++) {
- outer = c->innerclass[i].outer_class;
-
- /* check if outer_class is a classref or a real class and
- get the class name from the structure */
-
- outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name;
- /* outer class is this class */
-
- if ((outername == c->name) &&
- ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC)))
- declaredclasscount++;
- }
- }
-
- /* allocate Class[] and check for OOM */
-
- oa = builtin_anewarray(declaredclasscount, class_java_lang_Class);
-
- if (oa == NULL)
- return NULL;
-
- for (i = 0, pos = 0; i < c->innerclasscount; i++) {
- outer = c->innerclass[i].outer_class;
-
- /* check if outer_class is a classref or a real class and
- get the class name from the structure */
-
- outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name;
-
- /* outer class is this class */
-
- if ((outername == c->name) &&
- ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) {
- classinfo *inner;
-
- if ((inner = resolve_classref_or_classinfo_eager(
- c->innerclass[i].inner_class,
- false)) == NULL)
- return NULL;
-
- if (!(inner->state & CLASS_LINKED))
- if (!link_class(inner))
- return NULL;
-
- oa->data[pos++] = inner;
- }
- }
+ oa = class_get_declaredclasses(c, publicOnly);
return oa;
}
* Method: getDeclaredFields
* Signature: (Z)[Ljava/lang/reflect/Field;
*/
-java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly)
+java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly)
{
- classinfo *c;
- java_objectarray *oa; /* result: array of field-objects */
- fieldinfo *f;
- java_lang_reflect_Field *rf;
+ classinfo *c;
+ java_handle_objectarray_t *oa; /* result: array of field-objects */
+ fieldinfo *f;
+ java_lang_reflect_Field *rf;
s4 public_fields; /* number of elements in field-array */
s4 pos;
s4 i;
/* store object into array */
- oa->data[pos++] = rf;
+ LLNI_objectarray_element_set(oa, pos, rf);
+ pos++;
}
}
* Method: getDeclaredMethods
* Signature: (Z)[Ljava/lang/reflect/Method;
*/
-java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly)
+java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly)
{
- classinfo *c;
- java_lang_reflect_Method *rm;
- java_objectarray *oa; /* result: array of Method-objects */
- methodinfo *m; /* the current method to be represented */
+ classinfo *c;
+ java_lang_reflect_Method *rm;
+ java_handle_objectarray_t *oa; /* result: array of Method-objects */
+ methodinfo *m; /* the current method to be represented */
s4 public_methods; /* number of public methods of the class */
s4 pos;
s4 i;
/* store object into array */
- oa->data[pos++] = rm;
+ LLNI_objectarray_element_set(oa, pos, rm);
+ pos++;
}
}
* Method: getDeclaredConstructors
* Signature: (Z)[Ljava/lang/reflect/Constructor;
*/
-java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly)
+java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly)
{
classinfo *c;
methodinfo *m; /* the current method to be represented */
- java_objectarray *oa; /* result: array of Method-objects */
+ java_handle_objectarray_t *oa; /* result: array of Method-objects */
java_lang_reflect_Constructor *rc;
s4 public_methods; /* number of public methods of the class */
s4 pos;
/* store object into array */
- oa->data[pos++] = rc;
+ LLNI_objectarray_element_set(oa, pos, rc);
+ pos++;
}
}
* Method: getDeclaredAnnotations
* Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
*/
-java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass)
+java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass)
{
- classinfo *c = (classinfo*)klass;
+ classinfo *c = (classinfo*)klass;
static methodinfo *m_parseAnnotationsIntoArray = NULL;
utf *utf_parseAnnotationsIntoArray = NULL;
- utf *utf_desc = NULL;
- java_bytearray *annotations = NULL;
- sun_reflect_ConstantPool *constantPool = NULL;
- uint32_t size = 0;
+ 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) {
exceptions_throw_nullpointerexception();
return NULL;
}
- constantPool->constantPoolOop = (java_lang_Object*)klass;
+ LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop);
/* only resolve the method the first time */
if (m_parseAnnotationsIntoArray == NULL) {
}
}
- return vm_call_method(
+ return (java_handle_objectarray_t*)vm_call_method(
m_parseAnnotationsIntoArray, NULL,
annotations, constantPool, klass);
}