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>


Reply via email to