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