[webbeans-commits] Webbeans SVN: r2674 - in ri/trunk: impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext and 3 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Fri May 8 11:13:25 EDT 2009


Author: vitold
Date: 2009-05-08 11:13:24 -0400 (Fri, 08 May 2009)
New Revision: 2674

Modified:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java
   ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml
Log:
implement <Array> for method parameters

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java	2009-05-08 15:13:24 UTC (rev 2674)
@@ -324,7 +324,7 @@
       return result;
    }
    
-   public static AnnotatedClass<?> obtainArrayType(Element arrayElement, XmlEnvironment environment, Map<String, Set<String>> packagesMap)
+   private static AnnotatedClass<?> obtainArrayType(Element arrayElement, XmlEnvironment environment, Map<String, Set<String>> packagesMap)
    {
       AnnotatedClass<?> arrayType = null;
       

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java	2009-05-08 15:13:24 UTC (rev 2674)
@@ -76,7 +76,6 @@
          Document document = createDocument(url);
          if (document != null)
          {
-            parseForArrays(document);
             parseForAnnotationTypes(document);
             parseForDeploy(document);
             parseForBeans(document);
@@ -84,26 +83,6 @@
       }
    }
 
-   private void parseForArrays(Document document)
-   {
-      Element root = document.getRootElement();
-      checkChildrenForArray(root);
-   }
-
-   private void checkChildrenForArray(Element element)
-   {
-      Iterator<?> childIterator = element.elementIterator();
-      while (childIterator.hasNext())
-      {
-         Element child = (Element) childIterator.next();
-
-         if (XmlConstants.ARRAY.equalsIgnoreCase(child.getName()))
-            ParseXmlHelper.obtainArrayType(child, environment, packagesMap);
-         else
-            checkChildrenForArray(child);
-      }
-   }
-
    private void parseForAnnotationTypes(Document document)
    {
       Element root = document.getRootElement();

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java	2009-05-08 15:13:24 UTC (rev 2674)
@@ -18,7 +18,6 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -45,6 +44,9 @@
 import org.dom4j.Namespace;
 import org.jboss.webbeans.introspector.AnnotatedClass;
 import org.jboss.webbeans.introspector.AnnotatedField;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.jlr.AnnotatedMethodImpl;
 import org.jboss.webbeans.xml.ParseXmlHelper;
 import org.jboss.webbeans.xml.XmlConstants;
 import org.jboss.webbeans.xml.XmlEnvironment;
@@ -55,7 +57,7 @@
 
    private Set<AnnotatedField<?>> beanFields;
 
-   private List<Method> beanMethods;
+   private List<AnnotatedMethod<?>> beanMethods;
 
    private boolean haveBeanDeploymentTypeDeclaration = false;
 
@@ -87,7 +89,11 @@
    public void checkChildren(Element beanElement, AnnotatedClass<?> beanClass)
    {
       beanFields = beanClass.getFields();
-      beanMethods = Arrays.asList(beanClass.getRawType().getDeclaredMethods());
+      beanMethods = new ArrayList<AnnotatedMethod<?>>();
+      for (Method method : beanClass.getRawType().getDeclaredMethods())
+      {
+         beanMethods.add(AnnotatedMethodImpl.of(method, beanClass));
+      }
 
       checkForInterceptorChild(beanElement);
       checkForDecoratorChild(beanElement);
@@ -108,7 +114,8 @@
 
    private void checkBeanChild(Element beanChildElement, AnnotatedClass<?> beanClass)
    {
-      if (XmlConstants.ARRAY.equalsIgnoreCase(beanChildElement.getName()))
+      if (ParseXmlHelper.isJavaEeNamespace(beanChildElement) && 
+            XmlConstants.ARRAY.equalsIgnoreCase(beanChildElement.getName()))
       {
          // bean child element declaring an array parameter of the bean constructor
          AnnotatedClass<?> array = ParseXmlHelper.obtainArray(beanChildElement, environment, packagesMap);
@@ -215,10 +222,14 @@
          }
       }
 
-      for (Method method : beanMethods)
+      AnnotatedMethod<?> beanMethod = null;
+      for (AnnotatedMethod<?> method : beanMethods)
       {
          if (method.getName().equalsIgnoreCase(beanChildElement.getName()))
+         {
             isMethod = true;
+            beanMethod = method;
+         }
       }
 
       if (isField && isMethod)
@@ -233,7 +244,7 @@
 
       if (isMethod)
       {
-         checkMethodChild(beanChildElement, beanClass);
+         checkMethodChild(beanChildElement, beanMethod, beanClass);
          return;
       }
 
@@ -259,8 +270,52 @@
 
    }
 
-   private void checkMethodChild(Element beanChildElement, AnnotatedClass<?> beanClass)
-   {
-      // TODO: not finished
+   private void checkMethodChild(Element methodElement, AnnotatedMethod<?> beanMethod, AnnotatedClass<?> beanClass)
+   {// TODO: not finished
+      List<AnnotatedClass<?>> methodParameters = new ArrayList<AnnotatedClass<?>>();
+      
+      Iterator<?> elIterator = methodElement.elementIterator();
+      while (elIterator.hasNext())
+      {
+         Element methodChildElement = (Element)elIterator.next();
+         
+         if (ParseXmlHelper.isJavaEeNamespace(methodChildElement) && 
+               XmlConstants.ARRAY.equalsIgnoreCase(methodChildElement.getName()))
+         {
+            // method child element declaring an array parameter of the method
+            AnnotatedClass<?> array = ParseXmlHelper.obtainArray(methodChildElement, environment, packagesMap);
+            methodParameters.add(array);
+         }
+         else{
+            AnnotatedClass<?> methodChildClass = ParseXmlHelper.loadElementClass(methodChildElement, Object.class, environment, packagesMap);
+            Class<?> methodChildType = methodChildClass.getRawType();
+            boolean isJavaClass = !methodChildType.isEnum() && !methodChildType.isPrimitive() && !methodChildType.isInterface();
+            boolean isInterface = methodChildType.isInterface() && !methodChildType.isAnnotation();
+            if(isJavaClass || isInterface)
+            {
+               // method child element declaring a parameter of the method
+               methodParameters.add(methodChildClass);
+            }
+         }                  
+      }
+      
+      List<? extends AnnotatedParameter<?>> parameters = beanMethod.getParameters();
+      if (methodParameters.size() != parameters.size())
+         throw new DefinitionException("Bean '" + beanClass.getName() + "' don't have metod with the same number of parameters as declared");
+      
+      for (int i = 0; i < parameters.size(); i++)
+      {
+         if (!parameters.get(i).isAssignableFrom(methodParameters.get(i)))
+            throw new DefinitionException("Bean '" + beanClass.getName() + "' don't have metod with same types of parameters as declared");
+      }
    }
+   
+   
+   
+   
+   
+   
+   
+   
+   
 }

Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java	2009-05-08 15:13:24 UTC (rev 2674)
@@ -35,7 +35,7 @@
 )
 public class XmlParserImplTest extends AbstractWebBeansTest
 {
-   //@Test
+//   @Test
    public void testParse()
    {
       XmlEnvironment parserEnv = new MockXmlEnvironment(getResources("beans.xml"), new EjbDescriptorCache());

Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java	2009-05-08 15:13:24 UTC (rev 2674)
@@ -29,4 +29,9 @@
    {
       return this.strArr;
    }
+   
+   public void setStrArr(String[] strArr)
+   {
+      this.strArr = strArr;
+   }
 }

Modified: ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml
===================================================================
--- ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml	2009-05-08 05:54:32 UTC (rev 2673)
+++ ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml	2009-05-08 15:13:24 UTC (rev 2674)
@@ -35,6 +35,11 @@
 		<Array>
 			<String />
 		</Array>
+		<myapp:setStrArr>
+			<Array>
+				<String />
+			</Array>
+		</myapp:setStrArr>
 	</myapp:Order>
 <!--	
 	<myapp:PaymentService>




More information about the weld-commits mailing list