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 2020/03/18 16:14:52 UTC

[felix-dev] branch master updated: Convert to Interface without methods - FELIX-6238

This is an automated email from the ASF dual-hosted git repository.

davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 9f29bc8  Convert to Interface without methods - FELIX-6238
     new 29ccc55  Merge pull request #9 from stbischof/conv_int_empt
9f29bc8 is described below

commit 9f29bc82aa688c38b9b74b79ccd2d50ae0a8abac
Author: Stefan Bischof <st...@bipolis.org>
AuthorDate: Tue Mar 17 15:24:51 2020 +0100

    Convert to Interface without methods - FELIX-6238
---
 .../org/osgi/util/converter/ConvertingImpl.java    |  6 ++++-
 .../org/osgi/util/converter/ConverterTest.java     | 29 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java b/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
index fc409d2..c9e3722 100644
--- a/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
+++ b/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
@@ -1126,11 +1126,15 @@ class ConvertingImpl extends AbstractSpecifying<Converting>
 		Set<Class< ? >> interfaces = getInterfaces0(cls);
 		outer: for (Iterator<Class< ? >> it = interfaces.iterator(); it.hasNext();) {
 			Class< ? > intf = it.next();
-			for (Method method : intf.getMethods()) {
+			Method[] methods=intf.getMethods();
+			for (Method method : methods) {
 				if(method.getDeclaringClass() == intf) {
 					continue outer;
 				}
 			}
+			if(intf==cls&&methods.length==0) {
+			    continue outer;
+			}
 			it.remove();
 		}
 
diff --git a/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java b/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
index 9b4615e..ef00c13 100644
--- a/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
+++ b/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
@@ -1451,11 +1451,40 @@ public class ConverterTest {
         assertEquals(Integer.valueOf(0), inter.value());
     }
 
+    @Test
+    public void testMapToEmptyInterface() throws Exception {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("a", "b");
+        EmptyInterface i = Converters.standardConverter().convert(map).to(EmptyInterface.class);
+        assertNotNull(i);
+
+        EmptyInterface2 j = Converters.standardConverter().convert(map).to(EmptyInterface2.class);
+        assertNotNull(j);
+
+        EmptyInterface3 k = Converters.standardConverter().convert(map).to(EmptyInterface3.class);
+        assertNotNull(k);
+    }
+
     static interface MyIntf2 {
         String code();
         Integer value();
     }
 
+    static interface EmptyInterface
+    {
+    }
+
+    static interface EmptyInterface2 extends EmptyInterface
+    {
+    }
+    static interface NonEmptyInterface
+    {
+       int a();
+    }
+
+    static interface EmptyInterface3 extends NonEmptyInterface
+    {
+    }
     static class MyClass2 {
         private final String value;
         public MyClass2(String v) {