You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2009/01/17 10:42:30 UTC

svn commit: r735258 - /incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java

Author: gerdogdu
Date: Sat Jan 17 01:42:29 2009
New Revision: 735258

URL: http://svn.apache.org/viewvc?rev=735258&view=rev
Log:
Update producer method specialization.

Modified:
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=735258&r1=735257&r2=735258&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Sat Jan 17 01:42:29 2009
@@ -97,8 +97,10 @@
         {
             ProducerComponentImpl<?> p = (ProducerComponentImpl<?>) component;
             component.setType(p.getParent().getType());
+            found = true;
         }
-        else
+        
+        if(!found)
         {
 
             component.setType(WebBeansUtil.getMaxPrecedenceSteroTypeDeploymentType(component));
@@ -331,8 +333,8 @@
         Set<ProducerComponentImpl<?>> producerComponents = new HashSet<ProducerComponentImpl<?>>();
 
         Class<?> clazz = component.getReturnType();
-
         Method[] declaredMethods = clazz.getDeclaredMethods();
+        boolean isSpecializes = false;
         for (Method declaredMethod : declaredMethods)
         {
             // Producer Method
@@ -342,20 +344,18 @@
 
                 if (AnnotationUtil.isMethodHasAnnotation(declaredMethod, Specializes.class))
                 {
-                    if (AnnotationUtil.isMethodHasAnnotation(declaredMethod, Override.class))
-                    {
-                        WebBeansUtil.configureProducerSpecialization(component, declaredMethod, clazz.getSuperclass());
-                    }
-                    else
+                    if(ClassUtil.isStatic(declaredMethod.getModifiers()))
                     {
-                        throw new WebBeansConfigurationException("Producer method : " + declaredMethod.getName() + " in class : " + clazz.getName() + " must override its super class method");
-                    }
+                        throw new WebBeansConfigurationException("Specializing producer method : " + declaredMethod.getName() + " in class : " + clazz.getName() + " can not be static");
+                    }                 
+                    
+                    isSpecializes = true;
                 }
 
                 Type[] observableTypes = AnnotationUtil.getMethodParameterGenericTypesWithGivenAnnotation(declaredMethod, Fires.class);
                 EventUtil.checkObservableMethodParameterConditions(observableTypes, "method parameter", "method : " + declaredMethod.getName() + "in class : " + clazz.getName());
 
-                ProducerComponentImpl<?> newComponent = createProducerComponent(declaredMethod.getReturnType(), declaredMethod, component);
+                ProducerComponentImpl<?> newComponent = createProducerComponent(declaredMethod.getReturnType(), declaredMethod, component,isSpecializes);
                 if (newComponent != null)
                 {
                     producerComponents.add(newComponent);
@@ -367,10 +367,15 @@
 
     }
 
-    private static <T> ProducerComponentImpl<T> createProducerComponent(Class<T> returnType, Method method, AbstractComponent<?> parent)
+    private static <T> ProducerComponentImpl<T> createProducerComponent(Class<T> returnType, Method method, AbstractComponent<?> parent,boolean isSpecializes)
     {
         ProducerComponentImpl<T> component = new ProducerComponentImpl<T>(parent, returnType);
         component.setCreatorMethod(method);
+        
+        if(isSpecializes)
+        {
+            WebBeansUtil.configureProducerSpecialization(component, method, parent.getReturnType().getSuperclass());   
+        }
 
         if (returnType.isPrimitive())
         {