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