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