50 |
* Signature: (Ljava/lang/Class;)Z |
* Signature: (Ljava/lang/Class;)Z |
51 |
*/ |
*/ |
52 |
JNIEXPORT jboolean JNICALL |
JNIEXPORT jboolean JNICALL |
53 |
Java_java_io_VMObjectStreamClass_hasClassInitializer( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_hasClassInitializer(JNIEnv * env, |
54 |
jclass vmosklass, |
jclass vmosklass |
55 |
|
__attribute__ ((__unused__)), |
56 |
jclass klass ) |
jclass klass ) |
57 |
{ |
{ |
58 |
jmethodID mid = (*env)->GetStaticMethodID(env, klass, "<clinit>", "()V"); |
jmethodID mid = (*env)->GetStaticMethodID(env, klass, "<clinit>", "()V"); |
105 |
} |
} |
106 |
|
|
107 |
static jfieldID getFieldReference(JNIEnv *env, jobject field, |
static jfieldID getFieldReference(JNIEnv *env, jobject field, |
108 |
jobject object, char *type) |
const char *type) |
109 |
{ |
{ |
110 |
jclass classClass; |
jclass classClass; |
111 |
jclass fieldClass; |
jclass fieldClass; |
114 |
jfieldID fid; |
jfieldID fid; |
115 |
const char *field_name; |
const char *field_name; |
116 |
const char *type_name; |
const char *type_name; |
117 |
size_t type_len; |
int type_len; |
118 |
jmethodID mid; |
jmethodID mid; |
119 |
jstring name; |
jstring name; |
120 |
jstring tname; |
jstring tname; |
146 |
/* Do we need to find out the exact type descriptor of the field? */ |
/* Do we need to find out the exact type descriptor of the field? */ |
147 |
if (type == NULL) |
if (type == NULL) |
148 |
{ |
{ |
149 |
|
char *the_type; |
150 |
|
|
151 |
mid = (*env)->GetMethodID(env, fieldClass, |
mid = (*env)->GetMethodID(env, fieldClass, |
152 |
"getType", |
"getType", |
153 |
"()Ljava/lang/Class;"); |
"()Ljava/lang/Class;"); |
181 |
type_len = strlen((char *) type_name); |
type_len = strlen((char *) type_name); |
182 |
if (type_name[0] != '[') |
if (type_name[0] != '[') |
183 |
{ |
{ |
184 |
type = (char *) malloc(type_len + 3); |
/* XXX - FIXME - should not use dynamic allocation in core lib. */ |
185 |
type[0] = 'L'; |
the_type = (char *) malloc(type_len + 3); |
186 |
type[type_len + 1] = ';'; |
the_type[0] = 'L'; |
187 |
type[type_len + 2] = '\0'; |
the_type[type_len + 1] = ';'; |
188 |
type++; |
the_type[type_len + 2] = '\0'; |
189 |
|
the_type++; |
190 |
} |
} |
191 |
else |
else |
192 |
{ |
{ |
193 |
type = (char *) malloc(type_len + 1); |
/* XXX - FIXME - should not use dynamic allocation in core lib. */ |
194 |
type[type_len] = '\0'; |
the_type = (char *) malloc(type_len + 1); |
195 |
|
the_type[type_len] = '\0'; |
196 |
} |
} |
197 |
|
|
198 |
for (i = 0; i < type_len; i++) |
for (i = 0; i < type_len; i++) |
199 |
if (type_name[i] == '.') |
if (type_name[i] == '.') |
200 |
type[i] = '/'; |
the_type[i] = '/'; |
201 |
else |
else |
202 |
type[i] = type_name[i]; |
the_type[i] = type_name[i]; |
203 |
|
|
204 |
if (type_name[0] != '[') |
if (type_name[0] != '[') |
205 |
type--; |
the_type--; |
206 |
|
|
207 |
(*env)->ReleaseStringUTFChars(env, tname, type_name); |
(*env)->ReleaseStringUTFChars(env, tname, type_name); |
208 |
|
fid = (*env)->GetFieldID(env, declaringClass, field_name, the_type); |
209 |
|
free(the_type); |
210 |
} |
} |
211 |
else |
else |
212 |
type_len = -1; |
{ |
213 |
|
type_len = -1; |
214 |
|
fid = (*env)->GetFieldID(env, declaringClass, field_name, type); |
215 |
|
} |
216 |
|
|
|
fid = (*env)->GetFieldID(env, declaringClass, field_name, (const char *)type); |
|
217 |
if (fid == NULL) |
if (fid == NULL) |
218 |
{ |
{ |
219 |
throwInternalError(env); |
throwInternalError(env); |
221 |
} |
} |
222 |
(*env)->ReleaseStringUTFChars(env, name, field_name); |
(*env)->ReleaseStringUTFChars(env, name, field_name); |
223 |
|
|
|
/* Did we create the type ourselves? */ |
|
|
if (type_len != -1) |
|
|
free(type); |
|
|
|
|
224 |
return fid; |
return fid; |
225 |
} |
} |
226 |
|
|
230 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Z)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Z)V |
231 |
*/ |
*/ |
232 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
233 |
Java_java_io_VMObjectStreamClass_setBooleanNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setBooleanNative(JNIEnv * env, |
234 |
jclass vmosklass, |
jclass vmosklass |
235 |
jobject field, |
__attribute__ ((__unused__)), |
236 |
jobject object, |
jobject field, |
237 |
jboolean value ) |
jobject object, |
238 |
|
jboolean value ) |
239 |
{ |
{ |
240 |
jfieldID fid = getFieldReference (env, field, object, "Z"); |
jfieldID fid = getFieldReference (env, field, "Z"); |
241 |
|
|
242 |
if (fid != NULL) |
if (fid != NULL) |
243 |
(*env)->SetBooleanField(env, object, fid, value); |
(*env)->SetBooleanField(env, object, fid, value); |
249 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;C)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;C)V |
250 |
*/ |
*/ |
251 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
252 |
Java_java_io_VMObjectStreamClass_setCharNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setCharNative(JNIEnv * env, |
253 |
jclass vmosklass, |
jclass vmosklass |
254 |
jobject field, |
__attribute__ ((__unused__)), |
255 |
jobject object, |
jobject field, |
256 |
jchar value ) |
jobject object, |
257 |
|
jchar value ) |
258 |
{ |
{ |
259 |
jfieldID fid = getFieldReference (env, field, object, "C"); |
jfieldID fid = getFieldReference (env, field, "C"); |
260 |
|
|
261 |
if (fid != NULL) |
if (fid != NULL) |
262 |
(*env)->SetCharField(env, object, fid, value); |
(*env)->SetCharField(env, object, fid, value); |
268 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;B)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;B)V |
269 |
*/ |
*/ |
270 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
271 |
Java_java_io_VMObjectStreamClass_setByteNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setByteNative(JNIEnv * env, |
272 |
jclass vmosklass, |
jclass vmosklass |
273 |
jobject field, |
__attribute__ ((__unused__)), |
274 |
jobject object, |
jobject field, |
275 |
jbyte value ) |
jobject object, |
276 |
|
jbyte value ) |
277 |
{ |
{ |
278 |
jfieldID fid = getFieldReference (env, field, object, "B"); |
jfieldID fid = getFieldReference (env, field, "B"); |
279 |
|
|
280 |
if (fid != NULL) |
if (fid != NULL) |
281 |
(*env)->SetByteField(env, object, fid, value); |
(*env)->SetByteField(env, object, fid, value); |
288 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;S)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;S)V |
289 |
*/ |
*/ |
290 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
291 |
Java_java_io_VMObjectStreamClass_setShortNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setShortNative(JNIEnv * env, |
292 |
jclass vmosklass, |
jclass vmosklass |
293 |
jobject field, |
__attribute__ ((__unused__)), |
294 |
jobject object, |
jobject field, |
295 |
jshort value ) |
jobject object, |
296 |
|
jshort value ) |
297 |
{ |
{ |
298 |
jfieldID fid = getFieldReference (env, field, object, "S"); |
jfieldID fid = getFieldReference (env, field, "S"); |
299 |
|
|
300 |
if (fid != NULL) |
if (fid != NULL) |
301 |
(*env)->SetShortField(env, object, fid, value); |
(*env)->SetShortField(env, object, fid, value); |
307 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;I)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;I)V |
308 |
*/ |
*/ |
309 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
310 |
Java_java_io_VMObjectStreamClass_setIntNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setIntNative(JNIEnv * env, |
311 |
jclass vmosklass, |
jclass vmosklass |
312 |
jobject field, |
__attribute__ ((__unused__)), |
313 |
jobject object, |
jobject field, |
314 |
jint value ) |
jobject object, |
315 |
|
jint value ) |
316 |
{ |
{ |
317 |
jfieldID fid = getFieldReference (env, field, object, "I"); |
jfieldID fid = getFieldReference (env, field, "I"); |
318 |
|
|
319 |
if (fid != NULL) |
if (fid != NULL) |
320 |
(*env)->SetIntField(env, object, fid, value); |
(*env)->SetIntField(env, object, fid, value); |
327 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;J)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;J)V |
328 |
*/ |
*/ |
329 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
330 |
Java_java_io_VMObjectStreamClass_setLongNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setLongNative(JNIEnv * env, |
331 |
jclass vmosklass, |
jclass vmosklass |
332 |
|
__attribute__ ((__unused__)), |
333 |
jobject field, |
jobject field, |
334 |
jobject object, |
jobject object, |
335 |
jlong value ) |
jlong value ) |
336 |
{ |
{ |
337 |
jfieldID fid = getFieldReference (env, field, object, "J"); |
jfieldID fid = getFieldReference (env, field, "J"); |
338 |
|
|
339 |
if (fid != NULL) |
if (fid != NULL) |
340 |
(*env)->SetLongField(env, object, fid, value); |
(*env)->SetLongField(env, object, fid, value); |
347 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;F)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;F)V |
348 |
*/ |
*/ |
349 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
350 |
Java_java_io_VMObjectStreamClass_setFloatNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setFloatNative(JNIEnv * env, |
351 |
jclass vmosklass, |
jclass vmosklass |
352 |
jobject field, |
__attribute__ ((__unused__)), |
353 |
jobject object, |
jobject field, |
354 |
jfloat value ) |
jobject object, |
355 |
|
jfloat value ) |
356 |
{ |
{ |
357 |
jfieldID fid = getFieldReference (env, field, object, "F"); |
jfieldID fid = getFieldReference (env, field, "F"); |
358 |
|
|
359 |
if (fid != NULL) |
if (fid != NULL) |
360 |
(*env)->SetFloatField(env, object, fid, value); |
(*env)->SetFloatField(env, object, fid, value); |
366 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;D)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;D)V |
367 |
*/ |
*/ |
368 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
369 |
Java_java_io_VMObjectStreamClass_setDoubleNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setDoubleNative(JNIEnv * env, |
370 |
jclass vmosklass, |
jclass vmosklass |
371 |
|
__attribute__ ((__unused__)), |
372 |
jobject field, |
jobject field, |
373 |
jobject object, |
jobject object, |
374 |
jdouble value ) |
jdouble value ) |
375 |
{ |
{ |
376 |
jfieldID fid = getFieldReference (env, field, object, "D"); |
jfieldID fid = getFieldReference (env, field, "D"); |
377 |
|
|
378 |
if (fid != NULL) |
if (fid != NULL) |
379 |
(*env)->SetDoubleField(env, object, fid, value); |
(*env)->SetDoubleField(env, object, fid, value); |
385 |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Ljava/lang/Object;)V |
* Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Ljava/lang/Object;)V |
386 |
*/ |
*/ |
387 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
388 |
Java_java_io_VMObjectStreamClass_setObjectNative( JNIEnv * env, |
Java_java_io_VMObjectStreamClass_setObjectNative(JNIEnv * env, |
389 |
jclass vmosklass, |
jclass vmosklass |
390 |
|
__attribute__ ((__unused__)), |
391 |
jobject field, |
jobject field, |
392 |
jobject object, |
jobject object, |
393 |
jobject value ) |
jobject value ) |
394 |
{ |
{ |
395 |
jfieldID fid = getFieldReference (env, field, object, NULL); |
jfieldID fid = getFieldReference (env, field, NULL); |
396 |
|
|
397 |
if (fid != NULL) |
if (fid != NULL) |
398 |
(*env)->SetObjectField(env, object, fid, value); |
(*env)->SetObjectField(env, object, fid, value); |