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 {