Author: arne
Date: Tue Jan 22 14:15:41 2013
New Revision: 1436941

URL: http://svn.apache.org/viewvc?rev=1436941&view=rev
Log:
OWB-755: Fixed parent of producers of specialized beans

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/ProducerMethodBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.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=1436941&r1=1436940&r2=1436941&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
 Tue Jan 22 14:15:41 2013
@@ -641,11 +641,6 @@ public abstract class AbstractInjectionT
                 
                 ProducerMethodBeanBuilder<T> producerMethodBeanCreator = new 
ProducerMethodBeanBuilder<T>(bean, annotatedMethod);
                 
-                if(specialize)
-                {
-                    
producerMethodBeanCreator.configureProducerSpecialization((AnnotatedMethod<T>) 
annotatedMethod);
-                }
-                
                 producerMethodBeanCreator.defineStereoTypes();
                 producerMethodBeanCreator.defineScopeType("Annotated producer 
method : " + annotatedMethod
                         +  "must declare default @Scope annotation");
@@ -656,6 +651,11 @@ public abstract class AbstractInjectionT
                 producerMethodBeanCreator.defineApiType();
                 producerMethodBeanCreator.defineName();
                 ProducerMethodBean<T> producerMethodBean = 
producerMethodBeanCreator.getBean();
+                
+                if(specialize)
+                {
+                    
producerMethodBeanCreator.configureProducerSpecialization(producerMethodBean, 
(AnnotatedMethod<T>) annotatedMethod);
+                }
                 ProducerMethodProducerBuilder producerBuilder = new 
ProducerMethodProducerBuilder(producerMethodBean);
                 
producerMethodBean.setProducer(producerBuilder.build(annotatedMethod));
                 
producerMethodBean.setCreatorMethod(annotatedMethod.getJavaMember());

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=1436941&r1=1436940&r2=1436941&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
 Tue Jan 22 14:15:41 2013
@@ -49,7 +49,7 @@ public class ProducerMethodBeanBuilder<T
         super(parent, annotatedMethod);
     }
 
-    public void configureProducerSpecialization(AnnotatedMethod<T> 
annotatedMethod)
+    public void configureProducerSpecialization(ProducerMethodBean<T> bean, 
AnnotatedMethod<T> annotatedMethod)
     {
         List<AnnotatedParameter<T>> annotatedParameters = 
annotatedMethod.getParameters();
         List<Class<?>> parameters = new ArrayList<Class<?>>();
@@ -86,7 +86,7 @@ public class ProducerMethodBeanBuilder<T
         WebBeansUtil.configuredProducerSpecializedName(bean, 
annotatedMethod.getJavaMember(), superMethod);
         */
         
-        getBean().setSpecializedBean(true);        
+        bean.setSpecializedBean(true);        
     }
     
     /**

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java?rev=1436941&r1=1436940&r2=1436941&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
 Tue Jan 22 14:15:41 2013
@@ -52,6 +52,11 @@ public class ProducerMethodProducer<T, P
         this.disposalMethod = disposerMethod;
     }
     
+    public void setOwner(Bean<P> owner)
+    {
+        this.owner = owner;
+    }
+
     public void setDisposalMethod(AnnotatedMethod<P> disposalMethod)
     {
         this.disposalMethod = disposalMethod;

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=1436941&r1=1436940&r2=1436941&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
 Tue Jan 22 14:15:41 2013
@@ -106,6 +106,7 @@ import org.apache.webbeans.inject.Altern
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.plugins.PluginLoader;
 import org.apache.webbeans.portable.ProducerFieldProducer;
+import org.apache.webbeans.portable.ProducerMethodProducer;
 import org.apache.webbeans.portable.events.discovery.ErrorStack;
 import org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;
 import org.apache.webbeans.portable.events.generics.GProcessBean;
@@ -759,10 +760,21 @@ public final class WebBeansUtil
                                 + " may not explicitly declare a bean name");
                     }
 
-                    comp.setSpecializedBean(true);
+                }
+                comp.setSpecializedBean(true);
+                for (Bean<?> bean: 
webBeansContext.getBeanManagerImpl().getComponents())
+                {
+                    if (bean instanceof ProducerMethodBean)
+                    {
+                        ProducerMethodBean<?> producerBean = 
(ProducerMethodBean<?>)bean;
+                        if (producerBean.getParent() == superBean && 
producerBean.getProducer() instanceof ProducerMethodProducer)
+                        {
+                            ProducerMethodProducer<?, ?> producer = 
(ProducerMethodProducer<?, ?>) producerBean.getProducer();
+                            producer.setOwner((Bean) comp);
+                        }
+                    }
                 }
             }
-
             else
             {
                 throw new InconsistentSpecializationException("WebBean 
component class : " + specializedClass.getName()


Reply via email to