Field.java revision 7365de1056414750d0a7d1fdd26025fd247f0d04
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 dalvik.system.VMStack; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Annotation; 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 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Class<?> declaringClass; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Class<?> type; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Type genericType; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private volatile boolean genericTypesAreInitialized = false; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String name; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int slot; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_BOOLEAN = 1; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_BYTE = 2; 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_CHAR = 3; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_SHORT = 4; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_INTEGER = 5; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_FLOAT = 6; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_LONG = 7; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int TYPE_DOUBLE = 8; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Construct a clone of the given instance. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param orig non-null; the original instance to clone 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /*package*/ Field(Field orig) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(orig.declaringClass, orig.type, orig.name, orig.slot); 82f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Copy the accessible flag. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (orig.flag) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.flag = true; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Field(Class<?> declaringClass, Class<?> type, String name, int slot) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.declaringClass = declaringClass; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.type = type; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.name = name; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.slot = slot; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private synchronized void initGenericType() { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!genericTypesAreInitialized) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String signatureAttribute = getSignatureAttribute(); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project GenericSignatureParser parser = new GenericSignatureParser( 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project VMStack.getCallingClassLoader2()); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parser.parseForField(this.declaringClass, signatureAttribute); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericType = parser.fieldType; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (genericType == null) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericType = getType(); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project genericTypesAreInitialized = true; 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** {@inheritDoc} */ 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* package */String getSignatureAttribute() { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] annotation = getSignatureAnnotation(declaringClass, slot); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (annotation == null) { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return StringUtils.combineStrings(annotation); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Get the Signature annotation for this field. Returns null if not found. 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project native private Object[] getSignatureAnnotation(Class declaringClass, int slot); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not this field is synthetic. 129f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this field is synthetic, {@code false} otherwise 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isSynthetic() { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int flags = getFieldModifiers(declaringClass, slot); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (flags & Modifier.SYNTHETIC) != 0; 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the string representation of this field, including the field's 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * generic type. 140f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string representation of this field 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toGenericString() { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuilder sb = new StringBuilder(80); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append modifiers if any 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int modifier = getModifiers(); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (modifier != 0) { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(Modifier.toString(modifier)).append(' '); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append generic type 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project appendGenericType(sb, getGenericType()); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(' '); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // append full field name 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(getDeclaringClass().getName()).append('.').append(getName()); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not this field is an enumeration constant. 160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this field is an enumeration constant, {@code 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * false} otherwise 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isEnumConstant() { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int flags = getFieldModifiers(declaringClass, slot); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (flags & Modifier.ENUM) != 0; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the generic type of this field. 171f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the generic type 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws GenericSignatureFormatError 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic field signature is invalid 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws TypeNotPresentException 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic type points to a missing type 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MalformedParameterizedTypeException 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the generic type points to a type that cannot be 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instantiated for some reason 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Type getGenericType() { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project initGenericType(); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Types.getType(genericType); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Annotation[] getDeclaredAnnotations() { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDeclaredAnnotations(declaringClass, slot); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project native private Annotation[] getDeclaredAnnotations(Class declaringClass, int slot); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether or not the specified {@code object} is equal to this 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field. To be equal, the specified object must be an instance of 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Field} with the same declaring class, type and name as this field. 197f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this method, 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return object instanceof Field && toString().equals(object.toString()); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object. This reproduces 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the effect of {@code object.fieldName} 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the type of this field is a primitive type, the field value is 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * automatically wrapped. 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is null, a NullPointerException is thrown. If 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object is not an instance of the declaring class of the method, an 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException is thrown. 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value, possibly wrapped 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object get(Object object) throws IllegalAccessException, IllegalArgumentException { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getField(object, declaringClass, type, slot, flag); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * boolean}. This reproduces the effect of {@code object.fieldName} 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 252f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getBoolean(Object object) throws IllegalAccessException, 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN); 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code byte}. 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte getByte(Object object) throws IllegalAccessException, IllegalArgumentException { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getBField(object, declaringClass, type, slot, flag, TYPE_BYTE); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code char}. 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 307f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char getChar(Object object) throws IllegalAccessException, IllegalArgumentException { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getCField(object, declaringClass, type, slot, flag, TYPE_CHAR); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the class that declares this field. 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the declaring class 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Class<?> getDeclaringClass() { 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return declaringClass; 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * double}. This reproduces the effect of {@code object.fieldName} 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 343f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double getDouble(Object object) throws IllegalAccessException, IllegalArgumentException { 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code float} 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * . This reproduces the effect of {@code object.fieldName} 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 370f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float getFloat(Object object) throws IllegalAccessException, IllegalArgumentException { 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getFField(object, declaringClass, type, slot, flag, TYPE_FLOAT); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as an {@code int}. 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 397f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getInt(Object object) throws IllegalAccessException, IllegalArgumentException { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getIField(object, declaringClass, type, slot, flag, TYPE_INTEGER); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code long}. 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This reproduces the effect of {@code object.fieldName} 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 424f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getLong(Object object) throws IllegalAccessException, IllegalArgumentException { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getJField(object, declaringClass, type, slot, flag, TYPE_LONG); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the modifiers for this field. The {@link Modifier} class should 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be used to decode the result. 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the modifiers for this field 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Modifier 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getModifiers() { 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getFieldModifiers(declaringClass, slot); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native int getFieldModifiers(Class<?> declaringClass, int slot); 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the name of this field. 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of this field 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getName() { 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return name; 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the field in the specified object as a {@code short} 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * . This reproduces the effect of {@code object.fieldName} 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 473f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short getShort(Object object) throws IllegalAccessException, IllegalArgumentException { 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getSField(object, declaringClass, type, slot, flag, TYPE_SHORT); 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the constructor's signature in non-printable form. This is called 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (only) from IO native code and needed for deriving the serialVersionUID 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the class 492f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the constructor's signature. 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unused") 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String getSignature() { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getSignature(type); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the {@link Class} associated with the type of this field. 502f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the type of this field 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Class<?> getType() { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return type; 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns an integer hash code for this field. Objects which are equal 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return the same value for this method. 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The hash code for a Field is the exclusive-or combination of the hash 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * code of the field's name and the hash code of the name of its declaring 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class. 516f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for this field 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #equals 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-changed 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return name.hashCode() ^ getDeclaringClass().getName().hashCode(); 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-changed 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the value. This 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reproduces the effect of {@code object.fieldName = value} 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the field type is a primitive type, the value is automatically 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unwrapped. If the unwrap fails, an IllegalArgumentException is thrown. If 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value cannot be converted to the field type via a widening 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void set(Object object, Object value) throws IllegalAccessException, 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setField(object, declaringClass, type, slot, flag, value); 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * boolean} value. This reproduces the effect of {@code object.fieldName = 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value} 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 577f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setBoolean(Object object, boolean value) throws IllegalAccessException, 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setZField(object, declaringClass, type, slot, flag, TYPE_BOOLEAN, value); 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code byte} 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 609f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setByte(Object object, byte value) throws IllegalAccessException, 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setBField(object, declaringClass, type, slot, flag, TYPE_BYTE, value); 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code char} 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 641f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setChar(Object object, char value) throws IllegalAccessException, 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setCField(object, declaringClass, type, slot, flag, TYPE_CHAR, value); 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code double} 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 673f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDouble(Object object, double value) throws IllegalAccessException, 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setDField(object, declaringClass, type, slot, flag, TYPE_DOUBLE, value); 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code float} 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 705f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFloat(Object object, float value) throws IllegalAccessException, 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setFField(object, declaringClass, type, slot, flag, TYPE_FLOAT, value); 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Set the value of the field in the specified object to the {@code int} 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 737f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setInt(Object object, int value) throws IllegalAccessException, 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setIField(object, declaringClass, type, slot, flag, TYPE_INTEGER, value); 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code long} 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 769f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLong(Object object, long value) throws IllegalAccessException, 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setJField(object, declaringClass, type, slot, flag, TYPE_LONG, value); 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the field in the specified object to the {@code short} 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. This reproduces the effect of {@code object.fieldName = value} 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this field is static, the object argument is ignored. 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Otherwise, if the object is {@code null}, a NullPointerException is 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thrown. If the object is not an instance of the declaring class of the 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, an IllegalArgumentException is thrown. 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this Field object is enforcing access control (see AccessibleObject) 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and this field is not accessible from the current context, an 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalAccessException is thrown. 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the value cannot be converted to the field type via a widening 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * conversion, an IllegalArgumentException is thrown. 801f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to access 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is {@code null} and the field is non-static 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the object is not compatible with the declaring class 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessException 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this field is not accessible 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setShort(Object object, short value) throws IllegalAccessException, 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException { 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSField(object, declaringClass, type, slot, flag, TYPE_SHORT, value); 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a string containing a concise, human-readable description of this 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field. 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format of the string is: 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ol> 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>modifiers (if any) 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>type 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>declaring class name 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>'.' 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>field name 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ol> 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For example: {@code public static java.io.InputStream 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.System.in} 833f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a printable representation for this field 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuffer result = new StringBuffer(Modifier.toString(getModifiers())); 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result.length() != 0) 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(' '); 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(type.getName()); 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(' '); 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(declaringClass.getName()); 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append('.'); 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(name); 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result.toString(); 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native Object getField(Object o, Class<?> declaringClass, Class<?> type, int slot, 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck) throws IllegalAccessException; 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native double getDField(Object o, Class<?> declaringClass, Class<?> type, int slot, 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native int getIField(Object o, Class<?> declaringClass, Class<?> type, int slot, 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native long getJField(Object o, Class<?> declaringClass, Class<?> type, int slot, 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native boolean getZField(Object o, Class<?> declaringClass, Class<?> type, int slot, 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native float getFField(Object o, Class<?> declaringClass, Class<?> type, int slot, 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native char getCField(Object o, Class<?> declaringClass, Class<?> type, int slot, 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native short getSField(Object o, Class<?> declaringClass, Class<?> type, int slot, 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native byte getBField(Object o, Class<?> declaringClass, Class<?> type, int slot, 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no) throws IllegalAccessException; 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setField(Object o, Class<?> declaringClass, Class<?> type, int slot, 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, Object value) throws IllegalAccessException; 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setDField(Object o, Class<?> declaringClass, Class<?> type, int slot, 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, double v) throws IllegalAccessException; 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setIField(Object o, Class<?> declaringClass, Class<?> type, int slot, 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, int i) throws IllegalAccessException; 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setJField(Object o, Class<?> declaringClass, Class<?> type, int slot, 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, long j) throws IllegalAccessException; 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setZField(Object o, Class<?> declaringClass, Class<?> type, int slot, 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, boolean z) throws IllegalAccessException; 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setFField(Object o, Class<?> declaringClass, Class<?> type, int slot, 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, float f) throws IllegalAccessException; 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setCField(Object o, Class<?> declaringClass, Class<?> type, int slot, 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, char c) throws IllegalAccessException; 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setSField(Object o, Class<?> declaringClass, Class<?> type, int slot, 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, short s) throws IllegalAccessException; 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private native void setBField(Object o, Class<?> declaringClass, Class<?> type, int slot, 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean noAccessCheck, int type_no, byte b) throws IllegalAccessException; 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 906