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);
}