openwebbeans-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rmannibu...@apache.org
Subject svn commit: r1606380 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/src/main/java/org/apache/webbeans/portable/ webbeans-tck/
Date Sat, 28 Jun 2014 16:58:30 GMT
Author: rmannibucau
Date: Sat Jun 28 16:58:29 2014
New Revision: 1606380

URL: http://svn.apache.org/r1606380
Log:
OWB-979 isOverridden in AnnotatedTypeImpl was not checking annotations, note: we can still
enhance the algo checking only CDI annotations

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/OwbAnnotated.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanAttributesImpl.java.cdi-1.1
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/portable/AbstractAnnotated.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.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=1606380&r1=1606379&r2=1606380&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
Sat Jun 28 16:58:29 2014
@@ -21,6 +21,7 @@ package org.apache.webbeans.component.cr
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -28,8 +29,10 @@ import java.util.Set;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.NormalScope;
+import javax.enterprise.inject.Alternative;
 import javax.enterprise.inject.Any;
 import javax.enterprise.inject.Specializes;
+import javax.enterprise.inject.Stereotype;
 import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMember;
@@ -50,10 +53,14 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.container.ExternalScope;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import javax.enterprise.inject.spi.DefinitionException;
+
+import org.apache.webbeans.inject.AlternativesManager;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.portable.OwbAnnotated;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
 import org.apache.webbeans.util.WebBeansUtil;
 
 /**
@@ -130,15 +137,20 @@ public abstract class BeanAttributesBuil
         }
         else
         {
-            Set<Type> types = annotated.getTypeClosure();
+            // if already computed then reuse it otherwise
+            Set<Type> types = OwbAnnotated.class.isInstance(annotated) ?
+                                    annotated.getTypeClosure() : GenericsUtil.getTypeClosure(baseType,
baseType);
             this.types.addAll(types);
             Set<String> ignored = webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
-            for (Iterator<Type> i = this.types.iterator(); i.hasNext();)
+            if (!ignored.isEmpty())
             {
-                Type t = i.next();
-                if (t instanceof Class && ignored.contains(((Class<?>)t).getName()))
+                for (Iterator<Type> i = this.types.iterator(); i.hasNext();)
                 {
-                    i.remove();
+                    Type t = i.next();
+                    if (t instanceof Class && ignored.contains(((Class<?>)t).getName()))
+                    {
+                        i.remove();
+                    }
                 }
             }
         }
@@ -468,11 +480,42 @@ public abstract class BeanAttributesBuil
             }
         }
     }
-    
+
+    // these alternatives can be not activated
     protected void defineAlternative()
     {
-        alternative = false;
+        final AlternativesManager alternativesManager = webBeansContext.getAlternativesManager();
+        alternative = alternativesManager.isAlternative(getType(), Collections.<Class<?
extends Annotation>>emptySet());
+        if (alternative)
+        {
+            alternative = true;
+            return;
+        }
+
+        for (final Annotation a : annotated.getAnnotations())
+        {
+            final Class<? extends Annotation> annotationType = a.annotationType();
+            if (annotationType == Alternative.class)
+            {
+                alternative = true;
+                return;
+            }
+
+            if (annotationType.getAnnotation(Stereotype.class) != null)
+            {
+                for (final Annotation aa : annotationType.getAnnotations())
+                {
+                    if (aa.annotationType() == Alternative.class)
+                    {
+                        alternative = true;
+                        return;
+                    }
+                }
+            }
+        }
     }
+
+    protected abstract Class<?> getType();
     
     public static class BeanAttributesBuilderFactory
     {
@@ -558,6 +601,12 @@ public abstract class BeanAttributesBuil
         }
 
         @Override
+        protected Class<?> getType()
+        {
+            return annotated.getJavaClass();
+        }
+
+        @Override
         protected AnnotatedType<? super C> getSuperAnnotated()
         {
             AnnotatedType<? super C> annotatedType = getAnnotated();
@@ -585,6 +634,12 @@ public abstract class BeanAttributesBuil
         }
 
         @Override
+        protected Class<?> getType()
+        {
+            return annotated.getJavaMember().getType();
+        }
+
+        @Override
         protected void defineScope()
         {
             defineScope("Annotated producer field: " + getAnnotated().getJavaMember() + 
"must declare default @Scope annotation");
@@ -627,6 +682,12 @@ public abstract class BeanAttributesBuil
         }
 
         @Override
+        protected Class<?> getType()
+        {
+            return annotated.getJavaMember().getReturnType();
+        }
+
+        @Override
         protected void defineScope()
         {
             defineScope("Annotated producer method : " + getAnnotated().getJavaMember() +
 "must declare default @Scope annotation");

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1606380&r1=1606379&r2=1606380&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
Sat Jun 28 16:58:29 2014
@@ -26,7 +26,6 @@ import java.util.Iterator;
 import java.util.Set;
 
 import javax.enterprise.inject.Typed;
-import javax.enterprise.inject.spi.Annotated;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -39,7 +38,7 @@ import org.apache.webbeans.util.Generics
  * 
  * @version $Rev$ $Date$
  */
