Skip to content

Commit 0e8db3b

Browse files
committed
Minor refactoring of JsonGenerator.copyCurrentEvent()/copyCurrentStructure() to be more modular
1 parent 868caf4 commit 0e8db3b

File tree

1 file changed

+63
-50
lines changed

1 file changed

+63
-50
lines changed

src/main/java/com/fasterxml/jackson/core/JsonGenerator.java

Lines changed: 63 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2471,36 +2471,14 @@ public void copyCurrentEvent(JsonParser p) throws IOException
24712471
writeFieldName(p.getCurrentName());
24722472
break;
24732473
case ID_STRING:
2474-
if (p.hasTextCharacters()) {
2475-
writeString(p.getTextCharacters(), p.getTextOffset(), p.getTextLength());
2476-
} else {
2477-
writeString(p.getText());
2478-
}
2474+
_copyCurrentStringValue(p);
24792475
break;
24802476
case ID_NUMBER_INT:
2481-
{
2482-
NumberType n = p.getNumberType();
2483-
if (n == NumberType.INT) {
2484-
writeNumber(p.getIntValue());
2485-
} else if (n == NumberType.BIG_INTEGER) {
2486-
writeNumber(p.getBigIntegerValue());
2487-
} else {
2488-
writeNumber(p.getLongValue());
2489-
}
2477+
_copyCurrentIntValue(p);
24902478
break;
2491-
}
24922479
case ID_NUMBER_FLOAT:
2493-
{
2494-
Number n = p.getNumberValueExact();
2495-
if (n instanceof BigDecimal) {
2496-
writeNumber((BigDecimal) n);
2497-
} else if (n instanceof Double) {
2498-
writeNumber(n.doubleValue());
2499-
} else {
2500-
writeNumber(n.floatValue());
2501-
}
2480+
_copyCurrentFloatValue(p);
25022481
break;
2503-
}
25042482
case ID_TRUE:
25052483
writeBoolean(true);
25062484
break;
@@ -2616,36 +2594,14 @@ protected void _copyCurrentContents(JsonParser p) throws IOException
26162594
break;
26172595

26182596
case ID_STRING:
2619-
if (p.hasTextCharacters()) {
2620-
writeString(p.getTextCharacters(), p.getTextOffset(), p.getTextLength());
2621-
} else {
2622-
writeString(p.getText());
2623-
}
2597+
_copyCurrentStringValue(p);
26242598
break;
26252599
case ID_NUMBER_INT:
2626-
{
2627-
NumberType n = p.getNumberType();
2628-
if (n == NumberType.INT) {
2629-
writeNumber(p.getIntValue());
2630-
} else if (n == NumberType.BIG_INTEGER) {
2631-
writeNumber(p.getBigIntegerValue());
2632-
} else {
2633-
writeNumber(p.getLongValue());
2634-
}
2600+
_copyCurrentIntValue(p);
26352601
break;
2636-
}
26372602
case ID_NUMBER_FLOAT:
2638-
{
2639-
Number n = p.getNumberValueExact();
2640-
if (n instanceof BigDecimal) {
2641-
writeNumber((BigDecimal) n);
2642-
} else if (n instanceof Double) {
2643-
writeNumber(n.doubleValue());
2644-
} else {
2645-
writeNumber(n.floatValue());
2646-
}
2603+
_copyCurrentFloatValue(p);
26472604
break;
2648-
}
26492605
case ID_TRUE:
26502606
writeBoolean(true);
26512607
break;
@@ -2664,6 +2620,63 @@ protected void _copyCurrentContents(JsonParser p) throws IOException
26642620
}
26652621
}
26662622

2623+
/**
2624+
* Method for copying current {@link JsonToken#VALUE_NUMBER_FLOAT} value;
2625+
* overridable by format backend implementations.
2626+
*
2627+
* @param p Parser that points to the value to copy
2628+
*
2629+
* @since 2.15
2630+
*/
2631+
protected void _copyCurrentFloatValue(JsonParser p) throws IOException
2632+
{
2633+
Number n = p.getNumberValueExact();
2634+
if (n instanceof BigDecimal) {
2635+
writeNumber((BigDecimal) n);
2636+
} else if (n instanceof Double) {
2637+
writeNumber(n.doubleValue());
2638+
} else {
2639+
writeNumber(n.floatValue());
2640+
}
2641+
}
2642+
2643+
/**
2644+
* Method for copying current {@link JsonToken#VALUE_NUMBER_FLOAT} value;
2645+
* overridable by format backend implementations.
2646+
*
2647+
* @param p Parser that points to the value to copy
2648+
*
2649+
* @since 2.15
2650+
*/
2651+
protected void _copyCurrentIntValue(JsonParser p) throws IOException
2652+
{
2653+
NumberType n = p.getNumberType();
2654+
if (n == NumberType.INT) {
2655+
writeNumber(p.getIntValue());
2656+
} else if (n == NumberType.LONG) {
2657+
writeNumber(p.getLongValue());
2658+
} else {
2659+
writeNumber(p.getBigIntegerValue());
2660+
}
2661+
}
2662+
2663+
/**
2664+
* Method for copying current {@link JsonToken#VALUE_STRING} value;
2665+
* overridable by format backend implementations.
2666+
*
2667+
* @param p Parser that points to the value to copy
2668+
*
2669+
* @since 2.15
2670+
*/
2671+
protected void _copyCurrentStringValue(JsonParser p) throws IOException
2672+
{
2673+
if (p.hasTextCharacters()) {
2674+
writeString(p.getTextCharacters(), p.getTextOffset(), p.getTextLength());
2675+
} else {
2676+
writeString(p.getText());
2677+
}
2678+
}
2679+
26672680
/*
26682681
/**********************************************************************
26692682
/* Public API, buffer handling

0 commit comments

Comments
 (0)