You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2009/12/15 11:43:00 UTC

svn commit: r890750 - in /incubator/aries/trunk/blueprint/blueprint-core/src: main/java/org/apache/aries/blueprint/container/ main/java/org/apache/aries/blueprint/utils/ test/java/org/apache/aries/blueprint/ test/java/org/apache/aries/blueprint/pojos/ ...

Author: mahrwald
Date: Tue Dec 15 10:42:59 2009
New Revision: 890750

URL: http://svn.apache.org/viewvc?rev=890750&view=rev
Log:
ARIES-82 Fix problem with generics in method signatures

Added:
    incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/Primavera.java
    incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/PrimaveraFactory.java
Modified:
    incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
    incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java
    incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/WiringTest.java
    incubator/aries/trunk/blueprint/blueprint-core/src/test/resources/test-generics.xml

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java?rev=890750&r1=890749&r2=890750&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java Tue Dec 15 10:42:59 2009
@@ -281,6 +281,8 @@
                 it.remove();
             } else if (instance ^ !Modifier.isStatic(mth.getModifiers())) {
                 it.remove();
+            } else if (mth.isBridge()) {
+                it.remove();
             }
         }
         // Find a direct match with assignment

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java?rev=890750&r1=890749&r2=890750&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java Tue Dec 15 10:42:59 2009
@@ -22,9 +22,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
@@ -104,7 +101,7 @@
         List<Method> methods = new ArrayList<Method>();
         for (Method method : clazz.getMethods()) {
             Class[] methodParams = method.getParameterTypes();
-            if (name.equals(method.getName()) && Void.TYPE.equals(method.getReturnType()) && methodParams.length == paramTypes.length) {
+            if (name.equals(method.getName()) && Void.TYPE.equals(method.getReturnType()) && methodParams.length == paramTypes.length && !method.isBridge()) {
                 boolean assignable = true;
                 for (int i = 0; i < paramTypes.length && assignable; i++) {
                     assignable &= paramTypes[i] == null || methodParams[i].isAssignableFrom(paramTypes[i]);
@@ -122,7 +119,7 @@
         if (properties == null) {
             List<PropertyDescriptor> props = new ArrayList<PropertyDescriptor>();
             for (Method method : clazz.getMethods()) {
-                if (Modifier.isStatic(method.getModifiers())) {
+                if (Modifier.isStatic(method.getModifiers()) || method.isBridge()) {
                     continue;
                 }
                 String name = method.getName();

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/WiringTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/WiringTest.java?rev=890750&r1=890749&r2=890750&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/WiringTest.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/WiringTest.java Tue Dec 15 10:42:59 2009
@@ -41,6 +41,7 @@
 import org.apache.aries.blueprint.pojos.PojoGenerics;
 import org.apache.aries.blueprint.pojos.PojoListener;
 import org.apache.aries.blueprint.pojos.PojoRecursive;
+import org.apache.aries.blueprint.pojos.Primavera;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 
@@ -333,6 +334,14 @@
         pojo = (PojoGenerics) obj;
         
         assertEquals(expectedMap, pojo.getMap());
+        
+        obj = repository.create("genericPojo");
+        assertTrue(obj instanceof Primavera);
+        assertEquals("string", ((Primavera) obj).prop);
+        
+        obj = repository.create("doubleGenericPojo");
+        assertTrue(obj instanceof Primavera);
+        assertEquals("stringToo", ((Primavera) obj).prop);
     }
     
     public void testCircular() throws Exception {

Added: incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/Primavera.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/Primavera.java?rev=890750&view=auto
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/Primavera.java (added)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/Primavera.java Tue Dec 15 10:42:59 2009
@@ -0,0 +1,13 @@
+package org.apache.aries.blueprint.pojos;
+
+interface Product<T> {
+    void setProperty(T value);
+}
+
+public class Primavera implements Product<String> {
+    public String prop;
+
+    public void setProperty(String value) {
+        prop = value;
+    }    
+}

Added: incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/PrimaveraFactory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/PrimaveraFactory.java?rev=890750&view=auto
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/PrimaveraFactory.java (added)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/pojos/PrimaveraFactory.java Tue Dec 15 10:42:59 2009
@@ -0,0 +1,19 @@
+package org.apache.aries.blueprint.pojos;
+
+interface GenericFactory<T,U> {
+    T getObject();
+    T getObject(U value);
+}
+
+public class PrimaveraFactory implements GenericFactory<Primavera,String> {
+
+    public Primavera getObject() {
+        return new Primavera();
+    }
+
+    public Primavera getObject(String value) {
+        Primavera res = new Primavera();
+        res.setProperty(value);
+        return res;
+    }
+}

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/test/resources/test-generics.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/test/resources/test-generics.xml?rev=890750&r1=890749&r2=890750&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/test/resources/test-generics.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/test/resources/test-generics.xml Tue Dec 15 10:42:59 2009
@@ -80,5 +80,13 @@
         </argument>
     </bean>
     
+		<bean id="genericPojoFactory" class="org.apache.aries.blueprint.pojos.PrimaveraFactory" />
+		<bean id="genericPojo" factory-ref="genericPojoFactory" factory-method="getObject">
+				<property name="property" value="string" />
+		</bean>
+
+		<bean id="doubleGenericPojo" factory-ref="genericPojoFactory" factory-method="getObject">
+	    	<property name="property" value="stringToo" />
+		</bean>
     
 </blueprint>