-abstract class AbstractAnnotated implements Annotated
+abstract class AbstractAnnotated implements OwbAnnotated
 {
     /**Base type of an annotated element*/
     private final Type baseType;
@@ -157,12 +156,15 @@ abstract class AbstractAnnotated impleme
         {
             typeClosures = GenericsUtil.getTypeClosure(baseType, getOwningClass());
             Set<String> ignoredInterfaces = webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
-            for (Iterator<Type> i = typeClosures.iterator(); i.hasNext(); )
+            if (!ignoredInterfaces.isEmpty())
             {
-                Type t = i.next();
-                if (t instanceof Class && ignoredInterfaces.contains(((Class<?>)t).getName()))
+                for (Iterator<Type> i = typeClosures.iterator(); i.hasNext(); )
                 {
-                    i.remove();
+                    Type t = i.next();
+                    if (t instanceof Class && ignoredInterfaces.contains(((Class<?>)
t).getName()))
+                    {
+                        i.remove();
+                    }
                 }
             }
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1606380&r1=1606379&r2=1606380&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
Sat Jun 28 16:58:29 2014
@@ -29,10 +29,14 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.interceptor.AroundConstruct;
+import javax.interceptor.AroundInvoke;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.util.ClassUtil;
@@ -262,7 +266,24 @@ class AnnotatedTypeImpl<X>
             {
                 if (ClassUtil.isOverridden(subclassMethod.getJavaMember(), superclassMethod.getJavaMember()))
                 {
-                    return true;
+                    final Set<Annotation> superAnnotations = superclassMethod.getAnnotations();
+                    final Set<Annotation> subAnnotations = subclassMethod.getAnnotations();
+                    // check that's not a deactivation of interceptors/lifecycle
+                    // before checking that's the exact same method
+                    // TODO: same for EJBs?
+                    for (final Annotation a : superAnnotations)
+                    {
+                        final Class<? extends Annotation> annotationType = a.annotationType();
+                        if (annotationType == AroundConstruct.class || annotationType ==
AroundInvoke.class
+                            || annotationType == PostConstruct.class || annotationType ==
PreDestroy.class)
+                        {
+                            if (!subAnnotations.contains(a))
+                            {
+                                return true;
+                            }
+                        }
+                    }
+                    return subAnnotations.equals(superAnnotations);
                 }
             }
             return false;

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/OwbAnnotated.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/OwbAnnotated.java?rev=1606380&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/OwbAnnotated.java
(added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/OwbAnnotated.java
Sat Jun 28 16:58:29 2014
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.portable;
+
+import javax.enterprise.inject.spi.Annotated;
+
+public interface OwbAnnotated extends Annotated
+{
+}

Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1606380&r1=1606379&r2=1606380&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Sat Jun 28 16:58:29 2014
@@ -16,21 +16,10 @@
     License.
 -->
 <suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue" >
-
     <listeners>
-        <!-- Required - avoid randomly mixed test method execution -->
         <listener class-name="org.jboss.cdi.tck.impl.testng.SingleTestClassMethodInterceptor"/>
-        <!-- Optional - intended for debug purpose only -->
-        <listener class-name="org.jboss.cdi.tck.impl.testng.ConfigurationLoggingListener"/>
         <listener class-name="org.jboss.cdi.tck.impl.testng.ProgressLoggingTestListener"/>
-        <!-- Optional - it's recommended to disable the default JUnit XML reporter -->
-        <listener class-name="org.testng.reporters.SuiteHTMLReporter"/>
-        <listener class-name="org.testng.reporters.FailedReporter"/>
-        <listener class-name="org.testng.reporters.XMLReporter"/>
-        <listener class-name="org.testng.reporters.EmailableReporter"/>
-        <listener class-name="org.testng.reporters.TestHTMLReporter"/>
     </listeners>
-
     <test name="JSR-346 TCK">
         <groups>
             <run>
@@ -39,8 +28,7 @@
             </run>
         </groups>
         <classes>
-          <class
-              name="org.jboss.cdi.tck.tests.lookup.clientProxy.unproxyable.finalMethod.StaticFinalMethodTest"
/>
+          <class name="org.jboss.cdi.tck.tests.extensions.beanManager.beanAttributes.CreateBeanAttributesTest"
/>
         </classes>
     </test>
 </suite>



Mime
View raw message