Skip to content

Commit 023fd94

Browse files
committed
Fix: Use Big Decimal for Tree
1 parent 0833785 commit 023fd94

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java

+16-6
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
*/
1414
public class JacksonJrsTreeCodec extends TreeCodec
1515
{
16-
public static JrsMissing MISSING = JrsMissing.instance;
1716
protected final ObjectCodec _objectCodec;
1817

1918
// @since 2.17
2019
protected boolean _failOnDuplicateKeys;
21-
20+
protected boolean _useBigDouble;
21+
2222
public JacksonJrsTreeCodec() {
2323
this(null);
2424
}
@@ -28,10 +28,11 @@ public JacksonJrsTreeCodec(ObjectCodec codec) {
2828
}
2929

3030
// @since 2.17
31-
public void setFailOnDuplicateKeys(boolean state) {
32-
_failOnDuplicateKeys = state;
31+
public void setFailOnDuplicateKeys(boolean failOnDuplicateKeys,boolean useBigDouble) {
32+
_failOnDuplicateKeys = failOnDuplicateKeys;
33+
_useBigDouble = useBigDouble;
3334
}
34-
35+
3536
@SuppressWarnings("unchecked")
3637
@Override
3738
public <T extends TreeNode> T readTree(JsonParser p) throws IOException {
@@ -50,7 +51,16 @@ private JrsValue nodeFrom(JsonParser p) throws IOException
5051
return JrsBoolean.FALSE;
5152
case JsonTokenId.ID_NUMBER_INT:
5253
case JsonTokenId.ID_NUMBER_FLOAT:
53-
return new JrsNumber(p.getNumberValue());
54+
if (_useBigDouble) {
55+
JsonParser.NumberType n = p.getNumberType();
56+
if (n == JsonParser.NumberType.FLOAT) {
57+
return new JrsNumber(p.getFloatValue());
58+
}
59+
if (n == JsonParser.NumberType.DOUBLE) {
60+
return new JrsNumber(p.getDoubleValue());
61+
}
62+
}
63+
return new JrsNumber(p.getDecimalValue());
5464
case JsonTokenId.ID_STRING:
5565
return new JrsString(p.getText());
5666
case JsonTokenId.ID_START_ARRAY: {

jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public JrSimpleTreeExtension(JacksonJrsTreeCodec tc) {
2727

2828
@Override
2929
protected void register(ExtensionContext ctxt) {
30-
_codec.setFailOnDuplicateKeys(ctxt.isEnabled(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS));
30+
_codec.setFailOnDuplicateKeys(ctxt.isEnabled(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS), ctxt.isEnabled(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS));
3131
ctxt.setTreeCodec(_codec);
3232
}
3333
}

jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/failing/ReadAsBigDecimal90Test.java renamed to jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/ReadAsBigDecimal90Test.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
package com.fasterxml.jackson.jr.stree.failing;
2-
3-
import java.math.BigDecimal;
1+
package com.fasterxml.jackson.jr.stree;
42

53
import com.fasterxml.jackson.core.TreeNode;
4+
import com.fasterxml.jackson.jr.ob.JSON;
65

7-
import com.fasterxml.jackson.jr.ob.*;
8-
import com.fasterxml.jackson.jr.stree.*;
6+
import java.math.BigDecimal;
97

108
public class ReadAsBigDecimal90Test extends JacksonJrTreeTestBase
119
{

0 commit comments

Comments
 (0)