openwebbeans-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rmannibu...@apache.org
Subject svn commit: r1797913 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java webbeans-tck/testng-dev.xml
Date Wed, 07 Jun 2017 11:45:27 GMT
Author: rmannibucau
Date: Wed Jun  7 11:45:27 2017
New Revision: 1797913

URL: http://svn.apache.org/viewvc?rev=1797913&view=rev
Log:
some basic validation for el names

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-tck/testng-dev.xml

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java?rev=1797913&r1=1797912&r2=1797913&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
Wed Jun  7 11:45:27 2017
@@ -86,7 +86,7 @@ public abstract class BeanAttributesBuil
 
     protected Set<Class<? extends Annotation>> stereotypes;
 
-    protected boolean alternative;
+    protected Boolean alternative;
     
     public static BeanAttributesBuilderFactory forContext(WebBeansContext webBeansContext)
     {
@@ -104,6 +104,12 @@ public abstract class BeanAttributesBuil
         this.webBeansContext = webBeansContext;
     }
 
+    public BeanAttributesBuilder<T, A> alternative(final boolean alternative)
+    {
+        this.alternative = alternative;
+        return this;
+    }
+
     public BeanAttributesImpl<T> build()
     {
         // we need to check the stereotypes first because we might need it to determine the
scope
@@ -568,7 +574,7 @@ public abstract class BeanAttributesBuil
     // these alternatives can be not activated
     protected void defineAlternative()
     {
-        alternative = WebBeansUtil.isAlternative(annotated, stereotypes);
+        alternative = alternative == null || !alternative ? WebBeansUtil.isAlternative(annotated,
stereotypes) : alternative;
     }
 
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1797913&r1=1797912&r2=1797913&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
Wed Jun  7 11:45:27 2017
@@ -326,6 +326,8 @@ public class BeansDeployer
                 validateDecoratorDecoratedTypes();
                 validateDecoratorGenericTypes();
 
+                validateNames();
+
                 webBeansContext.getNotificationManager().clearCaches();
 
                 // fire event
@@ -367,6 +369,51 @@ public class BeansDeployer
         }
     }
 
+    /**
+     * Ensure "foo" and "foo.bar" conflict and is reported as a DeploymentException but foo.bar
and foo.dummy don't conflict.
+     */
+    private void validateNames()
+    {
+        final Collection<String> names = new HashSet<>();
+        final Collection<String> partials = new HashSet<>();
+        for (final Bean<?> bean : webBeansContext.getBeanManagerImpl().getBeans())
+        {
+            // the skip logic needs some revisit but this validation is not useful enough
to justify to resolve all alternatives here
+            if (bean.isAlternative())
+            {
+                continue;
+            }
+            if (AbstractProducerBean.class.isInstance(bean) && AbstractProducerBean.class.cast(bean).getOwnerComponent().isAlternative())
+            {
+                continue;
+            }
+
+            final String name = bean.getName();
+            if (name != null)
+            {
+                if (name.contains("."))
+                {
+                    final String[] segments = name.split("\\.");
+                    String current = "";
+                    for (int i = 0; i < segments.length - 1; i++)
+                    {
+                        current += (i > 0 ? "." : "") + segments[i];
+                        partials.add(current);
+                        if (names.contains(current))
+                        {
+                            throw new WebBeansDeploymentException("Name '" + name + "' is
conflicting with '" + current + "'");
+                        }
+                    }
+                }
+
+                if (!names.add(name) || partials.contains(name))
+                {
+                    throw new WebBeansDeploymentException("Name '" + name + "' is conflicting");
+                }
+            }
+        }
+    }
+
     private Map<BeanArchiveInformation, Map<AnnotatedType<?>, ExtendedBeanAttributes<?>>>
getBeanAttributes(
                                 final Map<BeanArchiveInformation, List<AnnotatedType<?>>>
annotatedTypesPerBda)
     {
@@ -392,7 +439,9 @@ public class BeansDeployer
                     if (isEjb || (ClassUtil.isConcrete(beanClass) || WebBeansUtil.isDecorator(at))
&& isValidManagedBean(at))
                     {
                         final BeanAttributesImpl tBeanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(at,
onlyScopedBeans).build();
-                        if (tBeanAttributes != null)
+                        if (tBeanAttributes != null &&
+                                (!tBeanAttributes.isAlternative() || webBeansContext.getAlternativesManager()
+                                        .isAlternative(at.getJavaClass(), tBeanAttributes.getStereotypes())))
                         {
                             final ProcessBeanAttributesImpl<?> processBeanAttributes
                                 = webBeansContext.getWebBeansUtil().fireProcessBeanAttributes(at,
at.getJavaClass(), tBeanAttributes);

Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1797913&r1=1797912&r2=1797913&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Wed Jun  7 11:45:27 2017
@@ -18,7 +18,9 @@
 <suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue">
   <test name="JSR-346 TCK">
     <classes>
-          <class name="org.jboss.cdi.tck.tests.definition.qualifier.repeatable.RepeatableQualifiersTest"
/>
+          <class name="org.jboss.cdi.tck.tests.extensions.lifecycle.processBeanAttributes.VerifyValuesTest"
/>
+          <class name="org.jboss.cdi.tck.tests.lookup.byname.ambiguous.AmbiguousELNamesTest"
/>
+          <class name="org.jboss.cdi.tck.tests.lookup.byname.ambiguous.broken.AmbiguousELNamesTest"
/>
       <!--
       <class name="org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest"
/>
       <class name="org.jboss.cdi.tck.tests.event.fires.FireEventTest" />



Mime
View raw message