1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang.reflect; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Annotation; 360843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilsonimport java.util.Comparator; 377365de1056414750d0a7d1fdd26025fd247f0d04Jesse Wilsonimport org.apache.harmony.kernel.vm.StringUtils; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.luni.lang.reflect.GenericSignatureParser; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.luni.lang.reflect.Types; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class represents a field. Information about the field can be accessed, 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and the field's value can be accessed dynamically. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class Field extends AccessibleObject implements Member { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 470843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson /** 480843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson * Orders fields by their name and declaring class. 490843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson * 500843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson * @hide 510843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson */ 520843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson public static final Comparator<Field> ORDER_BY_NAME_AND_DECLARING_CLASS 530843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson = new Comparator<Field>() { 540843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson @Override public int compare(Field a, Field b) { 550843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson int comparison = a.name.compareTo(b.name); 560843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson if (comparison != 0) { 570843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson return comparison; 580843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson } 590843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson 600843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson return a.getDeclaringClass().getName().compareTo(b.getDeclaringClass().getName()); 610843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson } 620843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson }; 630843c022f443b5c4a8ea4d298c8b12147989ec92Jesse Wilson 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Class<?> declaringClass; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Class<?> type; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Type genericType; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private volatile boolean genericTypesAreInitialized = false; 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String name; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int slot; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7673fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_BOOLEAN = 'Z'; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7873fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_BYTE = 'B'; 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8073fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_CHAR = 'C'; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8273fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_SHORT = 'S'; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8473fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_INTEGER = 'I'; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8673fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_FLOAT = 'F'; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8873fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_LONG = 'J'; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 9073fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein private static final char TYPE_DOUBLE = 'D'; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Construct a clone of the given instance. 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param orig non-null; the original instance to clone 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /*package*/ Field(Field orig) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(orig.declaringClass, orig.type, orig.name, orig.slot); 99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Copy the accessible flag. 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (orig.flag) { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.flag = true; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Field(Class<?> declaringClass, Class<?> type, String name, int slot) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.declaringClass = declaringClass; 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.type = type; 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.name = name; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.slot = slot; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private synchronized void initGenericType() { 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!genericTypesAreInitialized) { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String signatureAttribute = getSignatureAttribute(); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project GenericSignatureParser parser = new GenericSignatureParser( 117f3507d0976cb14ba59e0715f22f4c6b7c97cbae8Jesse Wilson declaringClass.getClassLoader()); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parser.parseForField(this.declaringClass, signatureAttribute); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericType = parser.fieldType; 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (genericType == null) { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericType = getType(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericTypesAreInitialized = true; 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** {@inheritDoc} */ 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* package */String getSignatureAttribute() { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] annotation = getSignatureAnnotation(declaringClass, slot); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (annotation == null) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return StringUtils.combineStrings(annotation); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Get the Signature annotation for this field. Returns null if not found. 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project native private Object[] getSignatureAnnotation(Class declaringClass, int slot); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not this field is synthetic. 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this field is synthetic, {@code false} otherwise 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isSynthetic() { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int flags = getFieldModifiers(declaringClass, slot); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (flags & Modifier.SYNTHETIC) != 0; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the string representation of this field, including the field's 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * generic type. 157f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string representation of this field 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toGenericString() { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuilder sb = new StringBuilder(80); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append modifiers if any 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int modifier = getModifiers(); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (modifier != 0) { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(Modifier.toString(modifier)).append(' '); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append generic type 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project appendGenericType(sb, getGenericType()); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(' '); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append full field name 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(getDeclaringClass().getName()).append('.').append(getName()); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not this field is an enumeration constant. 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this field is an enumeration constant, {@code 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * false} otherwise 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isEnumConstant() { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int flags = getFieldModifiers(declaringClass, slot); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (flags & Modifier.ENUM) != 0; 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the generic type of this field. 188f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the generic type 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws GenericSignatureFormatError 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic field signature is invalid 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws TypeNotPresentException 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic type points to a missing type 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MalformedParameterizedTypeException 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic type points to a type that cannot be 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instantiated for some reason 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Type getGenericType() { 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project initGenericType(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Types.getType(genericType); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 203e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson @Override public Annotation[] getDeclaredAnnotations() { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDeclaredAnnotations(declaringClass, slot); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson private static native Annotation[] getDeclaredAnnotations(Class declaringClass, int slot); 207e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson 208e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson @Override public <A extends Annotation> A getAnnotation(Class<A> annotationType) { 209e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson if (annotationType == null) { 210e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson throw new NullPointerException("annotationType == null"); 211e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson } 212e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson return getAnnotation(declaringClass, slot, annotationType); 213e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson } 214e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson private static native <A extends Annotation> A getAnnotation( 215e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson Class<?> declaringClass, int slot, Class<A> annotationType); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson @Override public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) { 218e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson if (annotationType == null) { 219e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson throw new NullPointerException("annotationType == null"); 220e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson } 221e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson return isAnnotationPresent(declaringClass, slot, annotationType); 222e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson } 223e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson private static native boolean isAnnotationPresent( 224e62cb8ba7337b0ec19545e119246e0fc5f2c973fJesse Wilson Class<?> declaringClass, int slot, Class<? extends Annotation> annotationType); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not the specified {@code object} is equal to this 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field. To be equal, the specified object must be an instance of 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Field} with the same declaring class, type and name as this field. 230f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this method, 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return object instanceof Field && toString().equals(object.toString()); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object. This reproduces 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the effect of {@code object.fieldName} 2458da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 2468da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If the type of this field is a primitive type, the field value is 2478da55422ed93013260c1536080b14661bfecfefbElliott Hughes * automatically boxed. 2488da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 2498da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If this field is static, the object argument is ignored. 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is null, a NullPointerException is thrown. If 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object is not an instance of the declaring class of the method, an 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException is thrown. 2538da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 2548da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If this Field object is enforcing access control (see AccessibleObject) 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 257f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 2608da55422ed93013260c1536080b14661bfecfefbElliott Hughes * @return the field value, possibly boxed 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object get(Object object) throws IllegalAccessException, IllegalArgumentException { 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getField(object, declaringClass, type, slot, flag); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * boolean}. This reproduces the effect of {@code object.fieldName} 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getBoolean(Object object) throws IllegalAccessException, 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code byte}. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 312f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte getByte(Object object) throws IllegalAccessException, IllegalArgumentException { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getBField(object, declaringClass, type, slot, flag, TYPE_BYTE); 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code char}. 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 339f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char getChar(Object object) throws IllegalAccessException, IllegalArgumentException { 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getCField(object, declaringClass, type, slot, flag, TYPE_CHAR); 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the class that declares this field. 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the declaring class 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Class<?> getDeclaringClass() { 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return declaringClass; 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * double}. This reproduces the effect of {@code object.fieldName} 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 375f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double getDouble(Object object) throws IllegalAccessException, IllegalArgumentException { 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code float} 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * . This reproduces the effect of {@code object.fieldName} 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 402f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float getFloat(Object object) throws IllegalAccessException, IllegalArgumentException { 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getFField(object, declaringClass, type, slot, flag, TYPE_FLOAT); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as an {@code int}. 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 429f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getInt(Object object) throws IllegalAccessException, IllegalArgumentException { 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getIField(object, declaringClass, type, slot, flag, TYPE_INTEGER); 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code long}. 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 456f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getLong(Object object) throws IllegalAccessException, IllegalArgumentException { 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getJField(object, declaringClass, type, slot, flag, TYPE_LONG); 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the modifiers for this field. The {@link Modifier} class should 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be used to decode the result. 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the modifiers for this field 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Modifier 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getModifiers() { 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getFieldModifiers(declaringClass, slot); 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native int getFieldModifiers(Class<?> declaringClass, int slot); 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the name of this field. 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of this field 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getName() { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return name; 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code short} 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * . This reproduces the effect of {@code object.fieldName} 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 505f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short getShort(Object object) throws IllegalAccessException, IllegalArgumentException { 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getSField(object, declaringClass, type, slot, flag, TYPE_SHORT); 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the constructor's signature in non-printable form. This is called 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (only) from IO native code and needed for deriving the serialVersionUID 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the class 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the constructor's signature. 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unused") 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String getSignature() { 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getSignature(type); 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the {@link Class} associated with the type of this field. 534f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the type of this field 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Class<?> getType() { 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return type; 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns an integer hash code for this field. Objects which are equal 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return the same value for this method. 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The hash code for a Field is the exclusive-or combination of the hash 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * code of the field's name and the hash code of the name of its declaring 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class. 548f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for this field 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #equals 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return name.hashCode() ^ getDeclaringClass().getName().hashCode(); 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the value. This 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reproduces the effect of {@code object.fieldName = value} 5608da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 5618da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If this field is static, the object argument is ignored. 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 5658da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 5668da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If this Field object is enforcing access control (see AccessibleObject) 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 5698da55422ed93013260c1536080b14661bfecfefbElliott Hughes * 5708da55422ed93013260c1536080b14661bfecfefbElliott Hughes * <p>If the field type is a primitive type, the value is automatically 5718da55422ed93013260c1536080b14661bfecfefbElliott Hughes * unboxed. If the unboxing fails, an IllegalArgumentException is thrown. If 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value cannot be converted to the field type via a widening 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 574f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void set(Object object, Object value) throws IllegalAccessException, 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setField(object, declaringClass, type, slot, flag, value); 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * boolean} value. This reproduces the effect of {@code object.fieldName = 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value} 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 607f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setBoolean(Object object, boolean value) throws IllegalAccessException, 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN, value); 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code byte} 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 639f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setByte(Object object, byte value) throws IllegalAccessException, 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setBField(object, declaringClass, type, slot, flag, TYPE_BYTE, value); 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code char} 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 671f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setChar(Object object, char value) throws IllegalAccessException, 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setCField(object, declaringClass, type, slot, flag, TYPE_CHAR, value); 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code double} 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 703f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDouble(Object object, double value) throws IllegalAccessException, 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE, value); 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code float} 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 735f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFloat(Object object, float value) throws IllegalAccessException, 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setFField(object, declaringClass, type, slot, flag, TYPE_FLOAT, value); 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Set the value of the field in the specified object to the {@code int} 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 767f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setInt(Object object, int value) throws IllegalAccessException, 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setIField(object, declaringClass, type, slot, flag, TYPE_INTEGER, value); 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code long} 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 799f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLong(Object object, long value) throws IllegalAccessException, 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setJField(object, declaringClass, type, slot, flag, TYPE_LONG, value); 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code short} 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 831f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setShort(Object object, short value) throws IllegalAccessException, 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSField(object, declaringClass, type, slot, flag, TYPE_SHORT, value); 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a string containing a concise, human-readable description of this 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field. 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format of the string is: 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ol> 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>modifiers (if any) 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>type 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>declaring class name 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>'.' 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>field name 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ol> 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For example: {@code public static java.io.InputStream 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.System.in} 863f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a printable representation for this field 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 8687f0c06f737b6f1f6b3a5bb30111f95dd0ca586a2Brian Carlstrom StringBuilder result = new StringBuilder(Modifier.toString(getModifiers())); 8697f0c06f737b6f1f6b3a5bb30111f95dd0ca586a2Brian Carlstrom if (result.length() != 0) { 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(' '); 8717f0c06f737b6f1f6b3a5bb30111f95dd0ca586a2Brian Carlstrom } 872a0ee76b0850774edeb0c67204070b89d117573bcJesse Wilson appendTypeName(result, type); 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(' '); 874a0ee76b0850774edeb0c67204070b89d117573bcJesse Wilson appendTypeName(result, declaringClass); 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append('.'); 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(name); 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result.toString(); 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native Object getField(Object o, Class<?> declaringClass, Class<?> type, int slot, 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck) throws IllegalAccessException; 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native double getDField(Object o, Class<?> declaringClass, Class<?> type, int slot, 88473fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native int getIField(Object o, Class<?> declaringClass, Class<?> type, int slot, 88773fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native long getJField(Object o, Class<?> declaringClass, Class<?> type, int slot, 89073fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native boolean getZField(Object o, Class<?> declaringClass, Class<?> type, int slot, 89373fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native float getFField(Object o, Class<?> declaringClass, Class<?> type, int slot, 89673fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native char getCField(Object o, Class<?> declaringClass, Class<?> type, int slot, 89973fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native short getSField(Object o, Class<?> declaringClass, Class<?> type, int slot, 90273fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native byte getBField(Object o, Class<?> declaringClass, Class<?> type, int slot, 90573fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor) throws IllegalAccessException; 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setField(Object o, Class<?> declaringClass, Class<?> type, int slot, 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, Object value) throws IllegalAccessException; 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setDField(Object o, Class<?> declaringClass, Class<?> type, int slot, 91173fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, double v) throws IllegalAccessException; 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setIField(Object o, Class<?> declaringClass, Class<?> type, int slot, 91473fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, int i) throws IllegalAccessException; 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setJField(Object o, Class<?> declaringClass, Class<?> type, int slot, 91773fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, long j) throws IllegalAccessException; 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setZField(Object o, Class<?> declaringClass, Class<?> type, int slot, 92073fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, boolean z) throws IllegalAccessException; 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setFField(Object o, Class<?> declaringClass, Class<?> type, int slot, 92373fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, float f) throws IllegalAccessException; 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setCField(Object o, Class<?> declaringClass, Class<?> type, int slot, 92673fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, char c) throws IllegalAccessException; 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setSField(Object o, Class<?> declaringClass, Class<?> type, int slot, 92973fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, short s) throws IllegalAccessException; 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setBField(Object o, Class<?> declaringClass, Class<?> type, int slot, 93273fba5afced7560686badbc10dedf0d7211458b8Dan Bornstein boolean noAccessCheck, char descriptor, byte b) throws IllegalAccessException; 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 935