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!";
+        }
+
+    }
+
 }