From 4a2e934e7a52cc79c851c4cadbb5d1d53bdba70f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 18:14:49 -0700 Subject: [PATCH 1/2] Bump the github-actions group with 2 updates (#136) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6062b18c..a06ef444 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,9 +27,9 @@ jobs: env: JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1" steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Set up JDK - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 with: distribution: 'temurin' java-version: ${{ matrix.java_version }} From 961480c694c1dcfb6fe3983eea32c3d46fe87549 Mon Sep 17 00:00:00 2001 From: ShounakB <65479699+Shounaks@users.noreply.github.com> Date: Sun, 24 Mar 2024 07:02:08 +0530 Subject: [PATCH 2/2] Fix: Use Big Decimal for Tree (#135) --- .../jackson/jr/stree/JacksonJrsTreeCodec.java | 18 +++++-- .../jr/stree/JrSimpleTreeExtension.java | 1 + .../jr/stree/ReadAsBigDecimal90Test.java | 48 +++++++++++++++++++ .../stree/failing/ReadAsBigDecimal90Test.java | 30 ------------ release-notes/CREDITS-2.x | 4 ++ release-notes/VERSION-2.x | 6 +++ 6 files changed, 74 insertions(+), 33 deletions(-) create mode 100644 jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/ReadAsBigDecimal90Test.java delete mode 100644 jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/failing/ReadAsBigDecimal90Test.java diff --git a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java index 6e14afe5..5b88f76c 100644 --- a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java +++ b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java @@ -13,12 +13,16 @@ */ public class JacksonJrsTreeCodec extends TreeCodec { - public static JrsMissing MISSING = JrsMissing.instance; + public static final JrsMissing MISSING = JrsMissing.instance; + protected final ObjectCodec _objectCodec; // @since 2.17 protected boolean _failOnDuplicateKeys; - + + // @since 2.17.1 + protected boolean _useBigDecimalForDouble; + public JacksonJrsTreeCodec() { this(null); } @@ -31,7 +35,12 @@ public JacksonJrsTreeCodec(ObjectCodec codec) { public void setFailOnDuplicateKeys(boolean state) { _failOnDuplicateKeys = state; } - + + // @since 2.17.1 + public void setUseBigDecimalForDouble(boolean state) { + _useBigDecimalForDouble = state; + } + @SuppressWarnings("unchecked") @Override public T readTree(JsonParser p) throws IOException { @@ -50,6 +59,9 @@ private JrsValue nodeFrom(JsonParser p) throws IOException return JrsBoolean.FALSE; case JsonTokenId.ID_NUMBER_INT: case JsonTokenId.ID_NUMBER_FLOAT: + if (_useBigDecimalForDouble) { + return new JrsNumber(p.getDecimalValue()); + } return new JrsNumber(p.getNumberValue()); case JsonTokenId.ID_STRING: return new JrsString(p.getText()); diff --git a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java index d3588fcc..39dc66f4 100644 --- a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java +++ b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java @@ -28,6 +28,7 @@ public JrSimpleTreeExtension(JacksonJrsTreeCodec tc) { @Override protected void register(ExtensionContext ctxt) { _codec.setFailOnDuplicateKeys(ctxt.isEnabled(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS)); + _codec.setUseBigDecimalForDouble(ctxt.isEnabled(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS)); ctxt.setTreeCodec(_codec); } } diff --git a/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/ReadAsBigDecimal90Test.java b/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/ReadAsBigDecimal90Test.java new file mode 100644 index 00000000..a4c0a01b --- /dev/null +++ b/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/ReadAsBigDecimal90Test.java @@ -0,0 +1,48 @@ +package com.fasterxml.jackson.jr.stree; + +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.jr.ob.JSON; + +import java.math.BigDecimal; + +// [jackson-jr#90]: JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS should work +public class ReadAsBigDecimal90Test extends JacksonJrTreeTestBase +{ + // [jackson-jr#90] + public void testDefaultBehaviourReadAsDouble() throws Exception + { + JSON json = JSON.builder() + .disable(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS) + .register(new JrSimpleTreeExtension()) + .build(); + + String input = "[1.1]"; + + TreeNode node = json.treeFrom(input); + TreeNode elemNode = node.get(0); + + assertTrue(elemNode.isValueNode()); + assertTrue(elemNode instanceof JrsNumber); + assertEquals(Double.class, + ((JrsNumber) elemNode).getValue().getClass()); + } + + // [jackson-jr#90] + public void testReadAsBigDecimal() throws Exception + { + JSON json = JSON.builder() + .enable(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS) + .register(new JrSimpleTreeExtension()) + .build(); + + String input = "[1.1]"; + + TreeNode node = json.treeFrom(input); + TreeNode elemNode = node.get(0); + + assertTrue(elemNode.isValueNode()); + assertTrue(elemNode instanceof JrsNumber); + assertEquals(BigDecimal.class, + ((JrsNumber) elemNode).getValue().getClass()); + } +} diff --git a/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/failing/ReadAsBigDecimal90Test.java b/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/failing/ReadAsBigDecimal90Test.java deleted file mode 100644 index e1e84758..00000000 --- a/jr-stree/src/test/java/com/fasterxml/jackson/jr/stree/failing/ReadAsBigDecimal90Test.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.fasterxml.jackson.jr.stree.failing; - -import java.math.BigDecimal; - -import com.fasterxml.jackson.core.TreeNode; - -import com.fasterxml.jackson.jr.ob.*; -import com.fasterxml.jackson.jr.stree.*; - -public class ReadAsBigDecimal90Test extends JacksonJrTreeTestBase -{ - // [jackson-jr#90] - public void testReadAsBigDecimal() throws Exception - { - JSON json = JSON.builder() - .treeCodec(new JacksonJrsTreeCodec()) - .enable(JSON.Feature.USE_BIG_DECIMAL_FOR_FLOATS) - .build(); - - String input = "[1.1]"; - - TreeNode node = json.treeFrom(input); - TreeNode elemNode = node.get(0); - - assertTrue(elemNode.isValueNode()); - assertTrue(elemNode instanceof JrsNumber); - assertEquals(BigDecimal.class, - ((JrsNumber) elemNode).getValue().getClass()); - } -} diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x index 4c8907d1..68573c0f 100644 --- a/release-notes/CREDITS-2.x +++ b/release-notes/CREDITS-2.x @@ -61,3 +61,7 @@ Julian Honnen (@jhonnen) (2.17.0) * Contributed impl for #100: Add support for `java.time` (Java 8 date/time) types (2.17.0) +* Contributed fix for #90: `USE_BIG_DECIMAL_FOR_FLOATS` feature not working + when using `JSON.treeFrom()` + (2.17.1) + diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 2cba0535..92994e51 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -11,6 +11,12 @@ Modules: === Releases === ------------------------------------------------------------------------ +2.17.1 (not yet released) + +#90: `USE_BIG_DECIMAL_FOR_FLOATS` feature not working when using `JSON.treeFrom()` + (reported by @jvdsandt) + (fix contributed by @Shounaks) + 2.17.0 (12-Mar-2024) #7: Support deserialization of `int[]`