CACAO
java_lang_VMClass.cpp
Go to the documentation of this file.
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 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  c = LLNI_classinfo_unwrap(klass);
67  h = (java_handle_t *) o;
68 
69  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 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  to = LLNI_classinfo_unwrap(klass);
84  from = LLNI_classinfo_unwrap(c);
85 
86  if (from == NULL) {
88  return 0;
89  }
90 
91  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 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, jclass klass)
101 {
102  classinfo *c;
103 
104  c = LLNI_classinfo_unwrap(klass);
105 
106  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 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, jclass klass)
116 {
117  classinfo *c;
118 
119  c = LLNI_classinfo_unwrap(klass);
120 
121  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  */
131 {
132  classinfo* c;
133 
134  c = LLNI_classinfo_unwrap(klass);
135 
136  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  */
146 {
147  classinfo *c;
148  classinfo *super;
149 
150  c = LLNI_classinfo_unwrap(klass);
151 
152  super = class_get_superclass(c);
153 
154  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  */
164 {
165  classinfo *c;
167 
168  c = LLNI_classinfo_unwrap(klass);
169 
170  oa = class_get_interfaces(c);
171 
172  return (jobjectArray) oa;
173 }
174 
175 
176 /*
177  * Class: java/lang/VMClass
178  * Method: getComponentType
179  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
180  */
182 {
183  classinfo *c;
184  classinfo *component;
185 
186  c = LLNI_classinfo_unwrap(klass);
187 
188  component = class_get_componenttype(c);
189 
190  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 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  c = LLNI_classinfo_unwrap(klass);
205 
206  flags = class_get_modifiers(c, ignoreInnerClassesAttrib);
207 
208  return flags;
209 }
210 
211 
212 /*
213  * Class: java/lang/VMClass
214  * Method: getDeclaringClass
215  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
216  */
218 {
219  classinfo *c;
220  classinfo *dc;
221 
222  c = LLNI_classinfo_unwrap(klass);
223 
224  dc = class_get_declaringclass(c);
225 
226  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 JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
236 {
237  classinfo *c;
239 
240  c = LLNI_classinfo_unwrap(klass);
241 
242  oa = class_get_declaredclasses(c, publicOnly);
243 
244  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 JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
254 {
255  classinfo *c;
257 
258  c = LLNI_classinfo_unwrap(klass);
259 
260  oa = class_get_declaredfields(c, publicOnly);
261 
262  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 JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
272 {
273  classinfo *c;
275 
276  c = LLNI_classinfo_unwrap(klass);
277 
278  oa = class_get_declaredmethods(c, publicOnly);
279 
280  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 JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
290 {
291  classinfo *c;
293 
294  c = LLNI_classinfo_unwrap(klass);
295 
296  oa = class_get_declaredconstructors(c, publicOnly);
297 
298  return (jobjectArray) oa;
299 }
300 
301 
302 /*
303  * Class: java/lang/VMClass
304  * Method: getClassLoader
305  * Signature: (Ljava/lang/Class;)Ljava/lang/ClassLoader;
306  */
308 {
309  classinfo *c;
310  classloader_t *cl;
311 
312  c = LLNI_classinfo_unwrap(klass);
313  cl = class_get_classloader(c);
314 
315  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 JNIEXPORT jclass JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, jstring name, jboolean initialize, jobject loader)
325 {
326  classloader_t *cl;
327  JavaString sname;
328  Utf8String ufile;
329  Utf8String uname;
330  classinfo *c;
331 
332  sname = name;
333 
335 
336  /* illegal argument */
337 
338  if (name == NULL) {
340  return NULL;
341  }
342 
343  /* create utf string in which '.' is replaced by '/' */
344 
345  ufile = sname.to_utf8_dot_to_slash();
346  uname = sname.to_utf8();
347 
348  /* name must not contain '/' (mauve test) */
349 
350  // FIXME Move this check into a function.
351  for (const char *it = uname.begin(), *end = uname.end(); it != end; ++it) {
352  if (*it == '/') {
354  return NULL;
355  }
356  }
357 
358  /* try to load, ... */
359 
360  c = load_class_from_classloader(ufile, cl);
361 
362  if (c == NULL)
363  return NULL;
364 
365  /* link, ... */
366 
367  if (!link_class(c))
368  return NULL;
369 
370  /* ...and initialize it, if required */
371 
372  if (initialize)
373  if (!initialize_class(c))
374  return NULL;
375 
376  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 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, jclass klass)
386 {
387  classinfo *c;
388 
389  c = LLNI_classinfo_unwrap(klass);
390 
391  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 JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, jobject t)
401 {
402  java_handle_t *o;
403 
404  o = (java_handle_t *) t;
405 
407 }
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  */
417 {
418  static methodinfo* m_parseAnnotationsIntoArray = NULL;
419 
420  if (klass == NULL) {
422  return NULL;
423  }
424 
425  classinfo* c = LLNI_classinfo_unwrap(klass);
426 
427  /* get annotations: */
429 
431 
432  if (h == NULL)
433  return NULL;
434 
436  cp.set_constantPoolOop(klass);
437 
438  /* only resolve the parser method the first time */
439  if (m_parseAnnotationsIntoArray == NULL) {
440  Utf8String utf_parseAnnotationsIntoArray = Utf8String::from_utf8("parseAnnotationsIntoArray");
441  Utf8String utf_desc = Utf8String::from_utf8("([BLsun/reflect/ConstantPool;Ljava/lang/Class;)"
442  "[Ljava/lang/annotation/Annotation;");
443 
444  if (utf_parseAnnotationsIntoArray == NULL || utf_desc == NULL) {
445  /* out of memory */
446  return NULL;
447  }
448 
449  m_parseAnnotationsIntoArray = class_resolveclassmethod(
451  utf_parseAnnotationsIntoArray,
452  utf_desc,
454  true);
455 
456  if (m_parseAnnotationsIntoArray == NULL) {
457  /* method not found */
458  return NULL;
459  }
460  }
461 
462  java_handle_objectarray_t* oa = (java_handle_objectarray_t*) vm_call_method(m_parseAnnotationsIntoArray, NULL, annotations, cp.get_handle(), klass);
463  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  */
474 {
475  classinfo *c;
476  classinfo *result;
477 
478  c = LLNI_classinfo_unwrap(klass);
479 
480  result = class_get_enclosingclass(c);
481 
482  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  */
492 {
493  classinfo* c;
494  java_handle_t* h;
495 
496  c = LLNI_classinfo_unwrap(klass);
498 
499  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  */
509 {
510  classinfo* c;
511  java_handle_t* h;
512 
513  c = LLNI_classinfo_unwrap(klass);
515 
516  return (jobject) h;
517 }
518 
519 
520 /*
521  * Class: java/lang/VMClass
522  * Method: getClassSignature
523  * Signature: (Ljava/lang/Class;)Ljava/lang/String;
524  */
526 {
527  classinfo *c = LLNI_classinfo_unwrap(klass);
529 
530  /* in error case return NULL */
531 
532  if (u == NULL)
533  return NULL;
534 
535  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 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, jclass klass)
545 {
547 }
548 
549 
550 /*
551  * Class: java/lang/VMClass
552  * Method: isLocalClass
553  * Signature: (Ljava/lang/Class;)Z
554  */
555 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, jclass klass)
556 {
558 }
559 
560 
561 /*
562  * Class: java/lang/VMClass
563  * Method: isMemberClass
564  * Signature: (Ljava/lang/Class;)Z
565  */
566 JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, jclass klass)
567 {
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 
615 {
616  Utf8String u = Utf8String::from_utf8("java/lang/VMClass");
617 
620 }
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  */
java_handle_objectarray_t * class_get_declaredfields(classinfo *c, bool publicOnly)
Definition: class.cpp:1765
JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, jclass klass)
methodinfo * class_resolveclassmethod(classinfo *c, Utf8String name, Utf8String desc, classinfo *referer, bool throwexception)
Definition: class.cpp:1211
virtual java_handle_t * get_handle() const
Table containing all native methods registered with the VM.
Definition: native.hpp:132
NativeMethods & get_nativemethods()
Definition: vm.hpp:128
void register_methods(Utf8String classname, const JNINativeMethod *methods, size_t count)
Register native methods with the VM.
Definition: native.cpp:242
java_handle_t * class_get_enclosingconstructor(classinfo *c)
Return the enclosing constructor as java.lang.reflect.Constructor object for the given class...
Definition: class.cpp:1962
Utf8String to_utf8() const
Definition: string.cpp:437
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
argument_type from
_Jv_JNIEnv JNIEnv
Definition: jni.hpp:112
void exceptions_throw_classnotfoundexception(Utf8String name)
Definition: exceptions.cpp:681
JNIEXPORT jclass JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, jstring name, jboolean initialize, jobject loader)
void set_constantPoolOop(classinfo *value)
static classinfo * class_get_superclass(classinfo *c)
Definition: class.hpp:420
#define NATIVE_METHODS_COUNT
Definition: native.hpp:45
static JavaString from_utf8(Utf8String)
Definition: string.cpp:184
byte_iterator end() const
Definition: utf8.hpp:107
classinfo * class_sun_reflect_annotation_AnnotationParser
Definition: globals.cpp:99
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, jclass klass)
int32_t class_get_modifiers(classinfo *c, bool ignoreInnerClassesAttrib)
Definition: class.cpp:2126
Utf8String class_get_signature(classinfo *c)
Definition: class.cpp:2183
OpenJDK sun/reflect/ConstantPool.
classinfo * class_get_declaringclass(classinfo *c)
Definition: class.cpp:1882
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, jclass klass)
JNIEnv jthread jclass klass
Definition: jvmti.h:300
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, jclass klass)
bool class_is_instance(classinfo *c, java_handle_t *h)
Definition: class.cpp:1572
java_handle_t * vm_call_method(methodinfo *m, java_handle_t *o,...)
classinfo * class_get_enclosingclass(classinfo *c)
Definition: class.cpp:1920
static bool class_is_array(classinfo *c)
Definition: class.hpp:341
JNIEnv jclass jobject const char * name
Definition: jvmti.h:312
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, jclass klass, jclass c)
static classloader_t * class_get_classloader(classinfo *c)
Definition: class.hpp:402
classloader_t * loader_hashtable_classloader_add(java_handle_t *cl)
Definition: loader.cpp:305
classinfo * class_sun_reflect_ConstantPool
Definition: globals.cpp:97
java_handle_objectarray_t * class_get_declaredconstructors(classinfo *c, bool publicOnly)
Return an array of declared constructors of the given class.
Definition: class.cpp:1708
java_handle_t * class_get_classname(classinfo *c)
Returns the classname of the class, where slashes (&#39;/&#39;) are replaced by dots (&#39;.
Definition: class.cpp:86
#define LLNI_classinfo_wrap(classinfo)
Definition: llni.hpp:110
java_handle_objectarray_t * class_get_declaredclasses(classinfo *c, bool publicOnly)
Definition: class.cpp:1626
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
void _Jv_java_lang_VMClass_init(void)
static JNINativeMethod methods[]
void exceptions_set_exception(java_handle_t *e)
Definition: exceptions.cpp:101
java_handle_objectarray_t * class_get_interfaces(classinfo *c)
Definition: class.cpp:2065
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
java_handle_bytearray_t * class_get_annotations(classinfo *c)
Definition: class.cpp:2100
java_handle_t * class_get_enclosingmethod(classinfo *c)
Return the enclosing method as java.lang.reflect.Method object for the given class.
Definition: class.cpp:2036
java_handle_objectarray_t * class_get_declaredmethods(classinfo *c, bool publicOnly)
Definition: class.cpp:1818
JNIEXPORT jint JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, jclass klass, jboolean ignoreInnerClassesAttrib)
void exceptions_throw_nullpointerexception(void)
classinfo * class_java_lang_Class
Definition: globals.cpp:35
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, jclass klass, jboolean publicOnly)
static bool class_is_interface(classinfo *c)
Definition: class.hpp:357
JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, jobject t)
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, jclass klass)
static Utf8String from_utf8(const char *, size_t)
Definition: utf8.cpp:335
static bool class_is_memberclass(classinfo *c)
Definition: class.hpp:387
JNIEnv jclass jobject loader
Definition: jvmti.h:312
static bool class_is_anonymousclass(classinfo *c)
Definition: class.hpp:326
bool initialize_class(classinfo *c)
Definition: initialize.cpp:110
JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getClassSignature(JNIEnv *env, jclass clazz, jclass klass)
java_handle_t * native_new_and_init(classinfo *c)
Registers a new native agent by specified by it&#39;s library name and with an optional options string...
Definition: native.cpp:729
byte_iterator begin() const
Definition: utf8.hpp:106
JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, jclass klass)
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, jclass klass)
static bool class_is_localclass(classinfo *c)
Definition: class.hpp:372
classinfo * link_class(classinfo *c)
Definition: linker.cpp:378
JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, jclass klass)
bool class_is_assignable_from(classinfo *to, classinfo *from)
Definition: class.cpp:1539
classinfo * load_class_from_classloader(Utf8String name, classloader_t *cl)
Definition: loader.cpp:1071
#define LLNI_classinfo_unwrap(clazz)
Definition: llni.hpp:113
static bool class_is_primitive(classinfo *c)
Definition: class.hpp:311
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, jclass klass, jobject o)
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, jclass klass)
classinfo * class_get_componenttype(classinfo *c)
Definition: class.cpp:1594
JNIEXPORT jstring JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, jclass klass)
static VM * get_current()
Definition: vm.hpp:99
Utf8String to_utf8_dot_to_slash() const
Definition: string.cpp:450
JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, jclass klass)