Skip to content

Commit 44c904c

Browse files
committed
Fix: Using JrSimpleTreeExtension to Provide Feature Context
1 parent 0833785 commit 44c904c

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

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

+10-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public class JacksonJrsTreeCodec extends TreeCodec
1818

1919
// @since 2.17
2020
protected boolean _failOnDuplicateKeys;
21-
21+
protected boolean _useBigDecimalForDouble;
22+
2223
public JacksonJrsTreeCodec() {
2324
this(null);
2425
}
@@ -31,7 +32,11 @@ public JacksonJrsTreeCodec(ObjectCodec codec) {
3132
public void setFailOnDuplicateKeys(boolean state) {
3233
_failOnDuplicateKeys = state;
3334
}
34-
35+
36+
public void setUseBigDecimalForDouble(boolean state) {
37+
_useBigDecimalForDouble = state;
38+
}
39+
3540
@SuppressWarnings("unchecked")
3641
@Override
3742
public <T extends TreeNode> T readTree(JsonParser p) throws IOException {
@@ -50,6 +55,9 @@ private JrsValue nodeFrom(JsonParser p) throws IOException
5055
return JrsBoolean.FALSE;
5156
case JsonTokenId.ID_NUMBER_INT:
5257
case JsonTokenId.ID_NUMBER_FLOAT:
58+
if (_useBigDecimalForDouble) {
59+
return new JrsNumber(p.getDecimalValue());
60+
}
5361
return new JrsNumber(p.getNumberValue());
5462
case JsonTokenId.ID_STRING:
5563
return new JrsString(p.getText());

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

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public JrSimpleTreeExtension(JacksonJrsTreeCodec tc) {
2828
@Override
2929
protected void register(ExtensionContext ctxt) {
3030
_codec.setFailOnDuplicateKeys(ctxt.isEnabled(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS));
31+
_codec.setUseBigDecimalForDouble(ctxt.isEnabled(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS));
3132
ctxt.setTreeCodec(_codec);
3233
}
3334
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
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
{
1210
// [jackson-jr#90]
1311
public void testReadAsBigDecimal() throws Exception
1412
{
1513
JSON json = JSON.builder()
16-
.treeCodec(new JacksonJrsTreeCodec())
1714
.enable(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS)
15+
.register(new JrSimpleTreeExtension())
1816
.build();
1917

2018
String input = "[1.1]";
@@ -27,4 +25,21 @@ public void testReadAsBigDecimal() throws Exception
2725
assertEquals(BigDecimal.class,
2826
((JrsNumber) elemNode).getValue().getClass());
2927
}
28+
29+
public void testDefaultBehaviourWithBigDecimalFlag() throws Exception
30+
{
31+
JSON json = JSON.builder()
32+
.register(new JrSimpleTreeExtension())
33+
.build();
34+
35+
String input = "[1.1]";
36+
37+
TreeNode node = json.treeFrom(input);
38+
TreeNode elemNode = node.get(0);
39+
40+
assertTrue(elemNode.isValueNode());
41+
assertTrue(elemNode instanceof JrsNumber);
42+
assertEquals(Double.class,
43+
((JrsNumber) elemNode).getValue().getClass());
44+
}
3045
}

0 commit comments

Comments
 (0)