1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
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
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
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 Projectpackage java.io;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An EmulatedFieldsForDumping is an object that represents a set of emulated
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fields for an object being dumped. It is a concrete implementation for
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ObjectOutputStream.PutField
24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
25f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see ObjectOutputStream.PutField
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see EmulatedFieldsForLoading
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass EmulatedFieldsForDumping extends ObjectOutputStream.PutField {
30e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes    // Record the ObjectOutputStream that created this PutField for checking in 'write'.
31e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes    private final ObjectOutputStream oos;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // The actual representation, with a more powerful API (set&get)
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private EmulatedFields emulatedFields;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new instance of EmulatedFieldsForDumping.
38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param streamClass
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a ObjectStreamClass, which describe the fields to be emulated
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            (names, types, etc).
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
43e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes    EmulatedFieldsForDumping(ObjectOutputStream oos, ObjectStreamClass streamClass) {
44e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes        this.oos = oos;
45e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes        this.emulatedFields = new EmulatedFields(streamClass.fields(), (ObjectStreamField[]) null);
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Return the actual EmulatedFields instance used by the receiver. We have
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the actual work in a separate class so that the code can be shared. The
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * receiver has to be of a subclass of PutField.
52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return array of ObjectSlot the receiver represents.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    EmulatedFields emulatedFields() {
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return emulatedFields;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the byte value of a given field named <code>name</code> in
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the receiver.
62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, byte value) {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the char value of a given field named <code>name</code> in
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the receiver.
76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, char value) {
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the double value of a given field named <code>name</code>
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the receiver.
90f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, double value) {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the float value of a given field named <code>name</code>
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the receiver.
104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, float value) {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the int value of a given field named <code>name</code> in
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the receiver.
118f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, int value) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the long value of a given field named <code>name</code> in
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the receiver.
132f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, long value) {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the Object value of a given field named <code>name</code>
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the receiver.
146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, Object value) {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the short value of a given field named <code>name</code>
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the receiver.
160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, short value) {
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Find and set the boolean value of a given field named <code>name</code>
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the receiver.
174f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param name
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String, the name of the field to set
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            New value for the field.
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void put(String name, boolean value) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        emulatedFields.put(name, value);
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Write the field values to the specified ObjectOutput.
187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param output
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the ObjectOutput
190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             If an IO exception happened when writing the field values.
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void write(ObjectOutput output) throws IOException {
197e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes        if (!output.equals(oos)) {
198e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes            throw new IllegalArgumentException("Attempting to write to a different stream than the one that created this PutField");
199e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes        }
200e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes        for (EmulatedFields.ObjectSlot slot : emulatedFields.slots()) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object fieldValue = slot.getFieldValue();
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class<?> type = slot.getField().getType();
203e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            if (type == int.class) {
204e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeInt(fieldValue != null ? ((Integer) fieldValue).intValue() : 0);
205e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == byte.class) {
206e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeByte(fieldValue != null ? ((Byte) fieldValue).byteValue() : 0);
207e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == char.class) {
208e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeChar(fieldValue != null ? ((Character) fieldValue).charValue() : 0);
209e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == short.class) {
210e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeShort(fieldValue != null ? ((Short) fieldValue).shortValue() : 0);
211e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == boolean.class) {
212e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeBoolean(fieldValue != null ? ((Boolean) fieldValue).booleanValue() : false);
213e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == long.class) {
214e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeLong(fieldValue != null ? ((Long) fieldValue).longValue() : 0);
215e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == float.class) {
216e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeFloat(fieldValue != null ? ((Float) fieldValue).floatValue() : 0);
217e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes            } else if (type == double.class) {
218e270027a8e421200a6af45f066c3a6aabe03aa30Elliott Hughes                output.writeDouble(fieldValue != null ? ((Double) fieldValue).doubleValue() : 0);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Either array or Object
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                output.writeObject(fieldValue);
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
226