This is an automated email from the ASF dual-hosted git repository.
struberg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git
The following commit(s) were added to refs/heads/master by this push:
new 5866bd8 JOHNZON-226 avoid JsonValue.equals as it is slow
5866bd8 is described below
commit 5866bd883b71873d51c2e4966dea2c209feb8e65
Author: Mark Struberg <[email protected]>
AuthorDate: Wed Jul 31 22:08:49 2019 +0200
JOHNZON-226 avoid JsonValue.equals as it is slow
We rather use JsonValue.ValueType comparison instead.
---
.../org/apache/johnzon/core/JsonArrayImpl.java | 10 +++----
.../org/apache/johnzon/core/JsonObjectImpl.java | 4 +--
.../org/apache/johnzon/jsonb/JohnzonJsonb.java | 2 +-
.../jsonschema/spi/builtin/BaseValidation.java | 2 +-
.../jsonschema/spi/builtin/EnumValidation.java | 2 +-
.../apache/johnzon/mapper/MappingParserImpl.java | 32 ++++++++++++++--------
6 files changed, 31 insertions(+), 21 deletions(-)
diff --git
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java
index fd1b59f..96be451 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java
@@ -121,9 +121,9 @@ class JsonArrayImpl extends AbstractList<JsonValue>
implements JsonArray, Serial
public boolean getBoolean(final int index) {
final JsonValue val = value(index, JsonValue.class);
- if (JsonValue.TRUE.equals(val)) {
+ if (JsonValue.ValueType.TRUE == val.getValueType()) {
return true;
- } else if (JsonValue.FALSE.equals(val)) {
+ } else if (JsonValue.ValueType.FALSE == val.getValueType()) {
return false;
} else {
throw new ClassCastException();
@@ -145,13 +145,13 @@ class JsonArrayImpl extends AbstractList<JsonValue>
implements JsonArray, Serial
return defaultValue;
}
- final JsonValue val = get(index);
- return JsonValue.TRUE.equals(val) || !JsonValue.FALSE.equals(val) &&
defaultValue;
+ ValueType valueType = get(index).getValueType();
+ return JsonValue.ValueType.TRUE == valueType ||
JsonValue.ValueType.FALSE != valueType && defaultValue;
}
@Override
public boolean isNull(final int index) {
- return JsonValue.NULL.equals(value(index, JsonValue.class));
+ return JsonValue.ValueType.NULL == value(index,
JsonValue.class).getValueType();
}
@Override
diff --git
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
index af00c6f..7801b60 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
@@ -126,14 +126,14 @@ final class JsonObjectImpl extends AbstractMap<String,
JsonValue> implements Jso
public boolean getBoolean(final String name, final boolean defaultValue) {
final Object v = value(name, JsonValue.class);
if (v != null) {
- return JsonValue.TRUE.equals(v) || !JsonValue.FALSE.equals(v) &&
defaultValue;
+ return JsonValue.TRUE == v || JsonValue.FALSE != v && defaultValue;
}
return defaultValue;
}
@Override
public boolean isNull(final String name) {
- return JsonValue.NULL.equals(valueOrExcpetion(name, JsonValue.class));
+ return JsonValue.NULL == valueOrExcpetion(name, JsonValue.class);
}
@Override
diff --git
a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
index c173bc4..fc44eef 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
@@ -434,7 +434,7 @@ public class JohnzonJsonb implements Jsonb, AutoCloseable,
JsonbExtension {
if (Boolean.class != type && boolean.class != type) {
throw new JsonbException("TRUE and FALSE json can't be
casted to " + type);
}
- return (T) Boolean.valueOf(JsonValue.TRUE.equals(json));
+ return (T) Boolean.valueOf(JsonValue.ValueType.TRUE ==
json.getValueType());
case NUMBER:
if (!Class.class.isInstance(type) ||
!Number.class.isAssignableFrom(Class.class.cast(type))) {
throw new JsonbException("NUMBER json can't be casted to "
+ type);
diff --git
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/BaseValidation.java
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/BaseValidation.java
index 0b4e569..bb52fbb 100644
---
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/BaseValidation.java
+++
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/BaseValidation.java
@@ -58,7 +58,7 @@ abstract class BaseValidation implements Function<JsonValue,
Stream<ValidationRe
return onString(JsonString.class.cast(value));
case TRUE:
case FALSE:
- return onBoolean(JsonValue.TRUE.equals(value));
+ return onBoolean(JsonValue.ValueType.TRUE ==
value.getValueType());
case NUMBER:
return onNumber(JsonNumber.class.cast(value));
case OBJECT:
diff --git
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/EnumValidation.java
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/EnumValidation.java
index 74cd4c4..39e6d78 100644
---
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/EnumValidation.java
+++
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/EnumValidation.java
@@ -54,7 +54,7 @@ public class EnumValidation implements ValidationExtension {
return Stream.empty();
}
final JsonValue value = extractor.apply(root);
- if (value != null && !JsonValue.NULL.equals(value)) {
+ if (value != null && JsonValue.ValueType.NULL !=
value.getValueType()) {
return Stream.empty();
}
if (valid.contains(value)) {
diff --git
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index 2d45eb4..ee2ae64 100644
---
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -132,6 +132,8 @@ public class MappingParserImpl implements MappingParser {
}
private <T> T readObject(JsonValue jsonValue, Type targetType, boolean
applyObjectConverter) {
+ final JsonValue.ValueType valueType = jsonValue != null ?
jsonValue.getValueType() : null;
+
if (JsonStructure.class == targetType || JsonObject.class ==
targetType || JsonValue.class == targetType) {
return (T) jsonValue;
}
@@ -185,13 +187,13 @@ public class MappingParserImpl implements MappingParser {
isDeduplicateObjects ? new JsonPointerTracker(null,
"/") : null, Object.class))));
}
}
- if (JsonValue.NULL.equals(jsonValue)) {
+ if (NULL == valueType) {
return null;
}
- if (jsonValue.equals(JsonValue.TRUE) && (Boolean.class == targetType
|| boolean.class == targetType || Object.class == targetType)) {
+ if (TRUE == valueType && (Boolean.class == targetType || boolean.class
== targetType || Object.class == targetType)) {
return (T) Boolean.TRUE;
}
- if (jsonValue.equals(JsonValue.FALSE) && (Boolean.class == targetType
|| boolean.class == targetType || Object.class == targetType)) {
+ if (FALSE == valueType && (Boolean.class == targetType ||
boolean.class == targetType || Object.class == targetType)) {
return (T) Boolean.FALSE;
}
throw new IllegalArgumentException("Unsupported " + jsonValue + " for
type " + targetType);
@@ -309,6 +311,8 @@ public class MappingParserImpl implements MappingParser {
for (final Map.Entry<String, Mappings.Setter> setter :
classMapping.setters.entrySet()) {
final JsonValue jsonValue = object.get(setter.getKey());
+ final JsonValue.ValueType valueType = jsonValue != null ?
jsonValue.getValueType() : null;
+
final Mappings.Setter value = setter.getValue();
if (JsonValue.class == value.paramType) {
setter.getValue().writer.write(t, jsonValue);
@@ -319,7 +323,7 @@ public class MappingParserImpl implements MappingParser {
}
final AccessMode.Writer setterMethod = value.writer;
- if (JsonValue.NULL.equals(jsonValue)) { // forced
+ if (NULL == valueType) { // forced
setterMethod.write(t, null);
} else {
Object existingInstance = null;
@@ -400,12 +404,14 @@ public class MappingParserImpl implements MappingParser {
}
private Object convertTo(final Adapter converter, final JsonValue
jsonValue, JsonPointerTracker jsonPointer) {
+ final JsonValue.ValueType valueType = jsonValue != null ?
jsonValue.getValueType() : null;
+
final AdapterKey key = getAdapterKey(converter);
if (JsonValue.class == key.getTo()) {
return converter.to(jsonValue);
}
- if (jsonValue.getValueType() == JsonValue.ValueType.OBJECT) {
+ if (JsonValue.ValueType.OBJECT == valueType) {
if (JsonObject.class == key.getTo() || JsonStructure.class ==
key.getTo()) {
return converter.to(jsonValue.asJsonObject());
}
@@ -425,7 +431,6 @@ public class MappingParserImpl implements MappingParser {
return converter.to(param);
}
- final JsonValue.ValueType valueType = jsonValue.getValueType();
if (NULL.equals(valueType)) {
return null;
}
@@ -503,15 +508,20 @@ public class MappingParserImpl implements MappingParser {
private Object toObject(final Object baseInstance, final JsonValue
jsonValue,
final Type type, final Adapter itemConverter,
final JsonPointerTracker jsonPointer,
final Type rootType) {
- if (jsonValue == null || JsonValue.NULL.equals(jsonValue)) {
+ if (jsonValue == null) {
+ return null;
+ }
+
+ JsonValue.ValueType valueType = jsonValue.getValueType();
+ if (JsonValue.ValueType.NULL == valueType) {
return null;
}
if (type == Boolean.class || type == boolean.class) {
- if (jsonValue.equals(JsonValue.TRUE)) {
+ if (JsonValue.ValueType.TRUE == valueType) {
return true;
}
- if (jsonValue.equals(JsonValue.FALSE)) {
+ if (JsonValue.ValueType.FALSE == valueType) {
return false;
}
throw new MapperException("Unable to parse " + jsonValue + " to
boolean");
@@ -525,10 +535,10 @@ public class MappingParserImpl implements MappingParser {
}
if (Object.class == type) { // handling specific types here to keep
exception in standard handling
- if (jsonValue.equals(JsonValue.TRUE)) {
+ if (JsonValue.ValueType.TRUE == valueType) {
return true;
}
- if (jsonValue.equals(JsonValue.FALSE)) {
+ if (JsonValue.ValueType.FALSE == valueType) {
return false;
}
if (JsonNumber.class.isInstance(jsonValue)) {