You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/14 00:54:18 UTC

svn commit: r1432771 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/creation/ util/

Author: arne
Date: Sun Jan 13 23:54:17 2013
New Revision: 1432771

URL: http://svn.apache.org/viewvc?rev=1432771&view=rev
Log:
OWB-747: fixed specialization

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java?rev=1432771&r1=1432770&r2=1432771&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java Sun Jan 13 23:54:17 2013
@@ -57,6 +57,7 @@ import org.apache.webbeans.component.Res
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.exception.inject.DefinitionException;
 import org.apache.webbeans.spi.api.ResourceReference;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
@@ -104,12 +105,22 @@ public abstract class AbstractInjectionT
     {
         if (getAnnotated().isAnnotationPresent(Specializes.class))
         {
-            defineName(getSuperAnnotated(), WebBeansUtil.getManagedBeanDefaultName(getAnnotated().getJavaClass().getSimpleName()));
+            AnnotatedType<? super T> superAnnotated = getSuperAnnotated();
+            defineName(superAnnotated, WebBeansUtil.getManagedBeanDefaultName(superAnnotated.getJavaClass().getSimpleName()));
         }
         if (getName() == null)
         {
             defineName(getAnnotated(), WebBeansUtil.getManagedBeanDefaultName(getAnnotated().getJavaClass().getSimpleName()));
         }
+        else
+        {
+            // TODO XXX We have to check stereotypes here, too
+            if (getAnnotated().getJavaClass().isAnnotationPresent(Named.class))
+            {
+                throw new DefinitionException("@Specialized Class : " + getAnnotated().getJavaClass().getName()
+                        + " may not explicitly declare a bean name");
+            }
+        }
     }
 
     protected AnnotatedConstructor<T> getBeanConstructor()

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java?rev=1432771&r1=1432770&r2=1432771&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java Sun Jan 13 23:54:17 2013
@@ -44,7 +44,8 @@ public class ProducerFieldBeanBuilder<T,
     {
         if (getAnnotated().isAnnotationPresent(Specializes.class))
         {
-            defineName(getSuperAnnotated(), WebBeansUtil.getProducerDefaultName(getSuperAnnotated().getJavaMember().getName()));
+            AnnotatedField<?> superAnnotated = getSuperAnnotated();
+            defineName(superAnnotated, WebBeansUtil.getProducerDefaultName(superAnnotated.getJavaMember().getName()));
         }
         if (getName() == null)
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java?rev=1432771&r1=1432770&r2=1432771&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java Sun Jan 13 23:54:17 2013
@@ -29,10 +29,12 @@ import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.Specializes;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.inject.Named;
 
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.exception.inject.DefinitionException;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.WebBeansUtil;
@@ -95,12 +97,22 @@ public class ProducerMethodBeanBuilder<T
         if (getAnnotated().isAnnotationPresent(Specializes.class))
         {
             specialized = true;
-            defineName(getSuperAnnotated(), WebBeansUtil.getProducerDefaultName(getSuperAnnotated().getJavaMember().getName()));
+            AnnotatedMethod<?> superAnnotated = getSuperAnnotated();
+            defineName(superAnnotated, WebBeansUtil.getProducerDefaultName(superAnnotated.getJavaMember().getName()));
         }
         if (getName() == null)
         {
             defineName(getAnnotated(), WebBeansUtil.getProducerDefaultName(getAnnotated().getJavaMember().getName()));
         }
+        else
+        {
+            // TODO XXX We have to check stereotypes here, too
+            if (getAnnotated().isAnnotationPresent(Named.class))
+            {
+                throw new DefinitionException("@Specialized Producer method : " + getAnnotated().getJavaMember().getName()
+                        + " may not explicitly declare a bean name");
+            }
+        }
     }
 
     protected AnnotatedMethod<?> getSuperAnnotated()

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1432771&r1=1432770&r2=1432771&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Sun Jan 13 23:54:17 2013
@@ -1389,7 +1389,7 @@ public final class WebBeansUtil
 
                 if(superBean.getName() != null)
                 {
-                    if(comp.getName() != null)
+                    if (!superBean.getName().equals(comp.getName()))
                     {
                         throw new DefinitionException("@Specialized Class : " + specializedClass.getName()
                                 + " may not explicitly declare a bean name");