Skip to content

Commit c71a2a3

Browse files
committed
extract canConvertToInteger logic
1 parent ce8bb13 commit c71a2a3

File tree

5 files changed

+14
-8
lines changed

5 files changed

+14
-8
lines changed

src/main/java/dev/harrel/jsonschema/providers/AbstractJsonNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.harrel.jsonschema.JsonNode;
44
import dev.harrel.jsonschema.SimpleType;
55

6+
import java.math.BigDecimal;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Objects;
@@ -54,4 +55,8 @@ public final Map<String, JsonNode> asObject() {
5455
abstract List<JsonNode> createArray();
5556
abstract Map<String, JsonNode> createObject();
5657
abstract SimpleType computeNodeType(T node);
58+
59+
static boolean canConvertToInteger(BigDecimal bigDecimal) {
60+
return bigDecimal.scale() <= 0 || bigDecimal.stripTrailingZeros().scale() <= 0;
61+
}
5762
}

src/main/java/dev/harrel/jsonschema/providers/GsonNode.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import java.util.*;
1313

1414
public final class GsonNode extends AbstractJsonNode<JsonElement> {
15+
private BigDecimal asNumber;
16+
1517
private GsonNode(JsonElement node, String jsonPointer) {
1618
super(Objects.requireNonNull(node), jsonPointer);
1719
}
@@ -32,12 +34,12 @@ public String asString() {
3234

3335
@Override
3436
public BigInteger asInteger() {
35-
return node.getAsBigDecimal().toBigInteger();
37+
return asNumber.toBigInteger();
3638
}
3739

3840
@Override
3941
public BigDecimal asNumber() {
40-
return node.getAsBigDecimal();
42+
return asNumber;
4143
}
4244

4345
@Override
@@ -84,8 +86,8 @@ SimpleType computeNodeType(JsonElement node) {
8486
} else if (jsonPrimitive.isString()) {
8587
return SimpleType.STRING;
8688
} else {
87-
BigDecimal bigDecimal = jsonPrimitive.getAsBigDecimal();
88-
if (bigDecimal.scale() <= 0 || bigDecimal.stripTrailingZeros().scale() <= 0) {
89+
asNumber = jsonPrimitive.getAsBigDecimal();
90+
if (canConvertToInteger(asNumber)) {
8991
return SimpleType.INTEGER;
9092
} else {
9193
return SimpleType.NUMBER;

src/main/java/dev/harrel/jsonschema/providers/JakartaJsonNode.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ SimpleType computeNodeType(JsonValue node) {
7676
case FALSE:
7777
return SimpleType.BOOLEAN;
7878
case NUMBER:
79-
JsonNumber jsonNumber = (JsonNumber) node;
80-
if (jsonNumber.isIntegral() || jsonNumber.bigDecimalValue().stripTrailingZeros().scale() <= 0) {
79+
if (canConvertToInteger(((JsonNumber) node).bigDecimalValue())) {
8180
return SimpleType.INTEGER;
8281
} else {
8382
return SimpleType.NUMBER;

src/main/java/dev/harrel/jsonschema/providers/KotlinxJsonNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ SimpleType computeNodeType(JsonElement node) {
7878
return SimpleType.BOOLEAN;
7979
}
8080
asNumber = new BigDecimal(content);
81-
if (asNumber.scale() <= 0 || asNumber.stripTrailingZeros().scale() <= 0) {
81+
if (canConvertToInteger(asNumber)) {
8282
return SimpleType.INTEGER;
8383
} else {
8484
return SimpleType.NUMBER;

src/main/java/dev/harrel/jsonschema/providers/SnakeYamlNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ SimpleType computeNodeType(Node node) {
9191
return SimpleType.STRING;
9292
}
9393
asNumber = floatToBigDecimal(node);
94-
if (asNumber.scale() <= 0 || asNumber.stripTrailingZeros().scale() <= 0) {
94+
if (canConvertToInteger(asNumber)) {
9595
return SimpleType.INTEGER;
9696
} else {
9797
return SimpleType.NUMBER;

0 commit comments

Comments
 (0)