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