LCOV - code coverage report
Current view: top level - native/vm/gnuclasspath - java_lang_VMClass.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 114 141 80.9 %
Date: 2015-06-10 18:10:59 Functions: 24 27 88.9 %

          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             :  */

Generated by: LCOV version 1.11