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>