Index: working_classlib/modules/misc/src/main/java/org/apache/harmony/misc/accessors/ObjectAccessor.java =================================================================== --- working_classlib/modules/misc/src/main/java/org/apache/harmony/misc/accessors/ObjectAccessor.java (revision 647500) +++ working_classlib/modules/misc/src/main/java/org/apache/harmony/misc/accessors/ObjectAccessor.java (working copy) @@ -64,7 +64,7 @@ * This class complies to singleton pattern. */ private static ObjectAccessor instance; - static ObjectAccessor getInstance() { + public static ObjectAccessor getInstance() { if (instance == null) { System.loadLibrary("accessors"); //$NON-NLS-1$ instance = new ObjectAccessor(); Index: working_classlib/modules/luni/src/main/java/java/io/ObjectInputStream.java =================================================================== --- working_classlib/modules/luni/src/main/java/java/io/ObjectInputStream.java (revision 647500) +++ working_classlib/modules/luni/src/main/java/java/io/ObjectInputStream.java (working copy) @@ -30,6 +30,8 @@ import java.util.HashMap; import java.util.Iterator; +import org.apache.harmony.misc.accessors.ObjectAccessor; + import org.apache.harmony.kernel.vm.VM; import org.apache.harmony.luni.internal.nls.Messages; import org.apache.harmony.luni.util.Msg; @@ -119,6 +121,8 @@ PRIMITIVE_CLASSES.put("double", double.class); //$NON-NLS-1$ } + private ObjectAccessor accessor = ObjectAccessor.getInstance(); + // Internal type used to keep track of validators & corresponding priority static class InputValidationDesc { ObjectInputValidation validator; @@ -1124,41 +1128,37 @@ } for (ObjectStreamField fieldDesc : fields) { + + // get associated Field + long fieldID = fieldDesc.getFieldID(accessor, declaringClass); + // Code duplication starts, just because Java is typed if (fieldDesc.isPrimitive()) { try { switch (fieldDesc.getTypeCode()) { case 'B': - setField(obj, declaringClass, fieldDesc.getName(), - input.readByte()); + accessor.setByte(obj, fieldID, input.readByte()); break; case 'C': - setField(obj, declaringClass, fieldDesc.getName(), - input.readChar()); + accessor.setChar(obj, fieldID, input.readChar()); break; case 'D': - setField(obj, declaringClass, fieldDesc.getName(), - input.readDouble()); + accessor.setDouble(obj, fieldID, input.readDouble()); break; case 'F': - setField(obj, declaringClass, fieldDesc.getName(), - input.readFloat()); + accessor.setFloat(obj, fieldID, input.readFloat()); break; case 'I': - setField(obj, declaringClass, fieldDesc.getName(), - input.readInt()); + accessor.setInt(obj, fieldID, input.readInt()); break; case 'J': - setField(obj, declaringClass, fieldDesc.getName(), - input.readLong()); + accessor.setLong(obj, fieldID, input.readLong()); break; case 'S': - setField(obj, declaringClass, fieldDesc.getName(), - input.readShort()); + accessor.setShort(obj, fieldID, input.readShort()); break; case 'Z': - setField(obj, declaringClass, fieldDesc.getName(), - input.readBoolean()); + accessor.setBoolean(obj, fieldID, input.readBoolean()); break; default: throw new StreamCorruptedException(Msg.getString( @@ -1195,8 +1195,7 @@ + fieldName })); } try { - objSetField(obj, declaringClass, fieldName, fieldDesc - .getTypeString(), toSet); + accessor.setObject(obj, fieldID, toSet); } catch (NoSuchFieldError e) { // Ignored } @@ -2434,250 +2433,6 @@ } /** - * Set a given declared field named fieldName of - * instance to the new byte value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, byte value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new char value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, char value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new double value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, double value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new float value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, float value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new int value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, int value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new long value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, long value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new value value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * Class which declares the field - * @param fieldName - * Name of the field to set - * @param fieldTypeName - * Name of the class defining the type of the field - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void objSetField(Object instance, - Class declaringClass, String fieldName, String fieldTypeName, - Object value) throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new short value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, short value) - throws NoSuchFieldError; - - /** - * Set a given declared field named fieldName of - * instance to the new boolean value - * value. - * - * This method could be implemented non-natively on top of java.lang.reflect - * implementations that support the setAccessible API, at the - * expense of extra object creation (java.lang.reflect.Field). Otherwise - * Serialization could not set private fields, except by the use of a native - * method like this one. - * - * @param instance - * Object whose field to set - * @param declaringClass - * instance's declaring class - * @param fieldName - * Name of the field to set - * @param value - * New value for the field - * - * @throws NoSuchFieldError - * If the field does not exist. - */ - private static native void setField(Object instance, - Class declaringClass, String fieldName, boolean value) - throws NoSuchFieldError; - - /** * Skips length bytes of primitive data from the receiver. It * should not be used to skip bytes at any arbitrary position; just when * reading primitive data types (ints, chars, etc). Index: working_classlib/modules/luni/src/main/java/java/io/ObjectStreamField.java =================================================================== --- working_classlib/modules/luni/src/main/java/java/io/ObjectStreamField.java (revision 647500) +++ working_classlib/modules/luni/src/main/java/java/io/ObjectStreamField.java (working copy) @@ -21,6 +21,8 @@ import java.util.Arrays; import java.util.Comparator; +import org.apache.harmony.misc.accessors.ObjectAccessor; + /** * This class represents object fields that are saved to the stream, by * serialization. Classes can define the collection of fields to be dumped, @@ -47,6 +49,23 @@ private boolean isDeserialized; + private long assocFieldID = -1; + + long getFieldID(ObjectAccessor accessor, Class declaringClass) { + if (assocFieldID != -1) { + return assocFieldID; + } else { +// try { + assocFieldID = accessor.getFieldID(declaringClass, name); +// } catch(NoSuchFieldException e) { + // TODO: Eliminate this debug check +// System.err.println("getField failed on resolving field: " + fieldName); +// System.exit(1); +// } + return assocFieldID; + } + } + /** * Constructs an ObjectStreamField with the given name and the given type * Index: working_classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java =================================================================== --- working_classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java (revision 647500) +++ working_classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java (working copy) @@ -22,6 +22,8 @@ import java.lang.reflect.Proxy; import java.util.IdentityHashMap; +import org.apache.harmony.misc.accessors.ObjectAccessor; + import org.apache.harmony.luni.util.Msg; /** @@ -108,7 +110,9 @@ * Allows the receiver to decide if it needs to call writeObjectOverride */ private boolean subclassOverridingImplementation; + + private ObjectAccessor accessor = ObjectAccessor.getInstance(); /** * Inner class to provide access to serializable fields @@ -416,197 +420,8 @@ output.flush(); } - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a boolean. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native boolean getFieldBool(Object instance, - Class declaringClass, String fieldName); /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a byte - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native byte getFieldByte(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a char. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native char getFieldChar(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a double. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native double getFieldDouble(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a float. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native float getFieldFloat(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * an int. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native int getFieldInt(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a long. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native long getFieldLong(Object instance, - Class declaringClass, String fieldName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * an Object type whose name is fieldTypeName. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @param fieldTypeName Name of the class that defines the type of this field - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native Object getFieldObj(Object instance, - Class declaringClass, String fieldName, String fieldTypeName); - - /** - * Get the value of field named - * fieldName of object instance. The - * field is declared by class declaringClass. The field is supposed to be - * a short. - * - * This method could be implemented non-natively on top of java.lang.reflect implementations - * that support the setAccessible API, at the expense of extra object creation - * (java.lang.reflect.Field). Otherwise Serialization could not fetch private fields, except - * by the use of a native method like this one. - * - * @param instance Object whose field value we want to fetch - * @param declaringClass The class that declares the field - * @param fieldName Name of the field we want to fetch - * @return the value of the field - * - * @throws NoSuchFieldError If the field does not exist. - */ - private static native short getFieldShort(Object instance, - Class declaringClass, String fieldName); - - /** * Return the next int handle to be used to indicate cyclic * references being saved to the stream. * @@ -1160,6 +975,7 @@ } } + /** * Writes a collection of field values for the fields described by class * descriptor classDesc (an ObjectStreamClass). @@ -1182,43 +998,38 @@ throws IOException { ObjectStreamField[] fields = classDesc.fields(); Class declaringClass = classDesc.forClass(); - for (int i = 0; i < fields.length; i++) { + for(ObjectStreamField fieldDesc : fields) { try { + + // get associated Field + long fieldID = fieldDesc.getFieldID(accessor, declaringClass); + // Code duplication starts, just because Java is typed - ObjectStreamField fieldDesc = fields[i]; if (fieldDesc.isPrimitive()) { switch (fieldDesc.getTypeCode()) { case 'B': - output.writeByte(getFieldByte(obj, declaringClass, - fieldDesc.getName())); + output.writeByte(accessor.getByte(obj, fieldID)); break; case 'C': - output.writeChar(getFieldChar(obj, declaringClass, - fieldDesc.getName())); + output.writeChar(accessor.getChar(obj, fieldID)); break; case 'D': - output.writeDouble(getFieldDouble(obj, - declaringClass, fieldDesc.getName())); + output.writeDouble(accessor.getDouble(obj, fieldID)); break; case 'F': - output.writeFloat(getFieldFloat(obj, - declaringClass, fieldDesc.getName())); + output.writeFloat(accessor.getFloat(obj, fieldID)); break; case 'I': - output.writeInt(getFieldInt(obj, declaringClass, - fieldDesc.getName())); + output.writeInt(accessor.getInt(obj, fieldID)); break; case 'J': - output.writeLong(getFieldLong(obj, declaringClass, - fieldDesc.getName())); + output.writeLong(accessor.getLong(obj, fieldID)); break; case 'S': - output.writeShort(getFieldShort(obj, - declaringClass, fieldDesc.getName())); + output.writeShort(accessor.getShort(obj, fieldID)); break; case 'Z': - output.writeBoolean(getFieldBool(obj, - declaringClass, fieldDesc.getName())); + output.writeBoolean(accessor.getBoolean(obj, fieldID)); break; default: throw new IOException( @@ -1227,12 +1038,11 @@ } } else { // Object type (array included). - Object field = getFieldObj(obj, declaringClass, fieldDesc - .getName(), fieldDesc.getTypeString()); + Object objField = accessor.getObject(obj, fieldID); if (fieldDesc.isUnshared()) { - writeUnshared(field); + writeUnshared(objField); } else { - writeObject(field); + writeObject(objField); } } } catch (NoSuchFieldError nsf) { @@ -2013,8 +1823,8 @@ // Only write field "name" for enum class, which is the second field of // enum, that is fields[1]. Ignore all non-fields and fields.length < 2 if (null != fields && fields.length > 1) { - String str = (String) getFieldObj(object, declaringClass, fields[1] - .getName(), fields[1].getTypeString()); + String str = (String) accessor.getObject(object, fields[1].getFieldID(accessor, declaringClass)); + Integer strhandle = null; if (!unshared) { strhandle = dumpCycle(str); Index: working_classlib/modules/luni/src/main/native/luni/shared/oos.c =================================================================== --- working_classlib/modules/luni/src/main/native/luni/shared/oos.c (revision 647500) +++ working_classlib/modules/luni/src/main/native/luni/shared/oos.c (working copy) @@ -17,206 +17,3 @@ #include "jni.h" -JNIEXPORT jlong JNICALL -Java_java_io_ObjectOutputStream_getFieldLong (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "J"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jlong) 0L; - } - else - { - return (*env)->GetLongField (env, targetObject, fid); - } -} - -JNIEXPORT jshort JNICALL -Java_java_io_ObjectOutputStream_getFieldShort (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "S"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jshort) 0; - } - else - { - return (*env)->GetShortField (env, targetObject, fid); - } -} - -JNIEXPORT jdouble JNICALL -Java_java_io_ObjectOutputStream_getFieldDouble (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "D"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jdouble) 0.0; - } - else - { - return (*env)->GetDoubleField (env, targetObject, fid); - } -} - -JNIEXPORT jboolean JNICALL -Java_java_io_ObjectOutputStream_getFieldBool (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "Z"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jboolean) 0; - } - else - { - return (*env)->GetBooleanField (env, targetObject, fid); - } -} - -JNIEXPORT jbyte JNICALL -Java_java_io_ObjectOutputStream_getFieldByte (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "B"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jbyte) 0; - } - else - { - return (*env)->GetByteField (env, targetObject, fid); - } -} - -JNIEXPORT jfloat JNICALL -Java_java_io_ObjectOutputStream_getFieldFloat (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "F"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jfloat) 0.0f; - } - else - { - return (*env)->GetFloatField (env, targetObject, fid); - } - -} - -JNIEXPORT jchar JNICALL -Java_java_io_ObjectOutputStream_getFieldChar (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "C"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jchar) 0; - } - else - { - return (*env)->GetCharField (env, targetObject, fid); - } -} - -JNIEXPORT jobject JNICALL -Java_java_io_ObjectOutputStream_getFieldObj (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName, - jobject fieldTypeName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - const char *fieldTypeNameInC = - (*env)->GetStringUTFChars (env, fieldTypeName, NULL); - jfieldID fid = - (*env)->GetFieldID (env, declaringClass, fieldNameInC, fieldTypeNameInC); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - (*env)->ReleaseStringUTFChars (env, fieldTypeName, fieldTypeNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jobject) 0; - } - else - { - return (*env)->GetObjectField (env, targetObject, fid); - } -} - -JNIEXPORT jint JNICALL -Java_java_io_ObjectOutputStream_getFieldInt (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName) -{ - const char *fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - jfieldID fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "I"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid == 0) - { - /* Field not found. I believe we must throw an exception here */ - return (jint) 0; - } - else - { - return (*env)->GetIntField (env, targetObject, fid); - } -} Index: working_classlib/modules/luni/src/main/native/luni/shared/ois.c =================================================================== --- working_classlib/modules/luni/src/main/native/luni/shared/ois.c (revision 647500) +++ working_classlib/modules/luni/src/main/native/luni/shared/ois.c (working copy) @@ -17,148 +17,6 @@ #include "jni.h" -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2Z - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jboolean newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "Z"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetBooleanField (env, targetObject, fid, newValue); - } -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2C - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jchar newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "C"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetCharField (env, targetObject, fid, newValue); - } -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2I - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jint newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "I"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetIntField (env, targetObject, fid, newValue); - } -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2F - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jfloat newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "F"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetFloatField (env, targetObject, fid, newValue); - } -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2D - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jdouble newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "D"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetDoubleField (env, targetObject, fid, newValue); - } - -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2S - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jshort newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "S"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetShortField (env, targetObject, fid, newValue); - } - -} - -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2J - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jlong newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "J"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetLongField (env, targetObject, fid, newValue); - } -} - JNIEXPORT jobject JNICALL Java_java_io_ObjectInputStream_newInstance (JNIEnv * env, jclass clazz, jobject instantiationClass, @@ -186,48 +44,3 @@ } -JNIEXPORT void JNICALL - Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2B - (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass, - jobject fieldName, jbyte newValue) -{ - const char *fieldNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "B"); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetByteField (env, targetObject, fid, newValue); - } -} - -JNIEXPORT void JNICALL -Java_java_io_ObjectInputStream_objSetField (JNIEnv * env, jclass clazz, - jobject targetObject, - jobject declaringClass, - jobject fieldName, - jobject fieldTypeName, - jobject newValue) -{ - const char *fieldNameInC, *fieldTypeNameInC; - jfieldID fid; - if (targetObject == NULL) - return; - fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL); - fieldTypeNameInC = (*env)->GetStringUTFChars (env, fieldTypeName, NULL); - fid = - (*env)->GetFieldID (env, declaringClass, fieldNameInC, fieldTypeNameInC); - (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC); - (*env)->ReleaseStringUTFChars (env, fieldTypeName, fieldTypeNameInC); - - /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */ - if (fid != 0) - { - (*env)->SetObjectField (env, targetObject, fid, newValue); - } -}