e1ab6e5147bf99851acccc4e0dd7e0f492ce5863
[cacao.git] / src / native / vm / gnu / java_lang_VMClass.c
1 /* src/native/vm/gnu/java_lang_VMClass.c
2
3    Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4    R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5    C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6    Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
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.
14
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.
19
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
23    02110-1301, USA.
24
25    $Id: java_lang_VMClass.c 8343 2007-08-17 21:39:32Z michi $
26
27 */
28
29
30 #include "config.h"
31
32 #include <stdint.h>
33
34 #include "vm/types.h"
35
36 #include "native/jni.h"
37 #include "native/llni.h"
38 #include "native/native.h"
39
40 #include "native/include/java_lang_Class.h"
41 #include "native/include/java_lang_ClassLoader.h"
42 #include "native/include/java_lang_Object.h"
43 #include "native/include/java_lang_Throwable.h"
44 #include "native/include/java_lang_reflect_Constructor.h"
45 #include "native/include/java_lang_reflect_Method.h"
46
47 #include "native/include/java_lang_VMClass.h"
48
49 #include "native/vm/java_lang_Class.h"
50
51 #include "vmcore/class.h"
52
53
54 /* native methods implemented by this file ************************************/
55
56 static JNINativeMethod methods[] = {
57         { "isInstance",              "(Ljava/lang/Class;Ljava/lang/Object;)Z",                        (void *) (ptrint) &Java_java_lang_VMClass_isInstance              },
58         { "isAssignableFrom",        "(Ljava/lang/Class;Ljava/lang/Class;)Z",                         (void *) (ptrint) &Java_java_lang_VMClass_isAssignableFrom        },
59         { "isInterface",             "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isInterface             },
60         { "isPrimitive",             "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isPrimitive             },
61         { "getName",                 "(Ljava/lang/Class;)Ljava/lang/String;",                         (void *) (ptrint) &Java_java_lang_VMClass_getName                 },
62         { "getSuperclass",           "(Ljava/lang/Class;)Ljava/lang/Class;",                          (void *) (ptrint) &Java_java_lang_VMClass_getSuperclass           },
63         { "getInterfaces",           "(Ljava/lang/Class;)[Ljava/lang/Class;",                         (void *) (ptrint) &Java_java_lang_VMClass_getInterfaces           },
64         { "getComponentType",        "(Ljava/lang/Class;)Ljava/lang/Class;",                          (void *) (ptrint) &Java_java_lang_VMClass_getComponentType        },
65         { "getModifiers",            "(Ljava/lang/Class;Z)I",                                         (void *) (ptrint) &Java_java_lang_VMClass_getModifiers            },
66         { "getDeclaringClass",       "(Ljava/lang/Class;)Ljava/lang/Class;",                          (void *) (ptrint) &Java_java_lang_VMClass_getDeclaringClass       },
67         { "getDeclaredClasses",      "(Ljava/lang/Class;Z)[Ljava/lang/Class;",                        (void *) (ptrint) &Java_java_lang_VMClass_getDeclaredClasses      },
68         { "getDeclaredFields",       "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;",                (void *) (ptrint) &Java_java_lang_VMClass_getDeclaredFields       },
69         { "getDeclaredMethods",      "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;",               (void *) (ptrint) &Java_java_lang_VMClass_getDeclaredMethods      },
70         { "getDeclaredConstructors", "(Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;",          (void *) (ptrint) &Java_java_lang_VMClass_getDeclaredConstructors },
71         { "getClassLoader",          "(Ljava/lang/Class;)Ljava/lang/ClassLoader;",                    (void *) (ptrint) &Java_java_lang_VMClass_getClassLoader          },
72         { "forName",                 "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", (void *) (ptrint) &Java_java_lang_VMClass_forName                 },
73         { "isArray",                 "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isArray                 },
74         { "throwException",          "(Ljava/lang/Throwable;)V",                                      (void *) (ptrint) &Java_java_lang_VMClass_throwException          },
75 #if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS)
76         { "getDeclaredAnnotations",  "(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;",         (void *) (ptrint) &Java_java_lang_VMClass_getDeclaredAnnotations  },
77 #endif
78         { "getEnclosingClass",       "(Ljava/lang/Class;)Ljava/lang/Class;",                          (void *) (ptrint) &Java_java_lang_VMClass_getEnclosingClass       },
79         { "getEnclosingConstructor", "(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;",            (void *) (ptrint) &Java_java_lang_VMClass_getEnclosingConstructor },
80         { "getEnclosingMethod",      "(Ljava/lang/Class;)Ljava/lang/reflect/Method;",                 (void *) (ptrint) &Java_java_lang_VMClass_getEnclosingMethod      },
81         { "getClassSignature",       "(Ljava/lang/Class;)Ljava/lang/String;",                         (void *) (ptrint) &Java_java_lang_VMClass_getClassSignature       },
82         { "isAnonymousClass",        "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isAnonymousClass        },
83         { "isLocalClass",            "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isLocalClass            },
84         { "isMemberClass",           "(Ljava/lang/Class;)Z",                                          (void *) (ptrint) &Java_java_lang_VMClass_isMemberClass           },
85 };
86
87
88 /* _Jv_java_lang_VMClass_init **************************************************
89
90    Register native functions.
91
92 *******************************************************************************/
93
94 void _Jv_java_lang_VMClass_init(void)
95 {
96         utf *u;
97
98         u = utf_new_char("java/lang/VMClass");
99
100         native_method_register(u, methods, NATIVE_METHODS_COUNT);
101 }
102
103
104 /*
105  * Class:     java/lang/VMClass
106  * Method:    isInstance
107  * Signature: (Ljava/lang/Class;Ljava/lang/Object;)Z
108  */
109 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, java_lang_Class *klass, java_lang_Object *o)
110 {
111         return _Jv_java_lang_Class_isInstance(klass, o);
112 }
113
114
115 /*
116  * Class:     java/lang/VMClass
117  * Method:    isAssignableFrom
118  * Signature: (Ljava/lang/Class;Ljava/lang/Class;)Z
119  */
120 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, java_lang_Class *klass, java_lang_Class *c)
121 {
122         return _Jv_java_lang_Class_isAssignableFrom(klass, c);
123 }
124
125
126 /*
127  * Class:     java/lang/VMClass
128  * Method:    isInterface
129  * Signature: (Ljava/lang/Class;)Z
130  */
131 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, java_lang_Class *klass)
132 {
133         return _Jv_java_lang_Class_isInterface(env, klass);
134 }
135
136
137 /*
138  * Class:     java/lang/VMClass
139  * Method:    isPrimitive
140  * Signature: (Ljava/lang/Class;)Z
141  */
142 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, java_lang_Class *klass)
143 {
144         return  _Jv_java_lang_Class_isPrimitive(klass);
145 }
146
147
148 /*
149  * Class:     java/lang/VMClass
150  * Method:    getName
151  * Signature: (Ljava/lang/Class;)Ljava/lang/String;
152  */
153 JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, java_lang_Class *klass)
154 {
155         return _Jv_java_lang_Class_getName(klass);
156 }
157
158
159 /*
160  * Class:     java/lang/VMClass
161  * Method:    getSuperclass
162  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
163  */
164 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
165 {
166         return _Jv_java_lang_Class_getSuperclass(klass);
167 }
168
169
170 /*
171  * Class:     java/lang/VMClass
172  * Method:    getInterfaces
173  * Signature: (Ljava/lang/Class;)[Ljava/lang/Class;
174  */
175 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *klass)
176 {
177         return _Jv_java_lang_Class_getInterfaces(klass);
178 }
179
180
181 /*
182  * Class:     java/lang/VMClass
183  * Method:    getComponentType
184  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
185  */
186 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, java_lang_Class *klass)
187 {
188         classinfo *c;
189         classinfo *component;
190         
191         c = LLNI_classinfo_unwrap(klass);
192         
193         component = class_get_componenttype(c);
194
195         return LLNI_classinfo_wrap(component);
196 }
197
198
199 /*
200  * Class:     java/lang/VMClass
201  * Method:    getModifiers
202  * Signature: (Ljava/lang/Class;Z)I
203  */
204 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 ignoreInnerClassesAttrib)
205 {
206         return _Jv_java_lang_Class_getModifiers(klass, ignoreInnerClassesAttrib);
207 }
208
209
210 /*
211  * Class:     java/lang/VMClass
212  * Method:    getDeclaringClass
213  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
214  */
215 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
216 {
217         return _Jv_java_lang_Class_getDeclaringClass(klass);
218 }
219
220
221 /*
222  * Class:     java/lang/VMClass
223  * Method:    getDeclaredClasses
224  * Signature: (Ljava/lang/Class;Z)[Ljava/lang/Class;
225  */
226 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly)
227 {
228         return _Jv_java_lang_Class_getDeclaredClasses(klass, publicOnly);
229 }
230
231
232 /*
233  * Class:     java/lang/VMClass
234  * Method:    getDeclaredFields
235  * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;
236  */
237 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly)
238 {
239         return _Jv_java_lang_Class_getDeclaredFields(klass, publicOnly);
240 }
241
242
243 /*
244  * Class:     java/lang/VMClass
245  * Method:    getDeclaredMethods
246  * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;
247  */
248 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly)
249 {
250         return _Jv_java_lang_Class_getDeclaredMethods(klass, publicOnly);
251 }
252
253
254 /*
255  * Class:     java/lang/VMClass
256  * Method:    getDeclaredConstructors
257  * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;
258  */
259 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly)
260 {
261         return _Jv_java_lang_Class_getDeclaredConstructors(klass, publicOnly);
262 }
263
264
265 /*
266  * Class:     java/lang/VMClass
267  * Method:    getClassLoader
268  * Signature: (Ljava/lang/Class;)Ljava/lang/ClassLoader;
269  */
270 JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, java_lang_Class *klass)
271 {
272         return _Jv_java_lang_Class_getClassLoader(klass);
273 }
274
275
276 /*
277  * Class:     java/lang/VMClass
278  * Method:    forName
279  * Signature: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
280  */
281 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, jclass clazz, java_lang_String *name, s4 initialize, java_lang_ClassLoader *loader)
282 {
283         return _Jv_java_lang_Class_forName(name, initialize, loader);
284 }
285
286
287 /*
288  * Class:     java/lang/VMClass
289  * Method:    isArray
290  * Signature: (Ljava/lang/Class;)Z
291  */
292 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, java_lang_Class *klass)
293 {
294         return _Jv_java_lang_Class_isArray(env, klass);
295 }
296
297
298 /*
299  * Class:     java/lang/VMClass
300  * Method:    throwException
301  * Signature: (Ljava/lang/Throwable;)V
302  */
303 JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass clazz, java_lang_Throwable *t)
304 {
305         _Jv_java_lang_Class_throwException(t);
306 }
307
308
309 #if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS)
310 /*
311  * Class:     java/lang/VMClass
312  * Method:    getDeclaredAnnotations
313  * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
314  */
315 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, java_lang_Class* klass)
316 {
317         return _Jv_java_lang_Class_getDeclaredAnnotations(klass);
318 }
319 #endif
320
321
322 /*
323  * Class:     java/lang/VMClass
324  * Method:    getEnclosingClass
325  * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
326  */
327 JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getEnclosingClass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
328 {
329         classinfo *c;
330         classinfo *result;
331
332         c = LLNI_classinfo_unwrap(klass);
333
334         result = class_get_enclosingclass(c);
335
336         return LLNI_classinfo_wrap(result);
337 }
338
339
340 /*
341  * Class:     java/lang/VMClass
342  * Method:    getEnclosingConstructor
343  * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
344  */
345 JNIEXPORT java_lang_reflect_Constructor* JNICALL Java_java_lang_VMClass_getEnclosingConstructor(JNIEnv *env, jclass clazz, java_lang_Class *klass)
346 {
347         return _Jv_java_lang_Class_getEnclosingConstructor(klass);
348 }
349
350
351 /*
352  * Class:     java/lang/VMClass
353  * Method:    getEnclosingMethod
354  * Signature: (Ljava/lang/Class;)Ljava/lang/reflect/Method;
355  */
356 JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getEnclosingMethod(JNIEnv *env, jclass clazz, java_lang_Class *klass)
357 {
358         return _Jv_java_lang_Class_getEnclosingMethod(klass);
359 }
360
361
362 /*
363  * Class:     java/lang/VMClass
364  * Method:    getClassSignature
365  * Signature: (Ljava/lang/Class;)Ljava/lang/String;
366  */
367 JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getClassSignature(JNIEnv *env, jclass clazz, java_lang_Class* klass)
368 {
369         return _Jv_java_lang_Class_getClassSignature(klass);
370 }
371
372
373 /*
374  * Class:     java/lang/VMClass
375  * Method:    isAnonymousClass
376  * Signature: (Ljava/lang/Class;)Z
377  */
378 JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isAnonymousClass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
379 {
380         return class_is_anonymousclass(LLNI_classinfo_unwrap(klass));
381 }
382
383
384 /*
385  * Class:     java/lang/VMClass
386  * Method:    isLocalClass
387  * Signature: (Ljava/lang/Class;)Z
388  */
389 JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isLocalClass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
390 {
391         return class_is_localclass(LLNI_classinfo_unwrap(klass));
392 }
393
394
395 /*
396  * Class:     java/lang/VMClass
397  * Method:    isMemberClass
398  * Signature: (Ljava/lang/Class;)Z
399  */
400 JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_isMemberClass(JNIEnv *env, jclass clazz, java_lang_Class *klass)
401 {
402         return class_is_memberclass(LLNI_classinfo_unwrap(klass));
403 }
404
405
406 /*
407  * These are local overrides for various environment variables in Emacs.
408  * Please do not remove this and leave it at the end of the file, where
409  * Emacs will automagically detect them.
410  * ---------------------------------------------------------------------
411  * Local variables:
412  * mode: c
413  * indent-tabs-mode: t
414  * c-basic-offset: 4
415  * tab-width: 4
416  * End:
417  * vim:noexpandtab:sw=4:ts=4:
418  */