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)) {

Reply via email to