diff options
Diffstat (limited to 'libdvm/src/main/java/java/lang/reflect/Field.java')
-rw-r--r-- | libdvm/src/main/java/java/lang/reflect/Field.java | 931 |
1 files changed, 0 insertions, 931 deletions
diff --git a/libdvm/src/main/java/java/lang/reflect/Field.java b/libdvm/src/main/java/java/lang/reflect/Field.java deleted file mode 100644 index fa8e5e7..0000000 --- a/libdvm/src/main/java/java/lang/reflect/Field.java +++ /dev/null @@ -1,931 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.lang.reflect; - -import java.lang.annotation.Annotation; -import java.util.Comparator; -import org.apache.harmony.kernel.vm.StringUtils; -import libcore.reflect.GenericSignatureParser; -import libcore.reflect.Types; - -/** - * This class represents a field. Information about the field can be accessed, - * and the field's value can be accessed dynamically. - */ -public final class Field extends AccessibleObject implements Member { - - /** - * Orders fields by their name and declaring class. - * - * @hide - */ - public static final Comparator<Field> ORDER_BY_NAME_AND_DECLARING_CLASS - = new Comparator<Field>() { - @Override public int compare(Field a, Field b) { - int comparison = a.name.compareTo(b.name); - if (comparison != 0) { - return comparison; - } - - return a.getDeclaringClass().getName().compareTo(b.getDeclaringClass().getName()); - } - }; - - private Class<?> declaringClass; - - private Class<?> type; - - private Type genericType; - - private volatile boolean genericTypesAreInitialized = false; - - private String name; - - private int slot; - - private final int fieldDexIndex; - - private static final char TYPE_BOOLEAN = 'Z'; - - private static final char TYPE_BYTE = 'B'; - - private static final char TYPE_CHAR = 'C'; - - private static final char TYPE_SHORT = 'S'; - - private static final char TYPE_INTEGER = 'I'; - - private static final char TYPE_FLOAT = 'F'; - - private static final char TYPE_LONG = 'J'; - - private static final char TYPE_DOUBLE = 'D'; - - private Field(Class<?> declaringClass, Class<?> type, String name, int slot, int fieldDexIndex) { - this.declaringClass = declaringClass; - this.type = type; - this.name = name; - this.slot = slot; - this.fieldDexIndex = fieldDexIndex; - } - - /** - * Returns the index of this field's ID in its dex file. - * @hide - */ - public int getDexFieldIndex() { - return fieldDexIndex; - } - - private synchronized void initGenericType() { - if (!genericTypesAreInitialized) { - String signatureAttribute = getSignatureAttribute(); - GenericSignatureParser parser = new GenericSignatureParser( - declaringClass.getClassLoader()); - parser.parseForField(this.declaringClass, signatureAttribute); - genericType = parser.fieldType; - if (genericType == null) { - genericType = getType(); - } - genericTypesAreInitialized = true; - } - } - - /** {@inheritDoc} */ - @Override - /* package */String getSignatureAttribute() { - Object[] annotation = getSignatureAnnotation(declaringClass, slot); - - if (annotation == null) { - return null; - } - - return StringUtils.combineStrings(annotation); - } - - /** - * Get the Signature annotation for this field. Returns null if not found. - */ - native private Object[] getSignatureAnnotation(Class declaringClass, int slot); - - /** - * Indicates whether or not this field is synthetic. - * - * @return {@code true} if this field is synthetic, {@code false} otherwise - */ - public boolean isSynthetic() { - int flags = getFieldModifiers(declaringClass, slot); - return (flags & Modifier.SYNTHETIC) != 0; - } - - /** - * Returns the string representation of this field, including the field's - * generic type. - * - * @return the string representation of this field - */ - public String toGenericString() { - StringBuilder sb = new StringBuilder(80); - // append modifiers if any - int modifier = getModifiers(); - if (modifier != 0) { - sb.append(Modifier.toString(modifier)).append(' '); - } - // append generic type - appendGenericType(sb, getGenericType()); - sb.append(' '); - // append full field name - sb.append(getDeclaringClass().getName()).append('.').append(getName()); - return sb.toString(); - } - - /** - * Indicates whether or not this field is an enumeration constant. - * - * @return {@code true} if this field is an enumeration constant, {@code - * false} otherwise - */ - public boolean isEnumConstant() { - int flags = getFieldModifiers(declaringClass, slot); - return (flags & Modifier.ENUM) != 0; - } - - /** - * Returns the generic type of this field. - * - * @return the generic type - * @throws GenericSignatureFormatError - * if the generic field signature is invalid - * @throws TypeNotPresentException - * if the generic type points to a missing type - * @throws MalformedParameterizedTypeException - * if the generic type points to a type that cannot be - * instantiated for some reason - */ - public Type getGenericType() { - initGenericType(); - return Types.getType(genericType); - } - - @Override public Annotation[] getDeclaredAnnotations() { - return getDeclaredAnnotations(declaringClass, slot); - } - private static native Annotation[] getDeclaredAnnotations(Class declaringClass, int slot); - - @Override public <A extends Annotation> A getAnnotation(Class<A> annotationType) { - if (annotationType == null) { - throw new NullPointerException("annotationType == null"); - } - return getAnnotation(declaringClass, slot, annotationType); - } - private static native <A extends Annotation> A getAnnotation( - Class<?> declaringClass, int slot, Class<A> annotationType); - - @Override public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) { - if (annotationType == null) { - throw new NullPointerException("annotationType == null"); - } - return isAnnotationPresent(declaringClass, slot, annotationType); - } - private static native boolean isAnnotationPresent( - Class<?> declaringClass, int slot, Class<? extends Annotation> annotationType); - - /** - * Indicates whether or not the specified {@code object} is equal to this - * field. To be equal, the specified object must be an instance of - * {@code Field} with the same declaring class, type and name as this field. - * - * @param object - * the object to compare - * @return {@code true} if the specified object is equal to this method, - * {@code false} otherwise - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - return object instanceof Field && toString().equals(object.toString()); - } - - /** - * Returns the value of the field in the specified object. This reproduces - * the effect of {@code object.fieldName} - * - * <p>If the type of this field is a primitive type, the field value is - * automatically boxed. - * - * <p>If this field is static, the object argument is ignored. - * Otherwise, if the object is null, a NullPointerException is thrown. If - * the object is not an instance of the declaring class of the method, an - * IllegalArgumentException is thrown. - * - * <p>If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value, possibly boxed - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public Object get(Object object) throws IllegalAccessException, IllegalArgumentException { - return getField(object, declaringClass, type, slot, flag); - } - - /** - * Returns the value of the field in the specified object as a {@code - * boolean}. This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public boolean getBoolean(Object object) throws IllegalAccessException, - IllegalArgumentException { - return getZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN); - } - - /** - * Returns the value of the field in the specified object as a {@code byte}. - * This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public byte getByte(Object object) throws IllegalAccessException, IllegalArgumentException { - return getBField(object, declaringClass, type, slot, flag, TYPE_BYTE); - } - - /** - * Returns the value of the field in the specified object as a {@code char}. - * This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public char getChar(Object object) throws IllegalAccessException, IllegalArgumentException { - return getCField(object, declaringClass, type, slot, flag, TYPE_CHAR); - } - - /** - * Returns the class that declares this field. - * - * @return the declaring class - */ - public Class<?> getDeclaringClass() { - return declaringClass; - } - - /** - * Returns the value of the field in the specified object as a {@code - * double}. This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public double getDouble(Object object) throws IllegalAccessException, IllegalArgumentException { - return getDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE); - } - - /** - * Returns the value of the field in the specified object as a {@code float} - * . This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public float getFloat(Object object) throws IllegalAccessException, IllegalArgumentException { - return getFField(object, declaringClass, type, slot, flag, TYPE_FLOAT); - } - - /** - * Returns the value of the field in the specified object as an {@code int}. - * This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public int getInt(Object object) throws IllegalAccessException, IllegalArgumentException { - return getIField(object, declaringClass, type, slot, flag, TYPE_INTEGER); - } - - /** - * Returns the value of the field in the specified object as a {@code long}. - * This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public long getLong(Object object) throws IllegalAccessException, IllegalArgumentException { - return getJField(object, declaringClass, type, slot, flag, TYPE_LONG); - } - - /** - * Returns the modifiers for this field. The {@link Modifier} class should - * be used to decode the result. - * - * @return the modifiers for this field - * @see Modifier - */ - public int getModifiers() { - return getFieldModifiers(declaringClass, slot); - } - - private native int getFieldModifiers(Class<?> declaringClass, int slot); - - /** - * Returns the name of this field. - * - * @return the name of this field - */ - public String getName() { - return name; - } - - /** - * Returns the value of the field in the specified object as a {@code short} - * . This reproduces the effect of {@code object.fieldName} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * @param object - * the object to access - * @return the field value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public short getShort(Object object) throws IllegalAccessException, IllegalArgumentException { - return getSField(object, declaringClass, type, slot, flag, TYPE_SHORT); - } - - /** - * Returns the constructor's signature in non-printable form. This is called - * (only) from IO native code and needed for deriving the serialVersionUID - * of the class - * - * @return the constructor's signature. - */ - @SuppressWarnings("unused") - private String getSignature() { - return getSignature(type); - } - - /** - * Return the {@link Class} associated with the type of this field. - * - * @return the type of this field - */ - public Class<?> getType() { - return type; - } - - /** - * Returns an integer hash code for this field. Objects which are equal - * return the same value for this method. - * <p> - * The hash code for a Field is the exclusive-or combination of the hash - * code of the field's name and the hash code of the name of its declaring - * class. - * - * @return the hash code for this field - * @see #equals - */ - @Override - public int hashCode() { - return name.hashCode() ^ getDeclaringClass().getName().hashCode(); - } - - /** - * Sets the value of the field in the specified object to the value. This - * reproduces the effect of {@code object.fieldName = value} - * - * <p>If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * - * <p>If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * - * <p>If the field type is a primitive type, the value is automatically - * unboxed. If the unboxing fails, an IllegalArgumentException is thrown. If - * the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void set(Object object, Object value) throws IllegalAccessException, - IllegalArgumentException { - setField(object, declaringClass, type, slot, flag, value); - } - - /** - * Sets the value of the field in the specified object to the {@code - * boolean} value. This reproduces the effect of {@code object.fieldName = - * value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setBoolean(Object object, boolean value) throws IllegalAccessException, - IllegalArgumentException { - setZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN, value); - } - - /** - * Sets the value of the field in the specified object to the {@code byte} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setByte(Object object, byte value) throws IllegalAccessException, - IllegalArgumentException { - setBField(object, declaringClass, type, slot, flag, TYPE_BYTE, value); - } - - /** - * Sets the value of the field in the specified object to the {@code char} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setChar(Object object, char value) throws IllegalAccessException, - IllegalArgumentException { - setCField(object, declaringClass, type, slot, flag, TYPE_CHAR, value); - } - - /** - * Sets the value of the field in the specified object to the {@code double} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setDouble(Object object, double value) throws IllegalAccessException, - IllegalArgumentException { - setDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE, value); - } - - /** - * Sets the value of the field in the specified object to the {@code float} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setFloat(Object object, float value) throws IllegalAccessException, - IllegalArgumentException { - setFField(object, declaringClass, type, slot, flag, TYPE_FLOAT, value); - } - - /** - * Set the value of the field in the specified object to the {@code int} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setInt(Object object, int value) throws IllegalAccessException, - IllegalArgumentException { - setIField(object, declaringClass, type, slot, flag, TYPE_INTEGER, value); - } - - /** - * Sets the value of the field in the specified object to the {@code long} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setLong(Object object, long value) throws IllegalAccessException, - IllegalArgumentException { - setJField(object, declaringClass, type, slot, flag, TYPE_LONG, value); - } - - /** - * Sets the value of the field in the specified object to the {@code short} - * value. This reproduces the effect of {@code object.fieldName = value} - * <p> - * If this field is static, the object argument is ignored. - * Otherwise, if the object is {@code null}, a NullPointerException is - * thrown. If the object is not an instance of the declaring class of the - * method, an IllegalArgumentException is thrown. - * <p> - * If this Field object is enforcing access control (see AccessibleObject) - * and this field is not accessible from the current context, an - * IllegalAccessException is thrown. - * <p> - * If the value cannot be converted to the field type via a widening - * conversion, an IllegalArgumentException is thrown. - * - * @param object - * the object to access - * @param value - * the new value - * @throws NullPointerException - * if the object is {@code null} and the field is non-static - * @throws IllegalArgumentException - * if the object is not compatible with the declaring class - * @throws IllegalAccessException - * if this field is not accessible - */ - public void setShort(Object object, short value) throws IllegalAccessException, - IllegalArgumentException { - setSField(object, declaringClass, type, slot, flag, TYPE_SHORT, value); - } - - /** - * Returns a string containing a concise, human-readable description of this - * field. - * <p> - * The format of the string is: - * <ol> - * <li>modifiers (if any) - * <li>type - * <li>declaring class name - * <li>'.' - * <li>field name - * </ol> - * <p> - * For example: {@code public static java.io.InputStream - * java.lang.System.in} - * - * @return a printable representation for this field - */ - @Override - public String toString() { - StringBuilder result = new StringBuilder(Modifier.toString(getModifiers())); - if (result.length() != 0) { - result.append(' '); - } - appendTypeName(result, type); - result.append(' '); - appendTypeName(result, declaringClass); - result.append('.'); - result.append(name); - return result.toString(); - } - - private native Object getField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck) throws IllegalAccessException; - - private native double getDField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native int getIField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native long getJField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native boolean getZField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native float getFField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native char getCField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native short getSField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native byte getBField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor) throws IllegalAccessException; - - private native void setField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, Object value) throws IllegalAccessException; - - private native void setDField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, double v) throws IllegalAccessException; - - private native void setIField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, int i) throws IllegalAccessException; - - private native void setJField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, long j) throws IllegalAccessException; - - private native void setZField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, boolean z) throws IllegalAccessException; - - private native void setFField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, float f) throws IllegalAccessException; - - private native void setCField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, char c) throws IllegalAccessException; - - private native void setSField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, short s) throws IllegalAccessException; - - private native void setBField(Object o, Class<?> declaringClass, Class<?> type, int slot, - boolean noAccessCheck, char descriptor, byte b) throws IllegalAccessException; - -} |