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>