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 10:18:13 UTC
[5/7] incubator-johnzon git commit: JOHNZON-72 enabled lookup for
Object.class and improved interface handling
JOHNZON-72 enabled lookup for Object.class and improved interface handling
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/ef274a4c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/ef274a4c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/ef274a4c
Branch: refs/heads/master
Commit: ef274a4c4b274ddd5b7a0b573cffe3a758c01350
Parents: e1b93f8
Author: Reinhard Sandtner <rs...@apache.org>
Authored: Fri Apr 15 13:51:51 2016 +0200
Committer: Reinhard Sandtner <rs...@apache.org>
Committed: Fri Apr 15 13:51:51 2016 +0200
----------------------------------------------------------------------
.../org/apache/johnzon/mapper/MapperConfig.java | 18 ++++++++++++-----
.../apache/johnzon/mapper/MapperConfigTest.java | 21 ++++++++++++++++++++
2 files changed, 34 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/ef274a4c/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
index 8e161cc..942d463 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
@@ -168,21 +168,29 @@ class MapperConfig implements Cloneable {
// search the most significant
Class toProcess = clazz;
- while (toProcess != Object.class && converter == null) {
+ while (toProcess != null && converter == null) {
converter = matchingConverters.get(toProcess);
if (converter != null) {
break;
}
- for (Class interfaceToSearch : toProcess.getInterfaces()) {
+ Class[] interfaces = toProcess.getInterfaces();
+ if (interfaces.length > 0) {
+ for (Class interfaceToSearch : interfaces) {
- converter = matchingConverters.get(interfaceToSearch);
- if (converter != null) {
- break;
+ converter = matchingConverters.get(interfaceToSearch);
+ if (converter != null) {
+ break;
+ }
}
}
+ if (converter == null && toProcess.isInterface()) {
+ toProcess = Object.class;
+ continue;
+ }
+
toProcess = toProcess.getSuperclass();
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/ef274a4c/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java
index 321bf0b..7f5bac2 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java
@@ -125,6 +125,25 @@ public class MapperConfigTest {
Assert.assertEquals(theConverter, converter);
}
+ @Test
+ public void testfindObjectConverterConverterForObject() {
+ TheConverter<Object> theConverter = new TheConverter<Object>();
+
+ MapperConfig config = createConfig(Collections.<Class<?>, ObjectConverter<?>>singletonMap(Object.class, theConverter));
+
+ ObjectConverter converter = config.findObjectConverter(ClassForTheInterface.class);
+ Assert.assertNotNull(converter);
+ Assert.assertEquals(theConverter, converter);
+
+ converter = config.findObjectConverter(TheInterface.class);
+ Assert.assertNotNull(converter);
+ Assert.assertEquals(theConverter, converter);
+
+ converter = config.findObjectConverter(InterfaceExtendingTwoInterfaces.class);
+ Assert.assertNotNull(converter);
+ Assert.assertEquals(theConverter, converter);
+ }
+
private MapperConfig createConfig(Map<Class<?>, ObjectConverter<?>> converter) {
return new MapperConfig(new ConcurrentHashMap<AdapterKey, Adapter<?, ?>>(0),
@@ -151,6 +170,8 @@ public class MapperConfigTest {
private interface TheSecondInterface {}
private static class ClassWithTwoInterfaces implements TheInterface, TheSecondInterface {}
+ private interface InterfaceExtendingTwoInterfaces extends TheInterface, TheSecondInterface {}
+
private static class TheConverter<T> implements ObjectConverter<T>{
@Override