blob: fb290ed0cf1cf78629086f0014e53e2202911803 [file] [log] [blame]
The Android Open Source Projectadc854b2009-03-03 19:28:47 -08001/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#include "JNIHelp.h"
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080019
Brian Carlstrom44e0e562010-05-06 23:44:16 -070020static jobject java_io_osc_getFieldSignature(JNIEnv* env, jclass clazz __attribute__ ((unused)),
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080021 jobject reflectField) {
22 jclass lookupClass;
23 jmethodID mid;
24
25 lookupClass = (*env)->FindClass(env, "java/lang/reflect/Field");
26 if(!lookupClass) {
27 return NULL;
28 }
29
30 mid = (*env)->GetMethodID(env, lookupClass, "getSignature",
31 "()Ljava/lang/String;");
32 if(!mid)
33 {
34 return NULL;
35 }
36
37 jclass fieldClass = (*env)->GetObjectClass(env, reflectField);
38
39 return (*env)->CallNonvirtualObjectMethod(env, reflectField,
40 fieldClass, mid);
41}
42
Brian Carlstrom44e0e562010-05-06 23:44:16 -070043static jobject java_io_osc_getMethodSignature(JNIEnv* env, jclass clazz __attribute__ ((unused)),
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080044 jobject reflectMethod)
45{
46 jclass lookupClass;
47 jmethodID mid;
48
49 lookupClass = (*env)->FindClass(env, "java/lang/reflect/Method");
50 if(!lookupClass) {
51 return NULL;
52 }
53
54 mid = (*env)->GetMethodID(env, lookupClass, "getSignature",
55 "()Ljava/lang/String;");
56 if(!mid) {
57 return NULL;
58 }
59
60 jclass methodClass = (*env)->GetObjectClass(env, reflectMethod);
61 return (*env)->CallNonvirtualObjectMethod(env, reflectMethod,
62 methodClass, mid);
63}
64
Brian Carlstrom44e0e562010-05-06 23:44:16 -070065static jobject java_io_osc_getConstructorSignature(JNIEnv* env,
66 jclass clazz __attribute__ ((unused)),
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080067 jobject
68 reflectConstructor)
69{
70 jclass lookupClass;
71 jmethodID mid;
72
73 lookupClass = (*env)->FindClass(env, "java/lang/reflect/Constructor");
74 if(!lookupClass) {
75 return NULL;
76 }
77
78 mid = (*env)->GetMethodID(env, lookupClass, "getSignature",
79 "()Ljava/lang/String;");
80 if(!mid) {
81 return NULL;
82 }
83
84 jclass constructorClass = (*env)->GetObjectClass(env, reflectConstructor);
85 return (*env)->CallNonvirtualObjectMethod(env, reflectConstructor,
86 constructorClass, mid);
87}
88
Brian Carlstrom44e0e562010-05-06 23:44:16 -070089static jboolean java_io_osc_hasClinit(JNIEnv* env, jclass clazz __attribute__ ((unused)),
The Android Open Source Projectadc854b2009-03-03 19:28:47 -080090 jobject targetClass) {
91 jmethodID mid = (*env)->GetStaticMethodID(env, targetClass,
92 "<clinit>", "()V");
93 (*env)->ExceptionClear(env);
94
95 /*
96 * Can I just return mid and rely on typecast to convert to jboolean ?
97 * Safe implementation for now
98 */
99 if(mid == 0) {
100 /* No <clinit>... */
101 return (jboolean) 0;
102 } else {
103 return (jboolean) 1;
104 }
105}
106
Brian Carlstrom44e0e562010-05-06 23:44:16 -0700107static void java_io_osc_oneTimeInitialization(JNIEnv* env __attribute__ ((unused)), jclass clazz __attribute__ ((unused))) {
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800108 // dummy to stay compatible to harmony
109}
110
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800111static JNINativeMethod gMethods[] = {
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800112 { "getFieldSignature",
113 "(Ljava/lang/reflect/Field;)Ljava/lang/String;",
114 (void*) java_io_osc_getFieldSignature },
115 { "getMethodSignature",
116 "(Ljava/lang/reflect/Method;)Ljava/lang/String;",
117 (void*) java_io_osc_getMethodSignature },
118 { "getConstructorSignature",
119 "(Ljava/lang/reflect/Constructor;)Ljava/lang/String;",
120 (void*) java_io_osc_getConstructorSignature },
121 { "hasClinit", "(Ljava/lang/Class;)Z",
122 (void*) java_io_osc_hasClinit },
123 { "oneTimeInitialization", "()V",
124 (void*) java_io_osc_oneTimeInitialization }
125};
126int register_java_io_ObjectStreamClass(JNIEnv* env) {
Elliott Hughesc08f9fb2010-04-16 17:44:12 -0700127 return jniRegisterNativeMethods(env, "java/io/ObjectStreamClass", gMethods, NELEM(gMethods));
The Android Open Source Projectadc854b2009-03-03 19:28:47 -0800128}