You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2018/06/01 06:00:36 UTC

svn commit: r1832658 - in /aries/trunk/blueprint/blueprint-core/src: main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java

Author: gnodet
Date: Fri Jun  1 06:00:36 2018
New Revision: 1832658

URL: http://svn.apache.org/viewvc?rev=1832658&view=rev
Log:
[ARIES-1805] Blueprint core does not honor Java beans specification

Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java
    aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java?rev=1832658&r1=1832657&r2=1832658&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java Fri Jun  1 06:00:36 2018
@@ -237,20 +237,26 @@ public class ReflectionUtils {
                     propertyNames.add(name);
                 } else if (name.length() > 3 && name.startsWith("get") && resultType != Void.TYPE && argTypes.length == 0) {
                     name = decapitalize(name.substring(3));
-                    if (getters.containsKey(name)) {
-                        illegalProperties.add(name);
-                    } else {
+                    Method getter = getters.get(name);
+                    if (getter == null) {
                         propertyNames.add(name);
+                        getters.put(name, method);
+                    } else if (!getter.getName().startsWith("is")
+                            || getter.getReturnType() != boolean.class
+                            || resultType != boolean.class) {
+                        illegalProperties.add(name);
                     }
-                    getters.put(name, method);
                 } else if (name.length() > 2 && name.startsWith("is") && argTypes.length == 0 && resultType == boolean.class) {
                     name = decapitalize(name.substring(2));
-                    if (getters.containsKey(name)) {
+                    Method getter = getters.get(name);
+                    if (getter == null) {
+                        propertyNames.add(name);
+                        getters.put(name, method);
+                    } else if (!getter.getName().startsWith("get") || getter.getReturnType() != boolean.class) {
                         illegalProperties.add(name);
                     } else {
-                        propertyNames.add(name);
+                        getters.put(name, method);
                     }
-                    getters.put(name, method);
                 }
             }
 

Modified: aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java?rev=1832658&r1=1832657&r2=1832658&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/utils/ReflectionUtilsTest.java Fri Jun  1 06:00:36 2018
@@ -158,18 +158,38 @@ public class ReflectionUtilsTest {
         sut[1].set(sag, "tribulation", mockBlueprint);
         assertEquals("tribulation", sut[1].get(sag, mockBlueprint));
     }
-    
-    static class DuplicateGetter {
+
+    public static class DuplicateGetter {
         public boolean isField() { return true; }
         public boolean getField() { return false; }
     }
-    
+
+    public static class DuplicateGetter2 {
+        public boolean getField() { return false; }
+        public boolean isField() { return true; }
+    }
+
     @Test
-    public void testDuplicateGetter() {
+    public void testDuplicateGetter() throws Exception {
         loadProps(DuplicateGetter.class, false, false);
         
-        assertEquals(1, sut.length);
+        assertEquals(2, sut.length);
+        assertEquals("class", sut[0].getName());
+        assertEquals("field", sut[1].getName());
+        assertTrue(sut[1].allowsGet());
+        assertFalse(sut[1].allowsSet());
+
+        assertTrue((Boolean) sut[1].get(new DuplicateGetter(), mockBlueprint));
+
+        loadProps(DuplicateGetter2.class, false, false);
+
+        assertEquals(2, sut.length);
         assertEquals("class", sut[0].getName());
+        assertEquals("field", sut[1].getName());
+        assertTrue(sut[1].allowsGet());
+        assertFalse(sut[1].allowsSet());
+
+        assertTrue((Boolean) sut[1].get(new DuplicateGetter2(), mockBlueprint));
     }
     
     static class FieldsAndProps {