1 /* src/native/vm/java_lang_Class.c - java/lang/Class
3 Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
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., 51 Franklin Street, Fifth Floor, Boston, MA
25 $Id: java_lang_Class.c 8137 2007-06-22 16:41:36Z michi $
37 #include "mm/memory.h"
39 #include "native/jni.h"
40 #include "native/native.h"
42 /* keep this order of the native includes */
44 #include "native/include/java_lang_String.h"
46 #if defined(ENABLE_JAVASE)
47 # if defined(WITH_CLASSPATH_SUN)
48 # include "native/include/java_nio_ByteBuffer.h" /* required by j.l.CL */
50 # include "native/include/java_lang_ClassLoader.h"
53 #include "native/include/java_lang_Object.h"
54 #include "native/include/java_lang_Class.h"
56 #if defined(ENABLE_JAVASE)
57 # include "native/include/java_lang_reflect_Constructor.h"
58 # include "native/include/java_lang_reflect_Field.h"
59 # include "native/include/java_lang_reflect_Method.h"
62 #include "native/vm/java_lang_Class.h"
63 #include "native/vm/java_lang_String.h"
65 #include "toolbox/logging.h"
67 #include "vm/builtin.h"
68 #include "vm/exceptions.h"
69 #include "vm/global.h"
70 #include "vm/initialize.h"
71 #include "vm/resolve.h"
72 #include "vm/stringlocal.h"
74 #include "vmcore/class.h"
75 #include "vmcore/loader.h"
76 #include "vmcore/primitive.h"
80 * Class: java/lang/Class
82 * Signature: ()Ljava/lang/String;
84 java_lang_String *_Jv_java_lang_Class_getName(java_lang_Class *klass)
90 c = (classinfo *) klass;
92 /* create a java string */
94 s = (java_lang_String *) javastring_new(c->name);
99 /* return string where '/' is replaced by '.' */
101 for (i = 0; i < s->value->header.size; i++) {
102 if (s->value->data[i] == '/')
103 s->value->data[i] = '.';
111 * Class: java/lang/Class
113 * Signature: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
115 #if defined(ENABLE_JAVASE)
116 java_lang_Class *_Jv_java_lang_Class_forName(java_lang_String *name, s4 initialize, java_lang_ClassLoader *loader)
117 #elif defined(ENABLE_JAVAME_CLDC1_1)
118 java_lang_Class *_Jv_java_lang_Class_forName(java_lang_String *name)
121 #if defined(ENABLE_JAVASE)
130 #if defined(ENABLE_JAVASE)
131 cl = loader_hashtable_classloader_add((java_objectheader *) loader);
134 /* illegal argument */
137 exceptions_throw_nullpointerexception();
141 /* create utf string in which '.' is replaced by '/' */
143 ufile = javastring_toutf((java_objectheader *) name, true);
144 uname = javastring_toutf((java_objectheader *) name, false);
146 /* name must not contain '/' (mauve test) */
148 for (i = 0, pos = name->value->data + name->offset; i < name->count; i++, pos++) {
150 exceptions_throw_classnotfoundexception(uname);
155 /* try to load, ... */
157 #if defined(ENABLE_JAVASE)
158 c = load_class_from_classloader(ufile, cl);
159 #elif defined(ENABLE_JAVAME_CLDC1_1)
160 c = load_class_bootstrap(ufile);
171 /* ...and initialize it, if required */
173 #if defined(ENABLE_JAVASE)
176 if (!initialize_class(c))
179 return (java_lang_Class *) c;
184 * Class: java/lang/Class
186 * Signature: (Ljava/lang/Object;)Z
188 s4 _Jv_java_lang_Class_isInstance(java_lang_Class *klass, java_lang_Object *o)
191 java_objectheader *ob;
193 c = (classinfo *) klass;
194 ob = (java_objectheader *) o;
196 if (!(c->state & CLASS_LINKED))
200 return builtin_instanceof(ob, c);
205 * Class: java/lang/Class
206 * Method: isAssignableFrom
207 * Signature: (Ljava/lang/Class;)Z
209 s4 _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class *c)
214 kc = (classinfo *) klass;
215 cc = (classinfo *) c;
218 exceptions_throw_nullpointerexception();
222 if (!(kc->state & CLASS_LINKED))
226 if (!(cc->state & CLASS_LINKED))
230 return class_isanysubclass(cc, kc);
235 * Class: java/lang/Class
236 * Method: isInterface
239 s4 _Jv_java_lang_Class_isInterface(java_lang_Class *klass)
243 c = (classinfo *) klass;
245 if (c->flags & ACC_INTERFACE)
252 #if defined(ENABLE_JAVASE)
255 * Class: java/lang/Class
256 * Method: isPrimitive
259 s4 _Jv_java_lang_Class_isPrimitive(java_lang_Class *klass)
264 c = (classinfo *) klass;
266 result = primitive_class_is_primitive(c);
273 * Class: java/lang/Class
274 * Method: getSuperclass
275 * Signature: ()Ljava/lang/Class;
277 java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass)
282 c = (classinfo *) klass;
284 /* for java.lang.Object, primitive and Void classes we return NULL */
289 /* for interfaces we also return NULL */
291 if (c->flags & ACC_INTERFACE)
294 /* we may have to resolve the super class reference */
296 if ((sc = resolve_classref_or_classinfo_eager(c->super, true)) == NULL)
299 /* store the resolution */
303 return (java_lang_Class *) sc;
308 * Class: java/lang/Class
309 * Method: getInterfaces
310 * Signature: ()[Ljava/lang/Class;
312 java_objectarray *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass)
316 java_objectarray *oa;
319 c = (classinfo *) klass;
321 if (!(c->state & CLASS_LINKED))
325 oa = builtin_anewarray(c->interfacescount, class_java_lang_Class);
330 for (i = 0; i < c->interfacescount; i++) {
331 ic = c->interfaces[i].cls;
333 oa->data[i] = (java_objectheader *) ic;
341 * Class: java/lang/Class
342 * Method: getComponentType
343 * Signature: ()Ljava/lang/Class;
345 java_lang_Class *_Jv_java_lang_Class_getComponentType(java_lang_Class *klass)
349 arraydescriptor *desc;
351 c = (classinfo *) klass;
353 /* XXX maybe we could find a way to do this without linking. */
354 /* This way should be safe and easy, however. */
356 if (!(c->state & CLASS_LINKED))
360 desc = c->vftbl->arraydesc;
365 if (desc->arraytype == ARRAYTYPE_OBJECT)
366 comp = desc->componentvftbl->class;
368 comp = primitive_class_get_by_type(desc->arraytype);
370 return (java_lang_Class *) comp;
375 * Class: java/lang/Class
376 * Method: getModifiers
379 s4 _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClassesAttrib)
382 classref_or_classinfo inner;
383 classref_or_classinfo outer;
387 c = (classinfo *) klass;
389 if (!ignoreInnerClassesAttrib && (c->innerclasscount != 0)) {
390 /* search for passed class as inner class */
392 for (i = 0; i < c->innerclasscount; i++) {
393 inner = c->innerclass[i].inner_class;
394 outer = c->innerclass[i].outer_class;
396 /* Check if inner is a classref or a real class and get
397 the name of the structure */
399 innername = IS_CLASSREF(inner) ? inner.ref->name : inner.cls->name;
401 /* innerclass is this class */
403 if (innername == c->name) {
404 /* has the class actually an outer class? */
407 /* return flags got from the outer class file */
408 return c->innerclass[i].flags & ACC_CLASS_REFLECT_MASK;
410 return c->flags & ACC_CLASS_REFLECT_MASK;
415 /* passed class is no inner class or it was not requested */
417 return c->flags & ACC_CLASS_REFLECT_MASK;
422 * Class: java/lang/Class
423 * Method: getDeclaringClass
424 * Signature: ()Ljava/lang/Class;
426 java_lang_Class *_Jv_java_lang_Class_getDeclaringClass(java_lang_Class *klass)
429 classref_or_classinfo inner;
434 c = (classinfo *) klass;
436 if (!primitive_class_is_primitive(c) && (c->name->text[0] != '[')) {
437 if (c->innerclasscount == 0) /* no innerclasses exist */
440 for (i = 0; i < c->innerclasscount; i++) {
441 inner = c->innerclass[i].inner_class;
443 /* check if inner_class is a classref or a real class and
444 get the class name from the structure */
446 innername = IS_CLASSREF(inner) ? inner.ref->name : inner.cls->name;
448 /* innerclass is this class */
450 if (innername == c->name) {
451 /* maybe the outer class is not loaded yet */
453 if ((outer = resolve_classref_or_classinfo_eager(
454 c->innerclass[i].outer_class,
458 if (!(outer->state & CLASS_LINKED))
459 if (!link_class(outer))
462 return (java_lang_Class *) outer;
467 /* return NULL for arrayclasses and primitive classes */
474 * Class: java/lang/Class
475 * Method: getDeclaredClasses
476 * Signature: (Z)[Ljava/lang/Class;
478 java_objectarray *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly)
481 classref_or_classinfo outer;
483 s4 declaredclasscount; /* number of declared classes */
484 s4 pos; /* current declared class */
485 java_objectarray *oa; /* array of declared classes */
488 c = (classinfo *) klass;
489 declaredclasscount = 0;
491 if (!primitive_class_is_primitive(c) && (c->name->text[0] != '[')) {
492 /* determine number of declared classes */
494 for (i = 0; i < c->innerclasscount; i++) {
495 outer = c->innerclass[i].outer_class;
497 /* check if outer_class is a classref or a real class and
498 get the class name from the structure */
500 outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name;
502 /* outer class is this class */
504 if ((outername == c->name) &&
505 ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC)))
506 declaredclasscount++;
510 /* allocate Class[] and check for OOM */
512 oa = builtin_anewarray(declaredclasscount, class_java_lang_Class);
517 for (i = 0, pos = 0; i < c->innerclasscount; i++) {
518 outer = c->innerclass[i].outer_class;
520 /* check if outer_class is a classref or a real class and
521 get the class name from the structure */
523 outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name;
525 /* outer class is this class */
527 if ((outername == c->name) &&
528 ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) {
531 if ((inner = resolve_classref_or_classinfo_eager(
532 c->innerclass[i].inner_class,
536 if (!(inner->state & CLASS_LINKED))
537 if (!link_class(inner))
540 oa->data[pos++] = (java_objectheader *) inner;
549 * Class: java/lang/Class
550 * Method: getDeclaredFields
551 * Signature: (Z)[Ljava/lang/reflect/Field;
553 java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly)
556 java_objectarray *oa; /* result: array of field-objects */
558 java_objectheader *o;
559 java_lang_reflect_Field *rf;
560 s4 public_fields; /* number of elements in field-array */
564 c = (classinfo *) klass;
566 /* determine number of fields */
568 for (i = 0, public_fields = 0; i < c->fieldscount; i++)
569 if ((c->fields[i].flags & ACC_PUBLIC) || (publicOnly == 0))
572 /* create array of fields */
574 oa = builtin_anewarray(public_fields, class_java_lang_reflect_Field);
579 /* get the fields and store in the array */
581 for (i = 0, pos = 0; i < c->fieldscount; i++) {
584 if ((f->flags & ACC_PUBLIC) || (publicOnly == 0)) {
585 /* create Field object */
587 o = native_new_and_init(class_java_lang_reflect_Field);
592 /* initialize instance fields */
594 rf = (java_lang_reflect_Field *) o;
596 #if defined(WITH_CLASSPATH_GNU)
598 rf->clazz = (java_lang_Class *) c;
600 /* The name needs to be interned */
601 /* XXX implement me better! */
603 rf->name = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(f->name));
606 #elif defined(WITH_CLASSPATH_SUN)
608 rf->clazz = (java_lang_Class *) c;
610 /* The name needs to be interned */
611 /* XXX implement me better! */
613 rf->name = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(f->name));
614 rf->type = (java_lang_Class *) field_get_type(f);
615 rf->modifiers = f->flags;
617 rf->signature = f->signature ? (java_lang_String *) javastring_new(f->signature) : NULL;
618 rf->annotations = NULL;
620 # error unknown classpath configuration
623 /* store object into array */
634 * Class: java/lang/Class
635 * Method: getDeclaredMethods
636 * Signature: (Z)[Ljava/lang/reflect/Method;
638 java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly)
641 java_objectheader *o;
642 java_lang_reflect_Method *rm;
643 java_objectarray *oa; /* result: array of Method-objects */
644 methodinfo *m; /* the current method to be represented */
645 s4 public_methods; /* number of public methods of the class */
649 c = (classinfo *) klass;
652 /* JOWENN: array classes do not declare methods according to mauve
653 test. It should be considered, if we should return to my old
654 clone method overriding instead of declaring it as a member
657 if (_Jv_java_lang_Class_isArray(klass))
658 return builtin_anewarray(0, class_java_lang_reflect_Method);
660 /* determine number of methods */
662 for (i = 0; i < c->methodscount; i++) {
665 if (((m->flags & ACC_PUBLIC) || (publicOnly == false)) &&
666 ((m->name != utf_init) && (m->name != utf_clinit)) &&
667 !(m->flags & ACC_MIRANDA))
671 oa = builtin_anewarray(public_methods, class_java_lang_reflect_Method);
676 for (i = 0, pos = 0; i < c->methodscount; i++) {
679 if (((m->flags & ACC_PUBLIC) || (publicOnly == false)) &&
680 ((m->name != utf_init) && (m->name != utf_clinit)) &&
681 !(m->flags & ACC_MIRANDA)) {
683 o = native_new_and_init(class_java_lang_reflect_Method);
688 /* initialize instance fields */
690 rm = (java_lang_reflect_Method *) o;
692 #if defined(WITH_CLASSPATH_GNU)
694 rm->clazz = (java_lang_Class *) m->class;
696 /* The name needs to be interned */
697 /* XXX implement me better! */
699 rm->name = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(m->name));
702 #elif defined(WITH_CLASSPATH_SUN)
704 rm->clazz = (java_lang_Class *) m->class;
706 /* The name needs to be interned */
707 /* XXX implement me better! */
709 rm->name = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(m->name));
710 rm->parameterTypes = method_get_parametertypearray(m);
711 rm->returnType = (java_lang_Class *) method_returntype_get(m);
712 rm->exceptionTypes = method_get_exceptionarray(m);
713 rm->modifiers = m->flags & ACC_CLASS_REFLECT_MASK;
715 rm->signature = m->signature ? (java_lang_String *) javastring_new(m->signature) : NULL;
716 rm->annotations = NULL;
717 rm->parameterAnnotations = NULL;
718 rm->annotationDefault = NULL;
721 # error unknown classpath configuration
724 /* store object into array */
735 * Class: java/lang/Class
736 * Method: getDeclaredConstructors
737 * Signature: (Z)[Ljava/lang/reflect/Constructor;
739 java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly)
742 methodinfo *m; /* the current method to be represented */
743 java_objectarray *oa; /* result: array of Method-objects */
744 java_objectheader *o;
745 java_lang_reflect_Constructor *rc;
746 s4 public_methods; /* number of public methods of the class */
750 c = (classinfo *) klass;
752 /* determine number of constructors */
754 for (i = 0, public_methods = 0; i < c->methodscount; i++) {
757 if (((m->flags & ACC_PUBLIC) || (publicOnly == 0)) &&
758 (m->name == utf_init))
762 oa = builtin_anewarray(public_methods, class_java_lang_reflect_Constructor);
767 for (i = 0, pos = 0; i < c->methodscount; i++) {
770 if (((m->flags & ACC_PUBLIC) || (publicOnly == 0)) &&
771 (m->name == utf_init)) {
773 o = native_new_and_init(class_java_lang_reflect_Constructor);
778 /* initialize instance fields */
780 rc = (java_lang_reflect_Constructor *) o;
782 #if defined(WITH_CLASSPATH_GNU)
784 rc->clazz = (java_lang_Class *) c;
787 #elif defined(WITH_CLASSPATH_SUN)
789 rc->clazz = (java_lang_Class *) c;
790 rc->parameterTypes = method_get_parametertypearray(m);
791 rc->exceptionTypes = method_get_exceptionarray(m);
792 rc->modifiers = m->flags & ACC_CLASS_REFLECT_MASK;
794 rc->signature = m->signature ? (java_lang_String *) javastring_new(m->signature) : NULL;
795 rc->annotations = NULL;
796 rc->parameterAnnotations = NULL;
799 # error unknown classpath configuration
802 /* store object into array */
813 * Class: java/lang/Class
814 * Method: getClassLoader
815 * Signature: ()Ljava/lang/ClassLoader;
817 java_lang_ClassLoader *_Jv_java_lang_Class_getClassLoader(java_lang_Class *klass)
821 c = (classinfo *) klass;
823 if (c->classloader == NULL)
826 return (java_lang_ClassLoader *) c->classloader->object;
829 #endif /* defined(ENABLE_JAVASE) */
833 * Class: java/lang/Class
837 s4 _Jv_java_lang_Class_isArray(java_lang_Class *klass)
841 c = (classinfo *) klass;
843 if (!(c->state & CLASS_LINKED))
847 return (c->vftbl->arraydesc != NULL);
851 #if defined(ENABLE_JAVASE)
854 * Class: java/lang/Class
855 * Method: throwException
856 * Signature: (Ljava/lang/Throwable;)V
858 void _Jv_java_lang_Class_throwException(java_lang_Throwable *t)
860 java_objectheader *o;
862 o = (java_objectheader *) t;
864 exceptions_set_exception(o);
870 * Class: java/lang/Class
871 * Method: getDeclaredAnnotations
872 * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
874 java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass)
881 * Class: java/lang/Class
882 * Method: getEnclosingClass
883 * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
885 java_lang_Class *_Jv_java_lang_Class_getEnclosingClass(java_lang_Class *klass)
888 classref_or_classinfo cr;
891 c = (classinfo *) klass;
893 /* get enclosing class */
895 cr = c->enclosingclass;
900 /* resolve the class if necessary */
902 if (IS_CLASSREF(cr)) {
903 ec = resolve_classref_eager(cr.ref);
911 return (java_lang_Class *) ec;
915 /* _Jv_java_lang_Class_getEnclosingMethod_intern *******************************
917 Helper function for _Jv_java_lang_Class_getEnclosingConstructor and
918 _Jv_java_lang_Class_getEnclosingMethod.
920 *******************************************************************************/
922 static methodinfo *_Jv_java_lang_Class_getEnclosingMethod_intern(classinfo *c)
924 classref_or_classinfo cr;
925 constant_nameandtype *cn;
929 /* get enclosing class and method */
931 cr = c->enclosingclass;
932 cn = c->enclosingmethod;
934 /* check for enclosing class and method */
942 /* resolve the class if necessary */
944 if (IS_CLASSREF(cr)) {
945 ec = resolve_classref_eager(cr.ref);
953 /* find method in enclosing class */
955 m = class_findmethod(ec, cn->name, cn->descriptor);
958 exceptions_throw_internalerror("Enclosing method doesn't exist");
967 * Class: java/lang/Class
968 * Method: getEnclosingConstructor
969 * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
971 java_lang_reflect_Constructor *_Jv_java_lang_Class_getEnclosingConstructor(java_lang_Class *klass)
975 java_objectheader *o;
976 java_lang_reflect_Constructor *rc;
978 c = (classinfo *) klass;
980 /* get enclosing method */
982 m = _Jv_java_lang_Class_getEnclosingMethod_intern(c);
987 /* check for <init> */
989 if (m->name != utf_init)
992 /* create java.lang.reflect.Constructor object */
994 o = native_new_and_init(class_java_lang_reflect_Constructor);
999 /* initialize instance fields */
1001 rc = (java_lang_reflect_Constructor *) o;
1003 rc->clazz = (java_lang_Class *) m->class;
1004 rc->slot = m - m->class->methods; /* calculate method slot */
1011 * Class: java/lang/Class
1012 * Method: getEnclosingMethod
1013 * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Method;
1015 java_lang_reflect_Method *_Jv_java_lang_Class_getEnclosingMethod(java_lang_Class *klass)
1019 java_objectheader *o;
1020 java_lang_reflect_Method *rm;
1022 c = (classinfo *) klass;
1024 /* get enclosing method */
1026 m = _Jv_java_lang_Class_getEnclosingMethod_intern(c);
1031 /* check for <init> */
1033 if (m->name == utf_init)
1036 /* create java.lang.reflect.Method object */
1038 o = native_new_and_init(class_java_lang_reflect_Method);
1043 /* initialize instance fields */
1045 rm = (java_lang_reflect_Method *) o;
1047 #if defined(WITH_CLASSPATH_GNU)
1048 rm->clazz = (java_lang_Class *) m->class;
1049 #elif defined(WITH_CLASSPATH_SUN)
1050 rm->clazz = (java_lang_Class *) m->class;
1052 # error unknown classpath configuration
1055 rm->name = (java_lang_String *) javastring_new(m->name);
1056 rm->slot = m - m->class->methods; /* calculate method slot */
1063 * Class: java/lang/Class
1064 * Method: getClassSignature
1065 * Signature: (Ljava/lang/Class;)Ljava/lang/String;
1067 java_lang_String *_Jv_java_lang_Class_getClassSignature(java_lang_Class* klass)
1070 java_objectheader *o;
1072 c = (classinfo *) klass;
1074 if (c->signature == NULL)
1077 o = javastring_new(c->signature);
1079 /* in error case o is NULL */
1081 return (java_lang_String *) o;
1087 * Class: java/lang/Class
1088 * Method: isAnonymousClass
1089 * Signature: (Ljava/lang/Class;)Z
1091 s4 _Jv_java_lang_Class_isAnonymousClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
1095 * Class: java/lang/VMClass
1096 * Method: isLocalClass
1097 * Signature: (Ljava/lang/Class;)Z
1099 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
1103 * Class: java/lang/VMClass
1104 * Method: isMemberClass
1105 * Signature: (Ljava/lang/Class;)Z
1107 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
1110 #endif /* ENABLE_JAVASE */
1114 * These are local overrides for various environment variables in Emacs.
1115 * Please do not remove this and leave it at the end of the file, where
1116 * Emacs will automagically detect them.
1117 * ---------------------------------------------------------------------
1120 * indent-tabs-mode: t
1124 * vim:noexpandtab:sw=4:ts=4: