aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-25 19:24:59 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-25 19:24:59 -0700
commit42d7daf131cd471a7fee5f64e685931c95e5002a (patch)
treeceebfb5768b1551b1c87ba5bc789cc27d1b6335e /src
parenta83b73ffce156a5c51805f5736828fcc1e1305be (diff)
downloadjackson-databind-42d7daf131cd471a7fee5f64e685931c95e5002a.tar.gz
minor refactoring
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java61
1 files changed, 31 insertions, 30 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
index 1d13bfc9f..c0f9875d4 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
@@ -370,23 +370,9 @@ public abstract class StdDeserializer<T>
protected final boolean _parseBooleanPrimitive(JsonParser p, DeserializationContext ctxt)
throws IOException
{
- final JsonToken t = p.currentToken();
- // usually caller should have handled but:
- if (t == JsonToken.VALUE_TRUE) return true;
- if (t == JsonToken.VALUE_FALSE) return false;
- if (t == JsonToken.VALUE_NULL) {
- _verifyNullForPrimitive(ctxt);
- return false;
- }
-
- // may accept ints too, (0 == false, otherwise true)
- if (t == JsonToken.VALUE_NUMBER_INT) {
- Boolean b = _coerceBooleanFromInt(p, ctxt, Boolean.TYPE);
- // may get `null`, Boolean.TRUE or Boolean.FALSE so:
- return (b == Boolean.TRUE);
- }
- // And finally, let's allow Strings to be converted too
- if (t == JsonToken.VALUE_STRING) {
+ switch (p.currentTokenId()) {
+ case JsonTokenId.ID_STRING:
+ // And finally, let's allow Strings to be converted too
String text = p.getText();
CoercionAction act = _checkFromStringCoercion(ctxt, text,
LogicalType.Boolean, Boolean.TYPE);
@@ -415,16 +401,31 @@ public abstract class StdDeserializer<T>
_verifyNullForPrimitiveCoercion(ctxt, text);
return false;
}
- Boolean b = (Boolean) ctxt.handleWeirdStringValue(Boolean.TYPE, text,
- "only \"true\"/\"True\"/\"TRUE\" or \"false\"/\"False\"/\"FALSE\" recognized");
- return Boolean.TRUE.equals(b);
- }
- // 12-Jun-2020, tatu: For some reason calling `_deserializeFromArray()` won't work so:
- if (t == JsonToken.START_ARRAY && ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
- p.nextToken();
- final boolean parsed = _parseBooleanPrimitive(p, ctxt);
- _verifyEndArrayForSingle(p, ctxt);
- return parsed;
+ {
+ Boolean b = (Boolean) ctxt.handleWeirdStringValue(Boolean.TYPE, text,
+ "only \"true\"/\"True\"/\"TRUE\" or \"false\"/\"False\"/\"FALSE\" recognized");
+ return Boolean.TRUE.equals(b);
+ }
+ case JsonTokenId.ID_NUMBER_INT:
+ // may accept ints too, (0 == false, otherwise true)
+
+ // call returns `null`, Boolean.TRUE or Boolean.FALSE so:
+ return _coerceBooleanFromInt(p, ctxt, Boolean.TYPE) == Boolean.TRUE;
+ case JsonTokenId.ID_TRUE: // usually caller should have handled but:
+ return true;
+ case JsonTokenId.ID_FALSE:
+ return false;
+ case JsonTokenId.ID_NULL: // null fine for non-primitive
+ _verifyNullForPrimitive(ctxt);
+ return false;
+ case JsonTokenId.ID_START_ARRAY:
+ // 12-Jun-2020, tatu: For some reason calling `_deserializeFromArray()` won't work so:
+ if (ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
+ p.nextToken();
+ final boolean parsed = _parseBooleanPrimitive(p, ctxt);
+ _verifyEndArrayForSingle(p, ctxt);
+ return parsed;
+ }
}
return ((Boolean) ctxt.handleUnexpectedToken(Boolean.TYPE, p)).booleanValue();
}
@@ -504,15 +505,15 @@ public abstract class StdDeserializer<T>
}
return (Boolean) ctxt.handleWeirdStringValue(targetType, text,
"only \"true\" or \"false\" recognized");
+ case JsonTokenId.ID_NUMBER_INT:
+ // may accept ints too, (0 == false, otherwise true)
+ return _coerceBooleanFromInt(p, ctxt, targetType);
case JsonTokenId.ID_TRUE:
return true;
case JsonTokenId.ID_FALSE:
return false;
case JsonTokenId.ID_NULL: // null fine for non-primitive
return null;
- case JsonTokenId.ID_NUMBER_INT:
- // may accept ints too, (0 == false, otherwise true)
- return _coerceBooleanFromInt(p, ctxt, targetType);
case JsonTokenId.ID_START_ARRAY: // unwrapping / from-empty-array coercion?
return (Boolean) _deserializeFromArray(p, ctxt);
}