Author: arne
Date: Sun Jan 6 17:18:10 2013
New Revision: 1429557
URL: http://svn.apache.org/viewvc?rev=1429557&view=rev
Log:
OWB-745: Delayed setting of stereotypes
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java?rev=1429557&r1=1429556&r2=1429557&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
Sun Jan 6 17:18:10 2013
@@ -19,7 +19,6 @@
package org.apache.webbeans.annotation;
import org.apache.webbeans.component.AbstractOwbBean;
-import org.apache.webbeans.component.OwbBean;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -52,6 +51,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -119,7 +119,7 @@ public final class AnnotationManager
}
// check for stereotypes _explicitly_ declared on the bean class (not
inherited)
- Annotation[] stereoTypes =
annotationManager.getStereotypeMetaAnnotations(typeAnns);
+ Annotation[] stereoTypes =
annotationManager.getStereotypeMetaAnnotations(typeAnns.toArray(new
Annotation[typeAnns.size()]));
for (Annotation stereoType : stereoTypes)
{
if
(annotationManager.hasInterceptorBindingMetaAnnotation(stereoType.annotationType().getDeclaredAnnotations()))
@@ -408,6 +408,21 @@ public final class AnnotationManager
return clazz.isAnnotationPresent(Stereotype.class);
}
+ public boolean hasStereoTypeMetaAnnotation(Set<Class<? extends
Annotation>> anns)
+ {
+ Asserts.assertNotNull(anns, "anns parameter can not be null");
+
+ for (Class<? extends Annotation> ann : anns)
+ {
+ if (isStereoTypeAnnotation(ann))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
public boolean hasStereoTypeMetaAnnotation(Annotation[] anns)
{
Asserts.assertNotNull(anns, "anns parameter can not be null");
@@ -423,7 +438,7 @@ public final class AnnotationManager
return false;
}
- public Annotation[] getStereotypeMetaAnnotations(Set<Annotation> anns)
+ public Annotation[] getStereotypeMetaAnnotations(Annotation[] anns)
{
Asserts.assertNotNull(anns, "anns parameter can not be null");
List<Annotation> interAnns = new ArrayList<Annotation>();
@@ -453,31 +468,27 @@ public final class AnnotationManager
/**
* Same like {@link #getStereotypeMetaAnnotations(java.util.Set)} but with
an array
*/
- public Annotation[] getStereotypeMetaAnnotations(Annotation[] anns)
+ public Set<Class<? extends Annotation>>
getStereotypeMetaAnnotations(Set<Class<? extends Annotation>> stereotypes)
{
- Asserts.assertNotNull(anns, "anns parameter can not be null");
- List<Annotation> interAnns = new ArrayList<Annotation>();
+ Asserts.assertNotNull(stereotypes, "anns parameter can not be null");
+ Set<Class<? extends Annotation>> interAnns = new HashSet<Class<?
extends Annotation>>();
- for (Annotation ann : anns)
+ for (Class<? extends Annotation> ann : stereotypes)
{
- if (isStereoTypeAnnotation(ann.annotationType()))
+ if (isStereoTypeAnnotation(ann))
{
interAnns.add(ann);
//check for transitive
- Annotation[] transitives =
getTransitiveStereoTypes(ann.annotationType().getDeclaredAnnotations());
+ Annotation[] transitives =
getTransitiveStereoTypes(ann.getDeclaredAnnotations());
for(Annotation transitive : transitives)
{
- interAnns.add(transitive);
+ interAnns.add(transitive.annotationType());
}
}
}
-
- Annotation[] ret = new Annotation[interAnns.size()];
- ret = interAnns.toArray(ret);
-
- return ret;
+ return interAnns;
}
private Annotation[] getTransitiveStereoTypes(Annotation[] anns)
@@ -486,38 +497,19 @@ public final class AnnotationManager
}
/**
- * Returns true if array contains the StereoType meta annotation
- *
- * @return true if array contains the StereoType meta annotation
- */
- public boolean isComponentHasStereoType(OwbBean<?> component)
- {
- Asserts.assertNotNull(component, "component parameter can not be
null");
-
- Set<Annotation> set = component.getOwbStereotypes();
- Annotation[] anns = new Annotation[set.size()];
- anns = set.toArray(anns);
- return hasStereoTypeMetaAnnotation(anns);
- }
-
- /**
* Returns bean stereotypes.
* @param bean bean instance
* @return bean stereotypes
*/
- public Annotation[] getComponentStereoTypes(OwbBean<?> bean)
+ public Set<Class<? extends Annotation>> getStereotypes(Set<Class<? extends
Annotation>> anns)
{
- Asserts.assertNotNull(bean, "bean parameter can not be null");
- if (isComponentHasStereoType(bean))
+ Asserts.assertNotNull(anns, "bean parameter can not be null");
+ if (hasStereoTypeMetaAnnotation(anns))
{
- Set<Annotation> set = bean.getOwbStereotypes();
- Annotation[] anns = new Annotation[set.size()];
- anns = set.toArray(anns);
-
return getStereotypeMetaAnnotations(anns);
}
- return new Annotation[] {};
+ return Collections.<Class<? extends Annotation>>emptySet();
}
/**
@@ -525,13 +517,13 @@ public final class AnnotationManager
* @param bean bean instance
* @return true if name exists
*/
- public boolean hasNamedOnStereoTypes(OwbBean<?> bean)
+ public boolean hasNamedOnStereoTypes(Set<Class<? extends Annotation>>
stereotypes)
{
- Annotation[] types = getComponentStereoTypes(bean);
+ Set<Class<? extends Annotation>> types = getStereotypes(stereotypes);
- for (Annotation ann : types)
+ for (Class<? extends Annotation> ann : types)
{
- if (AnnotationUtil.hasClassAnnotation(ann.annotationType(),
Named.class))
+ if (AnnotationUtil.hasClassAnnotation(ann, Named.class))
{
return true;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=1429557&r1=1429556&r2=1429557&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
Sun Jan 6 17:18:10 2013
@@ -75,11 +75,8 @@ public abstract class AbstractOwbBean<T>
/** Return type of the bean */
protected Class<T> returnType;
- /** Stereotypes of the bean */
- protected Set<Annotation> stereoTypes = new HashSet<Annotation>();
-
/** this is only for public access and will be built from {@link
#stereoTypes} on demand */
- protected Set<Class<? extends Annotation>> stereoTypeClasses = null;
+ protected Set<Class<? extends Annotation>> stereoTypeClasses = new
HashSet<Class<? extends Annotation>>();
/**This bean is specialized or not*/
protected boolean specializedBean;
@@ -393,9 +390,7 @@ public abstract class AbstractOwbBean<T>
*/
public void addStereoType(Annotation stereoType)
{
- stereoTypeClasses = null; // will get rebuilt on the next request
-
- stereoTypes.add(stereoType);
+ stereoTypeClasses.add(stereoType.annotationType());
cachedHashCode = 0;
}
@@ -411,16 +406,6 @@ public abstract class AbstractOwbBean<T>
}
/**
- * Gets the stereotypes.
- *
- * @return stereotypes of the bean
- */
- public Set<Annotation> getOwbStereotypes()
- {
- return stereoTypes;
- }
-
- /**
* Add new qualifier.
*
* @param qualifier new qualifier
@@ -584,17 +569,6 @@ public abstract class AbstractOwbBean<T>
*/
public Set<Class<? extends Annotation>> getStereotypes()
{
- if (stereoTypeClasses == null)
- {
- Set<Class<? extends Annotation>> set = new HashSet<Class<? extends
Annotation>>();
-
- for(Annotation ann : stereoTypes)
- {
- set.add(ann.annotationType());
- }
- stereoTypeClasses = set;
- }
-
return stereoTypeClasses;
}
@@ -737,7 +711,6 @@ public abstract class AbstractOwbBean<T>
result = prime * result + (serializable ? 1231 : 1237);
result = prime * result + (specializedBean ? 1231 : 1237);
result = prime * result + ((stereoTypeClasses == null) ? 0 :
stereoTypeClasses.hashCode());
- result = prime * result + ((stereoTypes == null) ? 0 :
stereoTypes.hashCode());
result = prime * result + ((webBeansType == null) ? 0 :
webBeansType.hashCode());
cachedHashCode = result;
return result;
@@ -856,14 +829,14 @@ public abstract class AbstractOwbBean<T>
{
return false;
}
- if (stereoTypes == null)
+ if (stereoTypeClasses == null)
{
- if (other.stereoTypes != null)
+ if (other.stereoTypeClasses != null)
{
return false;
}
}
- else if (!stereoTypes.equals(other.stereoTypes))
+ else if (!stereoTypeClasses.equals(other.stereoTypeClasses))
{
return false;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java?rev=1429557&r1=1429556&r2=1429557&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
Sun Jan 6 17:18:10 2013
@@ -21,7 +21,6 @@ package org.apache.webbeans.component;
import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
import java.util.List;
-import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.*;
@@ -110,11 +109,6 @@ public interface OwbBean<T> extends Bean
public void addInjectionPoint(InjectionPoint injectionPoint);
/**
- * Gets stereotypes annotations.
- */
- public Set<Annotation> getOwbStereotypes();
-
- /**
* Sets name of the bean.
*
* @param name bean name
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java?rev=1429557&r1=1429556&r2=1429557&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
Sun Jan 6 17:18:10 2013
@@ -74,6 +74,8 @@ public class AbstractBeanCreator<T>
private Set<Annotation> qualifiers = new HashSet<Annotation>();
+ private Set<Class<? extends Annotation>> stereotypes = new HashSet<Class<?
extends Annotation>>();
+
/**
* Creates a bean instance.
*
@@ -135,7 +137,7 @@ public class AbstractBeanCreator<T>
if (nameAnnot == null) // no @Named
{
// Check for stereottype
- if
(webBeansContext.getAnnotationManager().hasNamedOnStereoTypes(getBean()))
+ if
(webBeansContext.getAnnotationManager().hasNamedOnStereoTypes(stereotypes))
{
isDefault = true;
}
@@ -341,12 +343,12 @@ public class AbstractBeanCreator<T>
if (!found)
{
- Set<Class<? extends Annotation>> stereos =
getBean().getStereotypes();
+ Set<Class<? extends Annotation>> stereos = stereotypes;
if (stereos.size() == 0)
{
getBean().setImplScopeType(new DependentScopeLiteral());
- if (allowLazyInit && getBean() instanceof ManagedBean &&
isPurePojoBean(getBean().getWebBeansContext(), getBean().getBeanClass()))
+ if (allowLazyInit && getBean() instanceof ManagedBean &&
isPurePojoBean(webBeansContext, getBean().getBeanClass()))
{
// take the bean as Dependent but we could lazily
initialize it
// because the bean doesn't contains any CDI feature
@@ -356,7 +358,7 @@ public class AbstractBeanCreator<T>
else
{
Annotation defined = null;
- Set<Class<? extends Annotation>> anns =
getBean().getStereotypes();
+ Set<Class<? extends Annotation>> anns = stereotypes;
for (Class<? extends Annotation> stero : anns)
{
boolean containsNormal =
AnnotationUtil.hasMetaAnnotation(stero.getDeclaredAnnotations(),
NormalScope.class);
@@ -460,7 +462,7 @@ public class AbstractBeanCreator<T>
public void defineStereoTypes()
{
Annotation[] anns = AnnotationUtil.asSet(annotated.getAnnotations());
- final AnnotationManager annotationManager =
getBean().getWebBeansContext().getAnnotationManager();
+ final AnnotationManager annotationManager =
webBeansContext.getAnnotationManager();
if (annotationManager.hasStereoTypeMetaAnnotation(anns))
{
Annotation[] steroAnns =
@@ -468,7 +470,7 @@ public class AbstractBeanCreator<T>
for (Annotation stereo : steroAnns)
{
- getBean().addStereoType(stereo);
+ stereotypes.add(stereo.annotationType());
}
}
@@ -485,7 +487,7 @@ public class AbstractBeanCreator<T>
Set<Annotation> inheritedTypes =
inheritedMetaData.getInheritedStereoTypes();
for (Annotation inherited : inheritedTypes)
{
- Set<Class<? extends Annotation>> qualifiers =
getBean().getStereotypes();
+ Set<Class<? extends Annotation>> qualifiers = stereotypes;
boolean found = false;
for (Class<? extends Annotation> existQualifier : qualifiers)
{
@@ -497,7 +499,7 @@ public class AbstractBeanCreator<T>
}
if (!found)
{
- getBean().addStereoType(inherited);
+ stereotypes.add(inherited.annotationType());
}
}
}
@@ -528,6 +530,7 @@ public class AbstractBeanCreator<T>
{
bean.setName(beanName);
bean.getQualifiers().addAll(qualifiers);
+ bean.getStereotypes().addAll(stereotypes);
return bean;
}