You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2019/01/18 14:32:50 UTC

svn commit: r1851622 - in /felix/trunk/converter/converter/src: main/java/org/osgi/util/converter/ConvertingImpl.java test/java/org/osgi/util/converter/ConverterMapTest.java

Author: davidb
Date: Fri Jan 18 14:32:50 2019
New Revision: 1851622

URL: http://svn.apache.org/viewvc?rev=1851622&view=rev
Log:
FELIX-6031 Converter is not working properly when the target is an interface that extends others

Fix based on suggested fix by Cristiano Gavião.
Added unit test too.

Modified:
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
    felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java?rev=1851622&r1=1851621&r2=1851622&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java Fri Jan 18 14:32:50 2019
@@ -1119,8 +1119,9 @@ class ConvertingImpl extends AbstractSpe
 		Set<Class< ? >> classes = new LinkedHashSet<>();
 		if (cls.isInterface()) {
 			classes.add(cls);
-		} else {
-			classes.addAll(Arrays.asList(cls.getInterfaces()));
+		}
+		for (Class< ? > intf : cls.getInterfaces()) {
+			classes.addAll(getInterfaces(intf));
 		}
 
 		classes.addAll(getInterfaces(cls.getSuperclass()));

Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java?rev=1851622&r1=1851621&r2=1851622&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java Fri Jan 18 14:32:50 2019
@@ -16,6 +16,11 @@
  */
 package org.osgi.util.converter;
 
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.math.BigInteger;
@@ -29,11 +34,6 @@ import java.util.Hashtable;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -179,6 +179,38 @@ public class ConverterMapTest {
         assertEquals(true, (boolean) m.get("za.za"));
     }
 
+    @Test
+    public void testInterfaceToMapEmptySub() {
+        TestInterfaceSub impl = new TestInterfaceSub() {
+            @Override
+            public String foo() {
+                return "Chocolate!";
+            }
+
+            @Override
+            public int bar() {
+                return 76543;
+            }
+
+            @Override
+            public int bar(String def) {
+                return 0;
+            }
+
+            @Override
+            public Boolean za_za() {
+                return true;
+            }
+        };
+
+        @SuppressWarnings("rawtypes")
+        Map m = converter.convert(impl).to(Map.class);
+        assertEquals(3, m.size());
+        assertEquals("Chocolate!", m.get("foo"));
+        assertEquals(76543, (int) m.get("bar"));
+        assertEquals(true, (boolean) m.get("za.za"));
+    }
+
     @SuppressWarnings({ "unchecked", "rawtypes" })
     @Test
     public void testMapToInterface1() {
@@ -557,7 +589,7 @@ public class ConverterMapTest {
         final TestValue testValue = converter.convert(Collections.singletonMap("my.prefix.test.value", true)).to(TestValue.class);
         assertTrue(testValue.value());
     }
-    
+
     private <K,V> Map.Entry<K,V> getMapEntry(Map<K,V> map) {
         assertEquals("This method assumes a map of size 1", 1, map.size());
         return map.entrySet().iterator().next();
@@ -570,6 +602,8 @@ public class ConverterMapTest {
         Boolean za_za();
     }
 
+    interface TestInterfaceSub extends TestInterface {}
+
     interface TestInterfaceWithGetProperties {
         int blah();
         Dictionary<String, Object> getProperties();
@@ -591,7 +625,7 @@ public class ConverterMapTest {
 
         boolean value();
     }
-    
+
     private static class Foo {
         private final int value;