You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rs...@apache.org on 2016/04/18 11:53:02 UTC

incubator-johnzon git commit: JOHNZON-72 removed unnecessary method from interface

Repository: incubator-johnzon
Updated Branches:
  refs/heads/master 60dcff90d -> 304f98a2c


JOHNZON-72 removed unnecessary method from interface

Suppress conversion for same instance via internal class


Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/304f98a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/304f98a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/304f98a2

Branch: refs/heads/master
Commit: 304f98a2c14eb2818aba3052af33020b92638eda
Parents: 60dcff9
Author: Reinhard Sandtner <rs...@apache.org>
Authored: Mon Apr 18 11:48:24 2016 +0200
Committer: Reinhard Sandtner <rs...@apache.org>
Committed: Mon Apr 18 11:48:24 2016 +0200

----------------------------------------------------------------------
 .../apache/johnzon/mapper/MappingParser.java    |  2 --
 .../johnzon/mapper/MappingParserImpl.java       | 35 ++++++++++++++++++--
 .../apache/johnzon/mapper/ObjectTypeTest.java   |  2 +-
 3 files changed, 33 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/304f98a2/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParser.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParser.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParser.java
index 98836d5..cee68d8 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParser.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParser.java
@@ -31,6 +31,4 @@ public interface MappingParser {
     <T> T readObject(Type targetType);
 
     <T> T readObject(JsonValue jsonValue, Type targetType);
-
-    <T> T readObject(JsonValue jsonValue, Type targetType, boolean applyObjectConverter);
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/304f98a2/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
----------------------------------------------------------------------
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 80afdec..ad6feeb 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
@@ -112,10 +112,10 @@ public class MappingParserImpl implements MappingParser {
 
     @Override
     public <T> T readObject(JsonValue jsonValue, Type targetType) {
-        return readObject(jsonValue, targetType, targetType instanceof Class);
+        return readObject(jsonValue, targetType, targetType instanceof Class || targetType instanceof ParameterizedType);
     }
 
-    public <T> T readObject(JsonValue jsonValue, Type targetType, boolean applyObjectConverter) {
+    private <T> T readObject(JsonValue jsonValue, Type targetType, boolean applyObjectConverter) {
         if (JsonStructure.class == targetType || JsonObject.class == targetType || JsonValue.class == targetType) {
             return (T) jsonValue;
         }
@@ -188,7 +188,7 @@ public class MappingParserImpl implements MappingParser {
 
             ObjectConverter objectConverter = config.findObjectConverter((Class) type);
             if (objectConverter != null) {
-                return objectConverter.fromJson(object, type, this);
+                return objectConverter.fromJson(object, type, new SuppressConversionMappingParser(this, object));
             }
         }
 
@@ -589,4 +589,33 @@ public class MappingParserImpl implements MappingParser {
         }
     }
 
+
+    /**
+     * Internal class to suppress {@link ObjectConverter} lookup if and only if
+     * the {@link JsonValue} is the same refernece than the lookup was done before.
+     */
+    private static class SuppressConversionMappingParser implements MappingParser {
+        private final MappingParserImpl delegate;
+        private final JsonObject suppressConversionFor;
+
+        public SuppressConversionMappingParser(MappingParserImpl delegate, JsonObject suppressConversionFor) {
+            this.delegate = delegate;
+            this.suppressConversionFor = suppressConversionFor;
+        }
+
+        @Override
+        public <T> T readObject(Type targetType) {
+            return delegate.readObject(targetType);
+        }
+
+        @Override
+        public <T> T readObject(JsonValue jsonValue, Type targetType) {
+            if (suppressConversionFor == jsonValue) {
+                return delegate.readObject(jsonValue, targetType, false);
+            }
+            return delegate.readObject(jsonValue, targetType);
+        }
+
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/304f98a2/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/ObjectTypeTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/ObjectTypeTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/ObjectTypeTest.java
index 52ea112..88b03a8 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/ObjectTypeTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/ObjectTypeTest.java
@@ -172,7 +172,7 @@ public class ObjectTypeTest {
             String javaType = jsonObject.getString("//javaType");
             Class targetClass = javaType != null ? getSubClass(targetType, javaType) : (Class) targetType;
 
-            return parser.readObject(jsonObject, targetClass, false);
+            return parser.readObject(jsonObject, targetClass);
         }