1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * An EmulatedFields is an object that represents a set of emulated fields for 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an object being dumped or loaded. It allows objects to be dumped with a shape 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * different than the fields they were declared to have. 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see ObjectInputStream.GetField 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see ObjectOutputStream.PutField 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see EmulatedFieldsForLoading 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see EmulatedFieldsForDumping 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass EmulatedFields { 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // A slot is a field plus its value 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class ObjectSlot { 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Field descriptor 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectStreamField field; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Actual value this emulated field holds 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object fieldValue; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // If this field has a default value (true) or something has been 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // assigned (false) 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean defaulted = true; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the descriptor for this emulated field. 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the field descriptor 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ObjectStreamField getField() { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return field; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the value held by this emulated field. 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the field value 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getFieldValue() { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return fieldValue; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // The collection of slots the receiver represents 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ObjectSlot[] slotsToSerialize; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ObjectStreamField[] declaredFields; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new instance of EmulatedFields. 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param fields 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an array of ObjectStreamFields, which describe the fields to 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be emulated (names, types, etc). 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param declared 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an array of ObjectStreamFields, which describe the declared 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fields. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public EmulatedFields(ObjectStreamField[] fields, 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectStreamField[] declared) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // We assume the slots are already sorted in the right shape for dumping 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buildSlots(fields); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project declaredFields = declared; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Build emulated slots that correspond to emulated fields. A slot is a 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * field descriptor (ObjectStreamField) plus the actual value it holds. 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param fields 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an array of ObjectStreamField, which describe the fields to be 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * emulated (names, types, etc). 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void buildSlots(ObjectStreamField[] fields) { 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slotsToSerialize = new ObjectSlot[fields.length]; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < fields.length; i++) { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot s = new ObjectSlot(); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slotsToSerialize[i] = s; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.field = fields[i]; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // We assume the slots are already sorted in the right shape for dumping 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns {@code true} indicating the field called {@code name} has not had 1073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * a value explicitly assigned and that it still holds a default value for 1083819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * its type, or {@code false} indicating that the field named has been 1093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * assigned a value explicitly. 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 1123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to test. 1133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return {@code true} if {@code name} still holds its default value, 1143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * {@code false} otherwise 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 1173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if {@code name} is {@code null} 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean defaulted(String name) throws IllegalArgumentException { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, null); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 122387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no field '" + name + "'"); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted; 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns an ObjectSlot that corresponds to a field named {@code 1293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * fieldName} and type {@code fieldType}. If the field type {@code 1303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * fieldType} corresponds to a primitive type, the field type has to match 1313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * exactly or {@code null} is returned. If the field type {@code fieldType} 1323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * corresponds to an object type, the field type has to be compatible in 1333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * terms of assignment, or null is returned. If {@code fieldType} is {@code 1343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * null}, no such compatibility checking is performed and the slot is 1353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * returned. 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param fieldName 1383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param fieldType 1403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the type of the field. This will be used to test 1413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * compatibility. If {@code null}, no testing is done, the 1423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * corresponding slot is returned. 1433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return the object slot, or {@code null} if there is no field with that 1443819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * name, or no compatible field (relative to {@code fieldType}) 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ObjectSlot findSlot(String fieldName, Class<?> fieldType) { 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean isPrimitive = fieldType != null && fieldType.isPrimitive(); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < slotsToSerialize.length; i++) { 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = slotsToSerialize[i]; 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot.field.getName().equals(fieldName)) { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (isPrimitive) { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Looking for a primitive type field. Types must match 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // *exactly* 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot.field.getType() == fieldType) { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot; 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Looking for a non-primitive type field. 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (fieldType == null) { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot; // Null means we take anything 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Types must be compatible (assignment) 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot.field.getType().isAssignableFrom(fieldType)) { 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot; 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (declaredFields != null) { 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < declaredFields.length; i++) { 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectStreamField field = declaredFields[i]; 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (field.getName().equals(fieldName)) { 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (isPrimitive ? field.getType() == fieldType 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : fieldType == null 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || field.getType().isAssignableFrom( 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fieldType)) { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = new ObjectSlot(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.field = field; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = true; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot; 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the byte value of a given field named {@code name} 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the receiver. If the field has not been assigned any value yet, the 1933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 1963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 1983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 2003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 2033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte get(String name, byte defaultValue) 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Byte.TYPE); 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 210387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no byte field '" + name + "'"); 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Byte) slot.fieldValue) 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .byteValue(); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the char value of a given field named {@code name} in the 2183819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 2193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value {@code defaultValue} is returned instead. 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 2223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 2243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 2263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 2293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public char get(String name, char defaultValue) 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Character.TYPE); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 236387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no char field '" + name + "'"); 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Character) slot.fieldValue) 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .charValue(); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the double value of a given field named {@code name} 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the receiver. If the field has not been assigned any value yet, the 2453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 2483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 2503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 2523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 2553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public double get(String name, double defaultValue) 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Double.TYPE); 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 262387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no double field '" + name + "'"); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Double) slot.fieldValue) 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .doubleValue(); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2693819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the float value of a given field named {@code name} in 2703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 2713819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 2743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 2763819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 2783819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 2813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public float get(String name, float defaultValue) 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Float.TYPE); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 288387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no float field '" + name + "'"); 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Float) slot.fieldValue) 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .floatValue(); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the int value of a given field named {@code name} in the 2963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 2973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value {@code defaultValue} is returned instead. 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 3003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 3023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 3043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 3073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int get(String name, int defaultValue) 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Integer.TYPE); 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 314387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no int field '" + name + "'"); 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Integer) slot.fieldValue) 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .intValue(); 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the long value of a given field named {@code name} in the 3223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 3233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value {@code defaultValue} is returned instead. 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 3263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 3283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 3303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 3333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public long get(String name, long defaultValue) 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Long.TYPE); 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 340387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no long field '" + name + "'"); 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Long) slot.fieldValue) 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .longValue(); 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the Object value of a given field named {@code name} in 3483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 3493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 3523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 3543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 3563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 3593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object get(String name, Object defaultValue) 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, null); 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null || slot.field.getType().isPrimitive()) { 366387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no Object field '" + name + "'"); 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : slot.fieldValue; 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the short value of a given field named {@code name} in 3733819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 3743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 3773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 3793819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 3813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 3843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public short get(String name, short defaultValue) 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Short.TYPE); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 391387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no short field '" + name + "'"); 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Short) slot.fieldValue) 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .shortValue(); 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Finds and returns the boolean value of a given field named {@code name} in 3993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 4003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * default value {@code defaultValue} is returned instead. 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 4033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to find. 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultValue 4053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * return value in case the field has not been assigned to yet. 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the given field if it has been assigned, the default 4073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * value otherwise. 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 4103819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean get(String name, boolean defaultValue) 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException { 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Boolean.TYPE); 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if not initialized yet, we give the default value 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 417387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no boolean field '" + name + "'"); 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slot.defaulted ? defaultValue : ((Boolean) slot.fieldValue) 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .booleanValue(); 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the byte value of a given field named {@code name} in the 4253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 4283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 4303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 4333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, byte value) throws IllegalArgumentException { 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Byte.TYPE); 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 438387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no byte field '" + name + "'"); 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Byte.valueOf(value); 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the char value of a given field named {@code name} in the 4463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 4493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 4513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 4543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, char value) throws IllegalArgumentException { 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Character.TYPE); 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 459387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no char field '" + name + "'"); 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Character.valueOf(value); 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the double value of a given field named {@code name} in the 4673819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 4703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 4723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 4753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, double value) throws IllegalArgumentException { 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Double.TYPE); 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 480387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no double field '" + name + "'"); 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Double.valueOf(value); 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the float value of a given field named {@code name} in the 4883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 4913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 4933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 4963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, float value) throws IllegalArgumentException { 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Float.TYPE); 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 501387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no float field '" + name + "'"); 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Float.valueOf(value); 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5083819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the int value of a given field named {@code name} in the 5093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 5123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 5143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 5173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, int value) throws IllegalArgumentException { 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Integer.TYPE); 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 522387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no integer field '" + name + "'"); 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Integer.valueOf(value); 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the long value of a given field named {@code name} in the 5303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 5333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 5353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 5383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, long value) throws IllegalArgumentException { 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Long.TYPE); 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 543387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no long field '" + name + "'"); 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Long.valueOf(value); 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the Object value of a given field named {@code name} in the 5513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 5543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 5563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 5593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, Object value) throws IllegalArgumentException { 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<?> valueClass = null; 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value != null) { 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project valueClass = value.getClass(); 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, valueClass); 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 568387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no Object field '" + name + "'"); 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = value; 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the short value of a given field named {@code name} in the 5763819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 5793819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 5813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 5843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, short value) throws IllegalArgumentException { 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Short.TYPE); 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 589387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no short field '" + name + "'"); 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Short.valueOf(value); 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Find and set the boolean value of a given field named {@code name} in the 5973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * receiver. 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 6003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the name of the field to set. 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 6023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * new value for the field. 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 6053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * if the corresponding field can not be found. 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void put(String name, boolean value) throws IllegalArgumentException { 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectSlot slot = findSlot(name, Boolean.TYPE); 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (slot == null) { 610387a5041075822ab578065d502ac9e6075864c2eElliott Hughes throw new IllegalArgumentException("no boolean field '" + name + "'"); 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.fieldValue = Boolean.valueOf(value); 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project slot.defaulted = false; // No longer default value 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the array of ObjectSlot the receiver represents. 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return array of ObjectSlot the receiver represents. 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ObjectSlot[] slots() { 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return slotsToSerialize; 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 625