1 /* nat/VMClass.c - java/lang/Class
3 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
4 R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
5 M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
6 P. Tomsich, J. Wenninger
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25 Contact: cacao@complang.tuwien.ac.at
27 Authors: Roman Obermaiser
29 Changes: Joseph Wenninger
31 $Id: VMClass.c 1067 2004-05-18 10:25:51Z stefan $
44 #include "toolbox/logging.h"
45 #include "toolbox/memory.h"
46 #include "java_lang_Object.h"
47 #include "java_lang_Class.h"
48 #include "java_lang_ClassLoader.h"
49 #include "java_security_ProtectionDomain.h"
50 #include "java_lang_reflect_Constructor.h"
51 #include "java_lang_reflect_Field.h"
52 #include "java_lang_reflect_Method.h"
53 #include "java_lang_Throwable.h" /* needed for java_lang_VMClass.h */
54 #include "java_lang_VMClass.h"
57 /* for selecting public members */
58 #define MEMBER_PUBLIC 0
62 * Class: java_lang_VMClass
64 * Signature: (Ljava/lang/String;)Ljava/lang/Class;
66 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, java_lang_String *s)
71 /* illegal argument */
75 /* create utf string in which '.' is replaced by '/' */
76 u = javastring_toutf(s, true);
78 /* create a new class, ... */
84 /* class was not loaded. raise exception */
86 /* there is already an exception (NoClassDefFoundError), but forName()
87 returns a ClassNotFoundException */
89 /* clear exceptionptr, because builtin_new checks for
90 ExceptionInInitializerError */
94 new_exception_javastring(string_java_lang_ClassNotFoundException, s);
102 /* ...and initialize it */
105 use_class_as_object(c);
107 return (java_lang_Class *) c;
112 * Class: java_lang_VMClass
113 * Method: getClassLoader
114 * Signature: ()Ljava/lang/ClassLoader;
116 JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, java_lang_VMClass *this)
118 return ((classinfo*)(this->vmData))->classloader;
119 /* init_systemclassloader();
121 return SystemClassLoader;*/
126 * Class: java_lang_VMClass
127 * Method: getComponentType
128 * Signature: ()Ljava/lang/Class;
130 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, java_lang_VMClass *this)
132 classinfo *thisclass = (classinfo *) this->vmData;
134 arraydescriptor *desc;
136 if ((desc = thisclass->vftbl->arraydesc) != NULL) {
137 if (desc->arraytype == ARRAYTYPE_OBJECT)
138 c = desc->componentvftbl->class;
140 c = primitivetype_table[desc->arraytype].class_primitive;
143 use_class_as_object(c);
146 return (java_lang_Class *) c;
151 * Class: java_lang_VMClass
152 * Method: getDeclaredConstructors
153 * Signature: (Z)[Ljava/lang/reflect/Constructor;
155 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
158 classinfo *c = (classinfo *) this->vmData;
159 java_objectheader *o;
160 classinfo *class_constructor;
161 java_objectarray *array_constructor; /* result: array of Method-objects */
162 java_objectarray *exceptiontypes; /* the exceptions thrown by the method */
163 methodinfo *m; /* the current method to be represented */
164 int public_methods = 0; /* number of public methods of the class */
167 utf *utf_constr = utf_new_char("<init>");
170 /*log_text("Java_java_lang_VMClass_getDeclaredConstructors");
171 log_plain_utf(c->name);
173 /* class_showmethods(c);
174 class_showmethods(loader_load(utf_new_char("java/lang/Class")));*/
177 /* determine number of constructors */
178 for (i = 0; i < c->methodscount; i++)
179 if (((c->methods[i].flags & ACC_PUBLIC) || !public_only) &&
180 (c->methods[i].name == utf_constr))
183 class_constructor = class_new(utf_new_char("java/lang/reflect/Constructor"));
185 if (!class_constructor->loaded)
186 class_load(class_constructor);
188 if (!class_constructor->linked)
189 class_link(class_constructor);
191 array_constructor = builtin_anewarray(public_methods, class_constructor);
193 if (!array_constructor)
196 for (i = 0; i < c->methodscount; i++)
197 if ((c->methods[i].flags & ACC_PUBLIC) || !public_only){
199 if (m->name!=utf_constr)
202 o = native_new_and_init(class_constructor);
203 array_constructor->data[pos++] = o;
205 /* array of exceptions declared to be thrown, information not available !! */
206 exceptiontypes = builtin_anewarray(0, class_java_lang_Class);
208 /* class_showconstantpool(class_constructor);*/
209 /* initialize instance fields */
210 /* ((java_lang_reflect_Constructor*)o)->flag=(m->flags & (ACC_PRIVATE | ACC_PUBLIC | ACC_PROTECTED));*/
211 setfield_critical(class_constructor,o,"clazz", "Ljava/lang/Class;", jobject, (jobject) c /*this*/);
212 setfield_critical(class_constructor,o,"slot", "I", jint, i);
213 /* setfield_critical(class_constructor,o,"flag", "I", jint, (m->flags & (ACC_PRIVATE |
214 ACC_PUBLIC | ACC_PROTECTED))); */
215 setfield_critical(class_constructor,o,"exceptionTypes", "[Ljava/lang/Class;", jobject, (jobject) exceptiontypes);
216 setfield_critical(class_constructor,o,"parameterTypes", "[Ljava/lang/Class;", jobject, (jobject) get_parametertypes(m));
219 return array_constructor;
224 * Class: java_lang_VMClass
225 * Method: getDeclaredClasses
226 * Signature: (Z)[Ljava/lang/Class;
228 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, java_lang_VMClass *this, s4 publicOnly)
230 #warning fix the public only case
231 classinfo *c = (classinfo *) this->vmData;
232 int pos = 0; /* current declared class */
233 int declaredclasscount = 0; /* number of declared classes */
234 java_objectarray *result; /* array of declared classes */
235 int notPublicOnly = !publicOnly;
244 /*printf("PublicOnly: %d\n",publicOnly);*/
245 if (!Java_java_lang_VMClass_isPrimitive(env, (java_lang_VMClass *) c) && (c->name->text[0] != '[')) {
246 /* determine number of declared classes */
247 for (i = 0; i < c->innerclasscount; i++) {
248 if ( (c->innerclass[i].outer_class == c) && (notPublicOnly || (c->innerclass[i].flags & ACC_PUBLIC)))
249 /* outer class is this class */
250 declaredclasscount++;
254 /*class_showmethods(c); */
256 result = builtin_anewarray(declaredclasscount, class_java_lang_Class);
258 for (i = 0; i < c->innerclasscount; i++) {
259 classinfo *inner = c->innerclass[i].inner_class;
260 classinfo *outer = c->innerclass[i].outer_class;
262 if ((outer == c) && (notPublicOnly || (inner->flags & ACC_PUBLIC))) {
263 /* outer class is this class, store innerclass in array */
264 use_class_as_object(inner);
265 result->data[pos++] = (java_objectheader *) inner;
274 * Class: java/lang/Class
275 * Method: getDeclaringClass
276 * Signature: ()Ljava/lang/Class;
278 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, java_lang_VMClass *this)
281 classinfo *c = (classinfo *) this->vmData;
283 if (this && this->vmData && !Java_java_lang_VMClass_isPrimitive(env, this) && (c->name->text[0] != '[')) {
286 if (c->innerclasscount == 0) /* no innerclasses exist */
289 for (i = 0; i < c->innerclasscount; i++) {
290 classinfo *inner = c->innerclass[i].inner_class;
291 classinfo *outer = c->innerclass[i].outer_class;
294 /* innerclass is this class */
295 use_class_as_object(outer);
296 return (java_lang_Class *) outer;
301 /* return NULL for arrayclasses and primitive classes */
307 * Class: java/lang/Class
309 * Signature: (Ljava/lang/String;I)Ljava/lang/reflect/Field;
311 JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIEnv *env, java_lang_VMClass *this, java_lang_String *name, s4 public_only)
314 classinfo *fieldtype;
315 fieldinfo *f; /* the field to be represented */
316 java_lang_reflect_Field *o; /* result: field-object */
317 utf *desc; /* the fielddescriptor */
320 /* create Field object */
321 /* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Field")); */
322 c = class_new(utf_new_char("java/lang/reflect/Field"));
323 o = (java_lang_reflect_Field *) native_new_and_init(c);
325 /* get fieldinfo entry */
326 idx = class_findfield_index_approx((classinfo *) this->vmData, javastring_toutf(name, false));
329 *exceptionptr = new_exception(string_java_lang_NoSuchFieldException);
333 f = &(((classinfo *) this->vmData)->fields[idx]);
335 if (public_only && !(f->flags & ACC_PUBLIC)) {
336 /* field is not public and public only had been requested*/
337 *exceptionptr = new_exception(string_java_lang_NoSuchFieldException);
341 desc = f->descriptor;
342 fieldtype = class_from_descriptor(desc->text, utf_end(desc), NULL, CLASSLOAD_LOAD);
346 /* initialize instance fields */
347 setfield_critical(c,o,"declaringClass", "Ljava/lang/Class;", jobject, (jobject) (this->vmData) /*this*/);
348 /* ((java_lang_reflect_Field*)(o))->flag=f->flags;*/
349 /* save type in slot-field for faster processing */
350 /* setfield_critical(c,o,"flag", "I", jint, (jint) f->flags); */
351 setfield_critical(c,o,"slot", "I", jint, (jint) idx);
352 setfield_critical(c,o,"name", "Ljava/lang/String;", jstring, (jstring) name);
353 /*setfield_critical(c,o,"type", "Ljava/lang/Class;", jclass, fieldtype);*/
363 * Class: java_lang_VMClass
364 * Method: getDeclaredFields
365 * Signature: (Z)[Ljava/lang/reflect/Field;
367 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
369 classinfo *c = (classinfo *) this->vmData;
370 classinfo *class_field;
371 java_objectarray *array_field; /* result: array of field-objects */
372 int public_fields = 0; /* number of elements in field-array */
376 /* determine number of fields */
377 for (i = 0; i < c->fieldscount; i++)
378 if ((c->fields[i].flags & ACC_PUBLIC) || (!public_only))
381 /* class_field = loader_load(utf_new_char("java/lang/reflect/Field")); */
382 class_field = class_new(utf_new_char("java/lang/reflect/Field"));
387 /* create array of fields */
388 array_field = builtin_anewarray(public_fields, class_field);
390 /* creation of array failed */
394 /* get the fields and store in the array */
395 for (i = 0; i < c->fieldscount; i++)
396 if ( (c->fields[i].flags & ACC_PUBLIC) || (!public_only))
397 array_field->data[pos++] =
398 (java_objectheader *) Java_java_lang_VMClass_getField0(env,
400 (java_lang_String *) javastring_new(c->fields[i].name),
407 * Class: java/lang/Class
408 * Method: getInterfaces
409 * Signature: ()[Ljava/lang/Class;
411 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, java_lang_VMClass *this)
413 classinfo *c = (classinfo *) this->vmData;
417 a = builtin_anewarray(c->interfacescount, class_java_lang_Class);
422 for (i = 0; i < c->interfacescount; i++) {
423 use_class_as_object(c->interfaces[i]);
425 a->data[i] = (java_objectheader *) c->interfaces[i];
433 * Class: java/lang/Class
435 * Signature: (Ljava/lang/String;[Ljava/lang/Class;I)Ljava/lang/reflect/Method;
437 JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getMethod0(JNIEnv *env, java_lang_Class *this, java_lang_String *name, java_objectarray *types, s4 which)
440 classinfo *clazz = (classinfo *) this;
441 java_lang_reflect_Method* o; /* result: Method-object */
442 java_objectarray *exceptiontypes; /* the exceptions thrown by the method */
443 methodinfo *m; /* the method to be represented */
445 /* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Method")); */
446 c = class_new(utf_new_char("java/lang/reflect/Method"));
447 o = (java_lang_reflect_Method *) native_new_and_init(c);
449 /* find the method */
450 m = class_resolvemethod_approx(clazz,
451 javastring_toutf(name, false),
452 create_methodsig(types,0)
455 if (!m || (which == MEMBER_PUBLIC && !(m->flags & ACC_PUBLIC))) {
456 /* no apropriate method was found */
457 *exceptionptr = new_exception(string_java_lang_NoSuchMethodException);
461 /* array of exceptions declared to be thrown, information not available !! */
462 exceptiontypes = builtin_anewarray(0, class_java_lang_Class);
464 /* initialize instance fields */
465 setfield_critical(c,o,"clazz", "Ljava/lang/Class;", jobject, (jobject) clazz /*this*/);
466 setfield_critical(c,o,"parameterTypes", "[Ljava/lang/Class;", jobject, (jobject) types);
467 setfield_critical(c,o,"exceptionTypes", "[Ljava/lang/Class;", jobject, (jobject) exceptiontypes);
468 setfield_critical(c,o,"name", "Ljava/lang/String;", jstring, javastring_new(m->name));
469 setfield_critical(c,o,"modifiers", "I", jint, m->flags);
470 setfield_critical(c,o,"slot", "I", jint, 0);
471 setfield_critical(c,o,"returnType", "Ljava/lang/Class;", jclass, get_returntype(m));
478 * Class: java_lang_VMClass
479 * Method: getDeclaredMethods
480 * Signature: (Z)[Ljava/lang/reflect/Method;
482 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
484 classinfo *c = (classinfo *) this->vmData;
485 java_objectheader *o;
486 classinfo *class_method;
487 java_objectarray *array_method; /* result: array of Method-objects */
488 java_objectarray *exceptiontypes; /* the exceptions thrown by the method */
489 methodinfo *m; /* the current method to be represented */
490 int public_methods = 0; /* number of public methods of the class */
493 utf *utf_constr=utf_new_char("<init>");
494 utf *utf_clinit=utf_new_char("<clinit>");
496 /* class_method = (classinfo*) loader_load(utf_new_char ("java/lang/reflect/Method")); */
497 class_method = class_new(utf_new_char("java/lang/reflect/Method"));
502 /* JOWENN: array classes do not declare methods according to mauve test. It should be considered, if
503 we should return to my old clone method overriding instead of declaring it as a member function */
504 if (Java_java_lang_VMClass_isArray(env, this)) {
505 return builtin_anewarray(0, class_method);
509 /* determine number of methods */
510 for (i = 0; i < c->methodscount; i++)
511 if ((((c->methods[i].flags & ACC_PUBLIC)) || (!public_only)) &&
513 ((c->methods[i].name==utf_constr) ||
514 (c->methods[i].name==utf_clinit) )
518 class_showmethods(class_method);
523 array_method = builtin_anewarray(public_methods, class_method);
528 for (i = 0; i < c->methodscount; i++)
529 if (((c->methods[i].flags & ACC_PUBLIC) || (!public_only)) &&
531 ((c->methods[i].name==utf_constr) ||
532 (c->methods[i].name==utf_clinit) )
536 o = native_new_and_init(class_method);
537 array_method->data[pos++] = o;
539 /* array of exceptions declared to be thrown, information not available !! */
540 exceptiontypes = builtin_anewarray (0, class_java_lang_Class);
543 /* initialize instance fields */
544 /* ((java_lang_reflect_Method*)o)->flag=(m->flags &
545 (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_ABSTRACT | ACC_STATIC | ACC_FINAL |
546 ACC_SYNCHRONIZED | ACC_NATIVE | ACC_STRICT)
548 setfield_critical(class_method,o,"declaringClass", "Ljava/lang/Class;", jobject, (jobject) c /*this*/);
549 setfield_critical(class_method,o,"name", "Ljava/lang/String;", jstring, javastring_new(m->name));
550 /* setfield_critical(class_method,o,"flag", "I", jint, (m->flags &
551 (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_ABSTRACT | ACC_STATIC | ACC_FINAL |
552 ACC_SYNCHRONIZED | ACC_NATIVE | ACC_STRICT)));*/
553 setfield_critical(class_method,o,"slot", "I", jint, i);
554 /* setfield_critical(class_method,o,"returnType", "Ljava/lang/Class;", jclass, get_returntype(m));
555 setfield_critical(class_method,o,"exceptionTypes", "[Ljava/lang/Class;", jobject, (jobject) exceptiontypes);
556 setfield_critical(class_method,o,"parameterTypes", "[Ljava/lang/Class;", jobject, (jobject) get_parametertypes(m));*/
564 * Class: java/lang/Class
565 * Method: getModifiers
568 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, java_lang_VMClass *this)
570 classinfo *c = (classinfo *) (this->vmData);
576 * Class: java/lang/Class
578 * Signature: ()Ljava/lang/String;
580 JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, java_lang_VMClass* this)
583 classinfo *c = (classinfo *) (this->vmData);
584 java_lang_String *s = (java_lang_String *) javastring_new(c->name);
589 /* return string where '/' is replaced by '.' */
590 for (i = 0; i < s->value->header.size; i++) {
591 if (s->value->data[i] == '/')
592 s->value->data[i] = '.';
601 * Class: java/lang/VMClass
602 * Method: getBeautifiedName
603 * Signature: (Ljava/lang/Class;)Ljava/lang/String;
605 JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getBeautifiedName(JNIEnv *env, jclass clazz, java_lang_Class *par1)
608 classinfo *c = (classinfo *) (par1);
610 char *utf__ptr = c->name->text; /* current position in utf-text */
611 char **utf_ptr = &utf__ptr;
612 char *desc_end = utf_end(c->name); /* points behind utf string */
619 log_text("Java_java_lang_VMClass_getBeautifiedName");
620 utf_display(c->name);
621 log_text("beautifying");
624 while ( *utf_ptr != desc_end ) {
625 if (utf_nextu2(utf_ptr)=='[') dimCnt++;
628 utf__ptr = (*utf_ptr) - 1;
634 utf_display(c->name);
638 if (((*utf_ptr) + 1) == desc_end) {
639 for (i = 0; i < PRIMITIVETYPE_COUNT; i++) {
640 if (primitivetype_table[i].typesig == (*utf__ptr)) {
641 len = dimCnt * 2 + strlen(primitivetype_table[i].name);
642 str = MNEW(char, len + 1);
643 strcpy(str, primitivetype_table[i].name);
651 len = dimCnt + strlen(c->name->text) - 2;
652 str = MNEW(char, len + 1);
653 strncpy(str, ++utf__ptr, len - 2 * dimCnt);
655 len = strlen(c->name->text);
656 str = MNEW(char, len + 1);
657 strncpy(str, utf__ptr, len);
662 dimCnt = len - 2 * dimCnt;
664 for (i = len - 1; i >= dimCnt; i = i - 2) {
669 s = javastring_new(utf_new_char(str));
670 MFREE(str, char, len + 1);
674 /* return string where '/' is replaced by '.' */
675 for (i = 0; i < s->value->header.size; i++) {
676 if (s->value->data[i] == '/') s->value->data[i] = '.';
684 * Class: java/lang/Class
685 * Method: getProtectionDomain0
686 * Signature: ()Ljava/security/ProtectionDomain;
688 JNIEXPORT java_security_ProtectionDomain* JNICALL Java_java_lang_VMClass_getProtectionDomain0(JNIEnv *env, java_lang_Class *this)
690 log_text("Java_java_lang_VMClass_getProtectionDomain0");
696 * Class: java/lang/Class
698 * Signature: ()[Ljava/lang/Object;
700 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getSigners(JNIEnv *env, java_lang_Class *this)
702 log_text("Java_java_lang_VMClass_getSigners");
708 * Class: java/lang/Class
709 * Method: getSuperclass
710 * Signature: ()Ljava/lang/Class;
712 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, java_lang_VMClass *this)
714 classinfo *cl = (classinfo *) this->vmData;
715 classinfo *c = cl->super;
720 use_class_as_object (c);
722 return (java_lang_Class *) c;
727 * Class: java/lang/Class
731 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, java_lang_VMClass *this)
733 classinfo *c = (classinfo *) this->vmData;
735 return c->vftbl->arraydesc != NULL;
740 * Class: java/lang/Class
741 * Method: isAssignableFrom
742 * Signature: (Ljava/lang/Class;)Z
744 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, java_lang_VMClass *this, java_lang_Class *sup)
746 /* log_text("Java_java_lang_VMClass_isAssignableFrom");*/
750 panic("sup->vmClass is NULL in VMClass.isAssignableFrom");
753 return (*env)->IsAssignableForm(env, (jclass) sup, (jclass) (this->vmData));
758 * Class: java/lang/Class
760 * Signature: (Ljava/lang/Object;)Z
762 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, java_lang_VMClass *this, java_lang_Object *obj)
764 classinfo *clazz = (classinfo *) this->vmData;
766 return (*env)->IsInstanceOf(env, (jobject) obj, clazz);
771 * Class: java/lang/Class
772 * Method: isInterface
775 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, java_lang_VMClass *this)
777 classinfo *c = (classinfo *) this->vmData;
779 if (c->flags & ACC_INTERFACE)
787 * Class: java/lang/Class
788 * Method: isPrimitive
791 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, java_lang_VMClass *this)
794 classinfo *c = (classinfo *) this->vmData;
796 /* search table of primitive classes */
797 for (i = 0; i < PRIMITIVETYPE_COUNT; i++)
798 if (primitivetype_table[i].class_primitive == c)
806 * Class: java/lang/Class
807 * Method: registerNatives
810 JNIEXPORT void JNICALL Java_java_lang_VMClass_registerNatives(JNIEnv *env)
817 * Class: java/lang/Class
818 * Method: setProtectionDomain0
819 * Signature: (Ljava/security/ProtectionDomain;)V
821 JNIEXPORT void JNICALL Java_java_lang_VMClass_setProtectionDomain0(JNIEnv *env, java_lang_Class *this, java_security_ProtectionDomain *par1)
824 log_text("Java_java_lang_VMClass_setProtectionDomain0");
829 * Class: java/lang/Class
831 * Signature: ([Ljava/lang/Object;)V
833 JNIEXPORT void JNICALL Java_java_lang_VMClass_setSigners(JNIEnv *env, java_lang_Class *this, java_objectarray *par1)
836 log_text("Java_java_lang_VMClass_setSigners");
841 * Class: java_lang_VMClass
845 JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, java_lang_VMClass *this)
847 log_text("Java_java_lang_VMClass_initialize");
852 * Class: java_lang_VMClass
853 * Method: loadArrayClass
854 * Signature: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;
856 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_loadArrayClass(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_ClassLoader* par2)
858 log_text("Java_java_lang_VMClass_loadArrayClass");
865 * Class: java_lang_VMClass
866 * Method: throwException
867 * Signature: (Ljava/lang/Throwable;)V
869 JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, java_lang_Throwable *par1)
871 log_text("Won't implement VmClass.throwException. (Not needed according to spec) Is only needed to be bug compatible with the SUN VM. (according to gnuclasspath team)");
876 * Class: java_lang_VMClass
880 JNIEXPORT void JNICALL Java_java_lang_VMClass_step7(JNIEnv *env, java_lang_VMClass *this)
882 log_text("Java_java_lang_VMClass_step7");
887 * Class: java_lang_VMClass
891 JNIEXPORT void JNICALL Java_java_lang_VMClass_step8(JNIEnv *env, java_lang_VMClass *this)
893 log_text("Java_java_lang_VMClass_step8");
898 * Class: java_lang_VMClass
899 * Method: isInitialized
902 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInitialized(JNIEnv *env, java_lang_VMClass *this)
904 log_text("Java_java_lang_VMClass_isInitialized");
911 * Class: java_lang_VMClass
912 * Method: setInitialized
915 JNIEXPORT void JNICALL Java_java_lang_VMClass_setInitialized(JNIEnv *env, java_lang_VMClass *this)
917 log_text("Java_java_lang_VMClass_setInitialized");
922 * These are local overrides for various environment variables in Emacs.
923 * Please do not remove this and leave it at the end of the file, where
924 * Emacs will automagically detect them.
925 * ---------------------------------------------------------------------
928 * indent-tabs-mode: t