@@ -127,80 +127,86 @@ public final void writeValueRecursive(final IonReader reader) throws IOException
127127 stepOut ();
128128 continue ;
129129 }
130-
131- final SymbolToken fieldName = reader .getFieldNameSymbol ();
132- if (fieldName != null && !isFieldNameSet () && isInStruct ()) {
133- setFieldNameSymbol (fieldName );
134- }
135- final SymbolToken [] annotations = reader .getTypeAnnotationSymbols ();
136- if (annotations .length > 0 ) {
137- setTypeAnnotationSymbols (annotations );
138- }
130+ transferFieldNameAndAnnotations (reader );
139131 if (reader .isNullValue ()) {
140132 writeNull (type );
141133 continue ;
142134 }
135+ writeCurrentValue (type , reader );
136+ }
137+ }
143138
144- switch (type ) {
145- case BOOL :
146- final boolean booleanValue = reader .booleanValue ();
147- writeBool (booleanValue );
148- break ;
149- case INT :
150- switch (reader .getIntegerSize ()) {
151- case INT :
152- final int intValue = reader .intValue ();
153- writeInt (intValue );
154- break ;
155- case LONG :
156- final long longValue = reader .longValue ();
157- writeInt (longValue );
158- break ;
159- case BIG_INTEGER :
160- final BigInteger bigIntegerValue = reader .bigIntegerValue ();
161- writeInt (bigIntegerValue );
162- break ;
163- default :
164- throw new IllegalStateException ();
165- }
166- break ;
167- case FLOAT :
168- final double doubleValue = reader .doubleValue ();
169- writeFloat (doubleValue );
170- break ;
171- case DECIMAL :
172- final Decimal decimalValue = reader .decimalValue ();
173- writeDecimal (decimalValue );
174- break ;
175- case TIMESTAMP :
176- final Timestamp timestampValue = reader .timestampValue ();
177- writeTimestamp (timestampValue );
178- break ;
179- case SYMBOL :
180- final SymbolToken symbolToken = reader .symbolValue ();
181- writeSymbolToken (symbolToken );
182- break ;
183- case STRING :
184- final String stringValue = reader .stringValue ();
185- writeString (stringValue );
186- break ;
187- case CLOB :
188- final byte [] clobValue = reader .newBytes ();
189- writeClob (clobValue );
190- break ;
191- case BLOB :
192- final byte [] blobValue = reader .newBytes ();
193- writeBlob (blobValue );
194- break ;
195- case LIST :
196- case SEXP :
197- case STRUCT :
198- reader .stepIn ();
199- stepIn (type );
200- break ;
201- default :
202- throw new IllegalStateException ("Unexpected type: " + type );
203- }
139+ private void transferFieldNameAndAnnotations (IonReader reader ) {
140+ final SymbolToken fieldName = reader .getFieldNameSymbol ();
141+ if (fieldName != null && !isFieldNameSet () && isInStruct ()) {
142+ setFieldNameSymbol (fieldName );
143+ }
144+ final SymbolToken [] annotations = reader .getTypeAnnotationSymbols ();
145+ if (annotations .length > 0 ) {
146+ setTypeAnnotationSymbols (annotations );
147+ }
148+ }
149+
150+ private void writeCurrentValue (IonType type , IonReader reader ) throws IOException {
151+ switch (type ) {
152+ case BOOL :
153+ final boolean booleanValue = reader .booleanValue ();
154+ writeBool (booleanValue );
155+ break ;
156+ case INT :
157+ switch (reader .getIntegerSize ()) {
158+ case INT :
159+ final int intValue = reader .intValue ();
160+ writeInt (intValue );
161+ break ;
162+ case LONG :
163+ final long longValue = reader .longValue ();
164+ writeInt (longValue );
165+ break ;
166+ case BIG_INTEGER :
167+ final BigInteger bigIntegerValue = reader .bigIntegerValue ();
168+ writeInt (bigIntegerValue );
169+ break ;
170+ default :
171+ throw new IllegalStateException ();
172+ }
173+ break ;
174+ case FLOAT :
175+ final double doubleValue = reader .doubleValue ();
176+ writeFloat (doubleValue );
177+ break ;
178+ case DECIMAL :
179+ final Decimal decimalValue = reader .decimalValue ();
180+ writeDecimal (decimalValue );
181+ break ;
182+ case TIMESTAMP :
183+ final Timestamp timestampValue = reader .timestampValue ();
184+ writeTimestamp (timestampValue );
185+ break ;
186+ case SYMBOL :
187+ final SymbolToken symbolToken = reader .symbolValue ();
188+ writeSymbolToken (symbolToken );
189+ break ;
190+ case STRING :
191+ final String stringValue = reader .stringValue ();
192+ writeString (stringValue );
193+ break ;
194+ case CLOB :
195+ final byte [] clobValue = reader .newBytes ();
196+ writeClob (clobValue );
197+ break ;
198+ case BLOB :
199+ final byte [] blobValue = reader .newBytes ();
200+ writeBlob (blobValue );
201+ break ;
202+ case LIST :
203+ case SEXP :
204+ case STRUCT :
205+ reader .stepIn ();
206+ stepIn (type );
207+ break ;
208+ default :
209+ throw new IllegalStateException ("Unexpected type: " + type );
204210 }
205211 }
206212
0 commit comments