Line data Source code
1 : /* src/native/vm/gnuclasspath/java_lang_VMClass.cpp
2 :
3 : Copyright (C) 2006-2013
4 : CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 :
6 : This file is part of CACAO.
7 :
8 : This program is free software; you can redistribute it and/or
9 : modify it under the terms of the GNU General Public License as
10 : published by the Free Software Foundation; either version 2, or (at
11 : your option) any later version.
12 :
13 : This program is distributed in the hope that it will be useful, but
14 : WITHOUT ANY WARRANTY; without even the implied warranty of
15 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 : General Public License for more details.
17 :
18 : You should have received a copy of the GNU General Public License
19 : along with this program; if not, write to the Free Software
20 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 : 02110-1301, USA.
22 :
23 : */
24 :
25 :
26 :
27 : #include "config.h"
28 :
29 : #include <stdint.h>
30 :
31 : #include "native/jni.hpp"
32 : #include "native/llni.hpp"
33 : #include "native/native.hpp"
34 :
35 : #if defined(ENABLE_JNI_HEADERS)
36 : # include "native/vm/include/java_lang_VMClass.h"
37 : #endif
38 :
39 : #include "vm/class.hpp"
40 : #include "vm/exceptions.hpp"
41 : #include "vm/globals.hpp"
42 : #include "vm/initialize.hpp"
43 : #include "vm/javaobjects.hpp"
44 : #include "vm/string.hpp"
45 : #include "vm/utf8.hpp"
46 :
47 : #if defined(ENABLE_ANNOTATIONS)
48 : #include "vm/annotation.hpp"
49 : #include "vm/vm.hpp"
50 : #endif
51 :
52 :
53 : // Native functions are exported as C functions.
54 : extern "C" {
55 :
56 : /*
57 : * Class: java/lang/VMClass
58 : * Method: isInstance
59 : * Signature: (Ljava/lang/Class;Ljava/lang/Object;)Z
60 : */
61 770 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, jclass klass, jobject o)
62 : {
63 : classinfo *c;
64 : java_handle_t *h;
65 :
66 770 : c = LLNI_classinfo_unwrap(klass);
67 770 : h = (java_handle_t *) o;
68 :
69 770 : return class_is_instance(c, h);
70 : }
71 :
72 :
73 : /*
74 : * Class: java/lang/VMClass
75 : * Method: isAssignableFrom
76 : * Signature: (Ljava/lang/Class;Ljava/lang/Class;)Z
77 : */
78 1024 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, jclass klass, jclass c)
79 : {
80 : classinfo *to;
81 : classinfo *from;
82 :
83 1024 : to = LLNI_classinfo_unwrap(klass);
84 1024 : from = LLNI_classinfo_unwrap(c);
85 :
86 1024 : if (from == NULL) {
87 0 : exceptions_throw_nullpointerexception();
88 0 : return 0;
89 : }
90 :
91 1024 : return class_is_assignable_from(to, from);
92 : }
93 :
94 :
95 : /*
96 : * Class: java/lang/VMClass
97 : * Method: isInterface
98 : * Signature: (Ljava/lang/Class;)Z
99 : */
100 29 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, jclass klass)
101 : {
102 : classinfo *c;
103 :
104 29 : c = LLNI_classinfo_unwrap(klass);
105 :
106 29 : return class_is_interface(c);
107 : }
108 :
109 :
110 : /*
111 : * Class: java/lang/VMClass
112 : * Method: isPrimitive
113 : * Signature: (Ljava/lang/Class;)Z
114 : */
115 296262 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, jclass klass)
116 : {
117 : classinfo *c;
118 :
119 296262 : c = LLNI_classinfo_unwrap(klass);
120 :
121 296262 : return class_is_primitive(c);
122 : }
123 :
124 :
125 : /*
126 : * Class: java/lang/VMClass
127 : * Method: getName
128 : * Signature: (Ljava/lang/Class;)Ljava/lang/String;
129 : */
130 3997 : JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, jclass klass)
131 : {
132 : classinfo* c;
133 :
134 3997 : c = LLNI_classinfo_unwrap(klass);
135 :
136 3997 : return (jstring) class_get_classname(c);
137 : }
138 :
139 :
140 : /*
141 : * Class: java/lang/VMClass
142 : * Method: getSuperclass
143 : * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
144 : */
145 929 : JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, jclass klass)
146 : {
147 : classinfo *c;
148 : classinfo *super;
149 :
150 929 : c = LLNI_classinfo_unwrap(klass);
151 :
152 929 : super = class_get_superclass(c);
153 :
154 929 : return (jclass) LLNI_classinfo_wrap(super);
155 : }
156 :
157 :
158 : /*
159 : * Class: java/lang/VMClass
160 : * Method: getInterfaces
161 : * Signature: (Ljava/lang/Class;)[Ljava/lang/Class;
162 : */
163 94 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, jclass klass)
164 : {
165 : classinfo *c;
166 : java_handle_objectarray_t *oa;
167 :
168 94 : c = LLNI_classinfo_unwrap(klass);
169 :
170 94 : oa = class_get_interfaces(c);
171 :
172 94 : return (jobjectArray) oa;
173 : }
174 :
175 :
176 : /*
177 : * Class: java/lang/VMClass
178 : * Method: getComponentType
179 : * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
180 : */
181 2161 : JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, jclass klass)
182 : {
183 : classinfo *c;
184 : classinfo *component;
185 :
186 2161 : c = LLNI_classinfo_unwrap(klass);
187 :
188 2161 : component = class_get_componenttype(c);
189 :
190 2161 : return (jclass) LLNI_classinfo_wrap(component);
191 : }
192 :
193 :
194 : /*
195 : * Class: java/lang/VMClass
196 : * Method: getModifiers
197 : * Signature: (Ljava/lang/Class;Z)I
198 : */
199 441 : JNIEXPORT jint JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, jclass klass, jboolean ignoreInnerClassesAttrib)
200 : {
201 : classinfo *c;
202 : int32_t flags;
203 :
204 441 : c = LLNI_classinfo_unwrap(klass);
205 :
206 441 : flags = class_get_modifiers(c, ignoreInnerClassesAttrib);
207 :
208 441 : return flags;
209 : }
210 :
211 :
212 : /*
213 : * Class: java/lang/VMClass
214 : * Method: getDeclaringClass
215 : * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
216 : */
217 14 : JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, jclass klass)
218 : {
219 : classinfo *c;
220 : classinfo *dc;
221 :
222 14 : c = LLNI_classinfo_unwrap(klass);
223 :
224 14 : dc = class_get_declaringclass(c);
225 :
226 14 : return (jclass) LLNI_classinfo_wrap(dc);
227 : }
228 :
229 :
230 : /*
231 : * Class: java/lang/VMClass
232 : * Method: getDeclaredClasses
233 : * Signature: (Ljava/lang/Class;Z)[Ljava/lang/Class;
234 : */
235 0 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
236 : {
237 : classinfo *c;
238 : java_handle_objectarray_t *oa;
239 :
240 0 : c = LLNI_classinfo_unwrap(klass);
241 :
242 0 : oa = class_get_declaredclasses(c, publicOnly);
243 :
244 0 : return (jobjectArray) oa;
245 : }
246 :
247 :
248 : /*
249 : * Class: java/lang/VMClass
250 : * Method: getDeclaredFields
251 : * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;
252 : */
253 219 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
254 : {
255 : classinfo *c;
256 : java_handle_objectarray_t *oa;
257 :
258 219 : c = LLNI_classinfo_unwrap(klass);
259 :
260 219 : oa = class_get_declaredfields(c, publicOnly);
261 :
262 219 : return (jobjectArray) oa;
263 : }
264 :
265 :
266 : /*
267 : * Class: java/lang/VMClass
268 : * Method: getDeclaredMethods
269 : * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;
270 : */
271 753 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
272 : {
273 : classinfo *c;
274 : java_handle_objectarray_t *oa;
275 :
276 753 : c = LLNI_classinfo_unwrap(klass);
277 :
278 753 : oa = class_get_declaredmethods(c, publicOnly);
279 :
280 753 : return (jobjectArray) oa;
281 : }
282 :
283 :
284 : /*
285 : * Class: java/lang/VMClass
286 : * Method: getDeclaredConstructors
287 : * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;
288 : */
289 566 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
290 : {
291 : classinfo *c;
292 : java_handle_objectarray_t *oa;
293 :
294 566 : c = LLNI_classinfo_unwrap(klass);
295 :
296 566 : oa = class_get_declaredconstructors(c, publicOnly);
297 :
298 566 : return (jobjectArray) oa;
299 : }
300 :
301 :
302 : /*
303 : * Class: java/lang/VMClass
304 : * Method: getClassLoader
305 : * Signature: (Ljava/lang/Class;)Ljava/lang/ClassLoader;
306 : */
307 1020 : JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, jclass klass)
308 : {
309 : classinfo *c;
310 : classloader_t *cl;
311 :
312 1020 : c = LLNI_classinfo_unwrap(klass);
313 1020 : cl = class_get_classloader(c);
314 :
315 1020 : return (jobject) cl;
316 : }
317 :
318 :
319 : /*
320 : * Class: java/lang/VMClass
321 : * Method: forName
322 : * Signature: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
323 : */
324 1009 : JNIEXPORT jclass JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, jstring name, jboolean initialize, jobject loader)
325 : {
326 : classloader_t *cl;
327 1009 : JavaString sname;
328 1009 : Utf8String ufile;
329 1009 : Utf8String uname;
330 : classinfo *c;
331 :
332 1009 : sname = name;
333 :
334 1009 : cl = loader_hashtable_classloader_add((java_handle_t *) loader);
335 :
336 : /* illegal argument */
337 :
338 1009 : if (name == NULL) {
339 0 : exceptions_throw_nullpointerexception();
340 0 : return NULL;
341 : }
342 :
343 : /* create utf string in which '.' is replaced by '/' */
344 :
345 1009 : ufile = sname.to_utf8_dot_to_slash();
346 1009 : uname = sname.to_utf8();
347 :
348 : /* name must not contain '/' (mauve test) */
349 :
350 : // FIXME Move this check into a function.
351 23652 : for (const char *it = uname.begin(), *end = uname.end(); it != end; ++it) {
352 22643 : if (*it == '/') {
353 0 : exceptions_throw_classnotfoundexception(uname);
354 0 : return NULL;
355 : }
356 : }
357 :
358 : /* try to load, ... */
359 :
360 1009 : c = load_class_from_classloader(ufile, cl);
361 :
362 1009 : if (c == NULL)
363 148 : return NULL;
364 :
365 : /* link, ... */
366 :
367 861 : if (!link_class(c))
368 0 : return NULL;
369 :
370 : /* ...and initialize it, if required */
371 :
372 861 : if (initialize)
373 185 : if (!initialize_class(c))
374 0 : return NULL;
375 :
376 861 : return (jclass) LLNI_classinfo_wrap(c);
377 : }
378 :
379 :
380 : /*
381 : * Class: java/lang/VMClass
382 : * Method: isArray
383 : * Signature: (Ljava/lang/Class;)Z
384 : */
385 2105 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, jclass klass)
386 : {
387 : classinfo *c;
388 :
389 2105 : c = LLNI_classinfo_unwrap(klass);
390 :
391 2105 : return class_is_array(c);
392 : }
393 :
394 :
395 : /*
396 : * Class: java/lang/VMClass
397 : * Method: throwException
398 : * Signature: (Ljava/lang/Throwable;)V
399 : */
400 0 : JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, jobject t)
401 : {
402 : java_handle_t *o;
403 :
404 0 : o = (java_handle_t *) t;
405 :
406 0 : exceptions_set_exception(o);
407 0 : }
408 :
409 :
410 : #if defined(ENABLE_ANNOTATIONS)
411 : /*
412 : * Class: java/lang/VMClass
413 : * Method: getDeclaredAnnotations
414 : * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
415 : */
416 778 : JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, jclass klass)
417 : {
418 : static methodinfo* m_parseAnnotationsIntoArray = NULL;
419 :
420 778 : if (klass == NULL) {
421 0 : exceptions_throw_nullpointerexception();
422 0 : return NULL;
423 : }
424 :
425 778 : classinfo* c = LLNI_classinfo_unwrap(klass);
426 :
427 : /* get annotations: */
428 778 : java_handle_bytearray_t* annotations = class_get_annotations(c);
429 :
430 778 : java_handle_t* h = native_new_and_init(class_sun_reflect_ConstantPool);
431 :
432 778 : if (h == NULL)
433 0 : return NULL;
434 :
435 778 : sun_reflect_ConstantPool cp(h);
436 778 : cp.set_constantPoolOop(klass);
437 :
438 : /* only resolve the parser method the first time */
439 778 : if (m_parseAnnotationsIntoArray == NULL) {
440 3 : Utf8String utf_parseAnnotationsIntoArray = Utf8String::from_utf8("parseAnnotationsIntoArray");
441 : Utf8String utf_desc = Utf8String::from_utf8("([BLsun/reflect/ConstantPool;Ljava/lang/Class;)"
442 3 : "[Ljava/lang/annotation/Annotation;");
443 :
444 3 : if (utf_parseAnnotationsIntoArray == NULL || utf_desc == NULL) {
445 : /* out of memory */
446 0 : return NULL;
447 : }
448 :
449 : m_parseAnnotationsIntoArray = class_resolveclassmethod(
450 : class_sun_reflect_annotation_AnnotationParser,
451 : utf_parseAnnotationsIntoArray,
452 : utf_desc,
453 : class_java_lang_Class,
454 3 : true);
455 :
456 3 : if (m_parseAnnotationsIntoArray == NULL) {
457 : /* method not found */
458 0 : return NULL;
459 : }
460 : }
461 :
462 778 : java_handle_objectarray_t* oa = (java_handle_objectarray_t*) vm_call_method(m_parseAnnotationsIntoArray, NULL, annotations, cp.get_handle(), klass);
463 778 : return (jobjectArray) oa;
464 : }
465 : #endif
466 :
467 :
468 : /*
469 : * Class: java/lang/VMClass
470 : * Method: getEnclosingClass
471 : * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
472 : */
473 18 : JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, jclass klass)
474 : {
475 : classinfo *c;
476 : classinfo *result;
477 :
478 18 : c = LLNI_classinfo_unwrap(klass);
479 :
480 18 : result = class_get_enclosingclass(c);
481 :
482 18 : return (jclass) LLNI_classinfo_wrap(result);
483 : }
484 :
485 :
486 : /*
487 : * Class: java/lang/VMClass
488 : * Method: getEnclosingConstructor
489 : * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
490 : */
491 12 : JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, jclass klass)
492 : {
493 : classinfo* c;
494 : java_handle_t* h;
495 :
496 12 : c = LLNI_classinfo_unwrap(klass);
497 12 : h = class_get_enclosingconstructor(c);
498 :
499 12 : return (jobject) h;
500 : }
501 :
502 :
503 : /*
504 : * Class: java/lang/VMClass
505 : * Method: getEnclosingMethod
506 : * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Method;
507 : */
508 12 : JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, jclass klass)
509 : {
510 : classinfo* c;
511 : java_handle_t* h;
512 :
513 12 : c = LLNI_classinfo_unwrap(klass);
514 12 : h = class_get_enclosingmethod(c);
515 :
516 12 : return (jobject) h;
517 : }
518 :
519 :
520 : /*
521 : * Class: java/lang/VMClass
522 : * Method: getClassSignature
523 : * Signature: (Ljava/lang/Class;)Ljava/lang/String;
524 : */
525 0 : JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getClassSignature(JNIEnv *env, jclass clazz, jclass klass)
526 : {
527 0 : classinfo *c = LLNI_classinfo_unwrap(klass);
528 0 : Utf8String u = class_get_signature(c);
529 :
530 : /* in error case return NULL */
531 :
532 0 : if (u == NULL)
533 0 : return NULL;
534 :
535 0 : return (jstring) JavaString::from_utf8(u);
536 : }
537 :
538 :
539 : /*
540 : * Class: java/lang/VMClass
541 : * Method: isAnonymousClass
542 : * Signature: (Ljava/lang/Class;)Z
543 : */
544 33 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, jclass klass)
545 : {
546 33 : return class_is_anonymousclass(LLNI_classinfo_unwrap(klass));
547 : }
548 :
549 :
550 : /*
551 : * Class: java/lang/VMClass
552 : * Method: isLocalClass
553 : * Signature: (Ljava/lang/Class;)Z
554 : */
555 26 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, jclass klass)
556 : {
557 26 : return class_is_localclass(LLNI_classinfo_unwrap(klass));
558 : }
559 :
560 :
561 : /*
562 : * Class: java/lang/VMClass
563 : * Method: isMemberClass
564 : * Signature: (Ljava/lang/Class;)Z
565 : */
566 15 : JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, jclass klass)
567 : {
568 15 : return class_is_memberclass(LLNI_classinfo_unwrap(klass));
569 : }
570 :
571 : } // extern "C"
572 :
573 :
574 : /* native methods implemented by this file ************************************/
575 :
576 : static JNINativeMethod methods[] = {
577 : { (char*) "isInstance", (char*) "(Ljava/lang/Class;Ljava/lang/Object;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInstance },
578 : { (char*) "isAssignableFrom", (char*) "(Ljava/lang/Class;Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAssignableFrom },
579 : { (char*) "isInterface", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isInterface },
580 : { (char*) "isPrimitive", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isPrimitive },
581 : { (char*) "getName", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getName },
582 : { (char*) "getSuperclass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getSuperclass },
583 : { (char*) "getInterfaces", (char*) "(Ljava/lang/Class;)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getInterfaces },
584 : { (char*) "getComponentType", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getComponentType },
585 : { (char*) "getModifiers", (char*) "(Ljava/lang/Class;Z)I", (void*) (uintptr_t) &Java_java_lang_VMClass_getModifiers },
586 : { (char*) "getDeclaringClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaringClass },
587 : { (char*) "getDeclaredClasses", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredClasses },
588 : { (char*) "getDeclaredFields", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredFields },
589 : { (char*) "getDeclaredMethods", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredMethods },
590 : { (char*) "getDeclaredConstructors", (char*) "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredConstructors },
591 : { (char*) "getClassLoader", (char*) "(Ljava/lang/Class;)Ljava/lang/ClassLoader;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassLoader },
592 : { (char*) "forName", (char*) "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_forName },
593 : { (char*) "isArray", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isArray },
594 : { (char*) "throwException", (char*) "(Ljava/lang/Throwable;)V", (void*) (uintptr_t) &Java_java_lang_VMClass_throwException },
595 : #if defined(ENABLE_ANNOTATIONS)
596 : { (char*) "getDeclaredAnnotations", (char*) "(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;", (void*) (uintptr_t) &Java_java_lang_VMClass_getDeclaredAnnotations },
597 : #endif
598 : { (char*) "getEnclosingClass", (char*) "(Ljava/lang/Class;)Ljava/lang/Class;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingClass },
599 : { (char*) "getEnclosingConstructor", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingConstructor },
600 : { (char*) "getEnclosingMethod", (char*) "(Ljava/lang/Class;)Ljava/lang/reflect/Method;", (void*) (uintptr_t) &Java_java_lang_VMClass_getEnclosingMethod },
601 : { (char*) "getClassSignature", (char*) "(Ljava/lang/Class;)Ljava/lang/String;", (void*) (uintptr_t) &Java_java_lang_VMClass_getClassSignature },
602 : { (char*) "isAnonymousClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isAnonymousClass },
603 : { (char*) "isLocalClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isLocalClass },
604 : { (char*) "isMemberClass", (char*) "(Ljava/lang/Class;)Z", (void*) (uintptr_t) &Java_java_lang_VMClass_isMemberClass },
605 : };
606 :
607 :
608 : /* _Jv_java_lang_VMClass_init **************************************************
609 :
610 : Register native functions.
611 :
612 : *******************************************************************************/
613 :
614 163 : void _Jv_java_lang_VMClass_init(void)
615 : {
616 163 : Utf8String u = Utf8String::from_utf8("java/lang/VMClass");
617 :
618 163 : NativeMethods& nm = VM::get_current()->get_nativemethods();
619 163 : nm.register_methods(u, methods, NATIVE_METHODS_COUNT);
620 163 : }
621 :
622 :
623 : /*
624 : * These are local overrides for various environment variables in Emacs.
625 : * Please do not remove this and leave it at the end of the file, where
626 : * Emacs will automagically detect them.
627 : * ---------------------------------------------------------------------
628 : * Local variables:
629 : * mode: c++
630 : * indent-tabs-mode: t
631 : * c-basic-offset: 4
632 : * tab-width: 4
633 : * End:
634 : * vim:noexpandtab:sw=4:ts=4:
635 : */
|