You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2016/12/28 10:36:08 UTC

svn commit: r1776257 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java webbeans-tck/testng-dev.xml

Author: rmannibucau
Date: Wed Dec 28 10:36:08 2016
New Revision: 1776257

URL: http://svn.apache.org/viewvc?rev=1776257&view=rev
Log:
OWB-1162 better support of CDI.current().select(qualifier)

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java
    openwebbeans/trunk/webbeans-tck/testng-dev.xml

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=1776257&r1=1776256&r2=1776257&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Wed Dec 28 10:36:08 2016
@@ -37,13 +37,16 @@ import java.util.Set;
 
 import javax.enterprise.context.spi.AlterableContext;
 import javax.enterprise.context.spi.Context;
+import javax.enterprise.inject.Default;
 import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.New;
 import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.util.TypeLiteral;
 import javax.inject.Provider;
 
+import org.apache.webbeans.annotation.DefaultLiteral;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.InjectionResolver;
@@ -178,7 +181,9 @@ public class InstanceImpl<T> implements
     public Instance<T> select(Annotation... qualifiers)
     {
         Annotation[] newQualifiersArray = getAdditionalQualifiers(qualifiers);
-        return new InstanceImpl<T>(injectionClazz, new InstanceInjectionPoint(injectionPoint, newQualifiersArray), webBeansContext, parentCreationalContext, newQualifiersArray);
+        return new InstanceImpl<T>(
+                injectionClazz, injectionPoint == null ? null : new InstanceInjectionPoint(injectionPoint, newQualifiersArray),
+                webBeansContext, parentCreationalContext, newQualifiersArray);
     }
 
     /**
@@ -193,14 +198,35 @@ public class InstanceImpl<T> implements
 
         Set<Annotation> newQualifiers = new HashSet<Annotation>(qualifierAnnotations);
 
+        final Set<Class<?>> types = new HashSet<>(newQualifiers.size() + (qualifiers != null ? qualifiers.length : 0));
+        for (final Annotation a : newQualifiers)
+        {
+            types.add(a.annotationType());
+        }
+
+        boolean addsDefault = false;
         if (qualifiers != null && qualifiers.length > 0)
         {
             for (int i = 0; i < qualifiers.length; i++)
             {
                 newQualifiers.add(qualifiers[i]);
+                final Class<? extends Annotation> type = qualifiers[i].annotationType();
+                if (type == Default.class)
+                {
+                    addsDefault = true;
+                }
+                else if (!types.add(type))
+                {
+                    throw new IllegalArgumentException("Duplicated qualifier " + qualifiers[i].annotationType());
+                }
             }
         }
 
+        if (!addsDefault && !types.contains(New.class)) // easy way to ensure @New will not resolve, not yet perfect though
+        {
+            newQualifiers.remove(DefaultLiteral.INSTANCE);
+        }
+
         Annotation[] newQualifiersArray = new Annotation[newQualifiers.size()];
         newQualifiersArray = newQualifiers.toArray(newQualifiersArray);
         

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java?rev=1776257&r1=1776256&r2=1776257&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java Wed Dec 28 10:36:08 2016
@@ -21,11 +21,19 @@ package org.apache.webbeans.container;
 import org.apache.webbeans.test.AbstractUnitTest;
 import org.junit.Test;
 
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Qualifier;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
 
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
 public class OwbCDIProviderTest extends AbstractUnitTest
 {
@@ -39,4 +47,48 @@ public class OwbCDIProviderTest extends
         assertFalse(CDI.current().isAmbiguous());
         assertNotNull(CDI.current().get());
     }
+
+    @Test
+    public void select()
+    {
+        startContainer(ABean.class);
+        final Instance<ABean> select = CDI.current().select(ABean.class);
+        assertFalse(select.isAmbiguous());
+        assertFalse(select.isUnsatisfied());
+        final ABean bean = select.get();
+        assertNotNull(bean);
+    }
+
+    @Test
+    public void selectQualifier()
+    {
+        startContainer(QualifiedBean.class, Qual.class);
+        final Instance<QualifiedBean> select = CDI.current()
+                .select(QualifiedBean.class, new Annotation[0])
+                .select(new AnnotationLiteral<Qual>()
+                {
+                });
+        assertFalse(select.isAmbiguous());
+        assertFalse(select.isUnsatisfied());
+        final QualifiedBean bean = select.get();
+        assertNotNull(bean);
+    }
+
+    @ApplicationScoped
+    public static class ABean
+    {
+    }
+
+    @Target(TYPE)
+    @Retention(RUNTIME)
+    @Qualifier
+    public @interface Qual
+    {
+    }
+
+    @Qual
+    @ApplicationScoped
+    public static class QualifiedBean
+    {
+    }
 }

Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1776257&r1=1776256&r2=1776257&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Wed Dec 28 10:36:08 2016
@@ -18,7 +18,7 @@
 <suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue">
   <test name="JSR-346 TCK">
     <classes>
-          <class name="org.jboss.cdi.tck.tests.context.DestroyedInstanceReturnedByGetTest" />
+          <class name="org.jboss.cdi.tck.tests.lookup.dynamic.DynamicLookupTest" />
       <!--
       <class name="org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest" />
       <class name="org.jboss.cdi.tck.tests.event.fires.FireEventTest" />