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/07/03 14:53:16 UTC
svn commit: r1834984 - in /aries/trunk/blueprint/blueprint-core/src:
main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java
test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java
Author: gnodet
Date: Tue Jul 3 14:53:16 2018
New Revision: 1834984
URL: http://svn.apache.org/viewvc?rev=1834984&view=rev
Log:
[ARIES-1816] Unable to use <null> with generic arguments
Modified:
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java
aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java?rev=1834984&r1=1834983&r2=1834984&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/generics/TypeInference.java Tue Jul 3 14:53:16 2018
@@ -281,7 +281,7 @@ public class TypeInference {
TypedObject arg = args.get(i);
Type needed = parameterTypes[i];
long sc;
- if (needed == arg.type) {
+ if (arg.type == null || needed == arg.type) {
sc = COST_ASSIGN;
} else if (allowCast && ClassUtil.getClass(needed).isAssignableFrom(ClassUtil.getClass(arg.type))) {
sc = COST_CAST;
Modified: aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java?rev=1834984&r1=1834983&r2=1834984&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/TypeInferenceTest.java Tue Jul 3 14:53:16 2018
@@ -19,6 +19,7 @@
package org.apache.aries.blueprint.container;
import org.apache.aries.blueprint.TestBlueprintContainer;
+import org.apache.aries.blueprint.di.ExecutionContext;
import org.apache.aries.blueprint.pojos.DummyServiceTrackerCustomizer;
import org.apache.aries.blueprint.pojos.PojoA;
import org.apache.aries.blueprint.utils.generics.OwbParametrizedTypeImpl;
@@ -31,6 +32,8 @@ import org.osgi.util.tracker.ServiceTrac
import java.lang.reflect.Constructor;
import java.lang.reflect.Type;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import static org.junit.Assert.assertNotNull;
@@ -70,6 +73,17 @@ public class TypeInferenceTest {
assertNotNull(match);
}
+ @Test
+ public void testParameterWithNullCollections() {
+ BlueprintContainerImpl container = new BlueprintContainerImpl(null, null, null, null, null, null, null, null, null, null);
+ BeanRecipe recipe = new BeanRecipe("sessionDef", container, FactoryWithList.class, false, false, false);
+ recipe.setArguments(Collections.singletonList(null));
+ recipe.setArgTypes(Collections.<String>singletonList(null));
+ recipe.setFactoryMethod("init");
+ ExecutionContext.Holder.setContext(new BlueprintRepository(container));
+ recipe.create();
+ }
+
class TIConverter implements TypeInference.Converter {
public TypeInference.TypedObject convert(TypeInference.TypedObject from, Type to) throws Exception {
Object arg = from.getValue();
@@ -77,4 +91,13 @@ public class TypeInferenceTest {
return new TypeInference.TypedObject(to, arg);
}
}
+
+ public static class FactoryWithList {
+
+ public static String init(List<Integer> ints) {
+ return "Hello!";
+ }
+
+ }
+
}