You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/05 12:23:30 UTC
svn commit: r1429263 - in /openwebbeans/trunk:
webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/src...
Author: arne
Date: Sat Jan 5 11:23:29 2013
New Revision: 1429263
URL: http://svn.apache.org/viewvc?rev=1429263&view=rev
Log:
OWB-745: Removed DefinitionUtil.defineProducerFields
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java Sat Jan 5 11:23:29 2013
@@ -188,7 +188,7 @@ public final class EjbUtility
final Set<ProducerMethodBean<?>> producerMethodBeans = util.defineProducerMethods(ejbBean, clazz);
- final Set<ProducerFieldBean<?>> producerFieldBeans = util.defineProducerFields(ejbBean, clazz);
+ final Set<ProducerFieldBean<?>> producerFieldBeans = webBeansContext.getAnnotatedTypeUtil().defineProducerFields(ejbBean, annotatedType);
checkProducerMethods(producerMethodBeans, ejbBean);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java Sat Jan 5 11:23:29 2013
@@ -88,15 +88,7 @@ public abstract class AbstractInjecionTa
*/
public Set<ProducerFieldBean<?>> defineProducerFields()
{
- AbstractInjectionTargetBean bean = getBean();
- if(isDefaultMetaDataProvider())
- {
- return bean.getWebBeansContext().getDefinitionUtil().defineProducerFields(bean);
- }
- else
- {
- return bean.getWebBeansContext().getAnnotatedTypeUtil().defineProducerFields(bean, getAnnotatedType());
- }
+ return webBeansContext.getAnnotatedTypeUtil().defineProducerFields(getBean(), getAnnotatedType());
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Sat Jan 5 11:23:29 2013
@@ -24,7 +24,6 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashSet;
@@ -59,16 +58,13 @@ import org.apache.webbeans.component.Ent
import org.apache.webbeans.component.InjectionTargetBean;
import org.apache.webbeans.component.ManagedBean;
import org.apache.webbeans.component.OwbBean;
-import org.apache.webbeans.component.ProducerFieldBean;
import org.apache.webbeans.component.ProducerMethodBean;
-import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
import org.apache.webbeans.container.ExternalScope;
import org.apache.webbeans.decorator.WebBeansDecoratorConfig;
import org.apache.webbeans.event.EventUtil;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.intercept.InterceptorData;
-import org.apache.webbeans.spi.api.ResourceReference;
import org.apache.webbeans.spi.plugins.OpenWebBeansEjbPlugin;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
@@ -110,7 +106,7 @@ public final class DefinitionUtil
removeIgnoredInterfaces(bean);
}
- private static <T> void removeIgnoredInterfaces(AbstractOwbBean<T> bean)
+ public static <T> void removeIgnoredInterfaces(AbstractOwbBean<T> bean)
{
Set<String> ignoredInterfaces = bean.getWebBeansContext().getOpenWebBeansConfiguration().getIgnoredInterfaces();
for (Iterator<Type> i = bean.getTypes().iterator(); i.hasNext(); )
@@ -200,7 +196,7 @@ public final class DefinitionUtil
removeIgnoredInterfaces(producerBean);
}
- private static <T> void defineNormalProducerMethodApi(AbstractProducerBean<T> producerBean, Type type)
+ public static <T> void defineNormalProducerMethodApi(AbstractProducerBean<T> producerBean, Type type)
{
Set<Type> types = producerBean.getTypes();
types.add(Object.class);
@@ -614,55 +610,6 @@ public final class DefinitionUtil
}
/**
- * Defines the set of {@link ProducerFieldBean} components.
- *
- * @param component producer field owner component
- * @return the set of producer field components
- */
- public Set<ProducerFieldBean<?>> defineProducerFields(InjectionTargetBean<?> component)
- {
-
- final Class<?> returnType = component.getReturnType();
-
- return defineProducerFields(component, returnType);
- }
-
- public Set<ProducerFieldBean<?>> defineProducerFields(InjectionTargetBean<?> component, Class<?> returnType)
- {
- final Field[] fields = webBeansContext.getSecurityService().doPrivilegedGetDeclaredFields(returnType);
-
- final Set<ProducerFieldBean<?>> producerFields = new HashSet<ProducerFieldBean<?>>();
-
- for (Field field : fields)
- {
- final Type genericType = field.getGenericType();
-
- // Producer field
- if (AnnotationUtil.hasAnnotation(field.getDeclaredAnnotations(), Produces.class))
- {
- if(ClassUtil.isParametrizedType(genericType))
- {
- if(!ClassUtil.checkParametrizedType((ParameterizedType)genericType))
- {
- throw new WebBeansConfigurationException("Producer field : " + field.getName() + " return type in class : " +
- field.getDeclaringClass().getName() + " can not be Wildcard type or Type variable");
- }
- }
-
- final ProducerFieldBean<?> newComponent = createProducerFieldComponent(field.getType(), field, component);
-
- if (newComponent != null)
- {
- producerFields.add(newComponent);
- }
- }
-
- }
-
- return producerFields;
- }
-
- /**
* Defines the {@link Bean} producer methods. Moreover, it configures the
* producer methods with using the {@link Produces} annotations.
*
@@ -769,62 +716,6 @@ public final class DefinitionUtil
return component;
}
- private <T> ProducerFieldBean<T> createProducerFieldComponent(Class<T> returnType, Field field, InjectionTargetBean<?> parent)
- {
- ProducerFieldBean<T> component = new ProducerFieldBean<T>(parent, returnType);
-
- //Producer field for resource
- Annotation resourceAnnotation = AnnotationUtil.hasOwbInjectableResource(field.getDeclaredAnnotations());
- if(resourceAnnotation != null)
- {
- //Check for valid resource annotation
- //WebBeansUtil.checkForValidResources(field.getDeclaringClass(), field.getType(), field.getName(), field.getDeclaredAnnotations());
- if(!Modifier.isStatic(field.getModifiers()))
- {
- ResourceReference<T,Annotation> resourceRef = new ResourceReference<T, Annotation>(field.getDeclaringClass(), field.getName(),returnType, resourceAnnotation);
-
- //Can not define EL name
- if(field.isAnnotationPresent(Named.class))
- {
- throw new WebBeansConfigurationException("Resource producer field : " + field + " can not define EL name");
- }
-
- ResourceBean<T,Annotation> resourceBean = new ResourceBean(returnType,parent, resourceRef);
-
- defineProducerMethodApiTypes(resourceBean, field.getGenericType() , field.getDeclaredAnnotations());
- defineQualifiers(resourceBean, field.getDeclaredAnnotations());
- resourceBean.setImplScopeType(new DependentScopeLiteral());
- resourceBean.setProducerField(field);
-
- return resourceBean;
- }
- }
-
- component.setProducerField(field);
-
- if (returnType.isPrimitive())
- {
- component.setNullable(false);
- }
-
- defineSerializable(component);
- defineStereoTypes(component, field.getDeclaredAnnotations());
-
- Annotation[] fieldAnns = field.getDeclaredAnnotations();
-
- webBeansContext.getWebBeansUtil().setBeanEnableFlagForProducerBean(parent, component, fieldAnns);
-
- defineProducerMethodApiTypes(component, field.getGenericType(), fieldAnns);
- defineScopeType(component, fieldAnns, "WebBeans producer method : " + field.getName() + " in class " + parent.getReturnType().getName()
- + " must declare default @Scope annotation", false);
- webBeansContext.getWebBeansUtil().checkUnproxiableApiType(component, component.getScope());
- WebBeansUtil.checkProducerGenericType(component,field);
- defineQualifiers(component, fieldAnns);
- defineName(component, fieldAnns, field.getName());
-
- return component;
- }
-
/**
* Configure bean instance interceptor stack.
* @param bean bean instance
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java Sat Jan 5 11:23:29 2013
@@ -167,7 +167,7 @@ public final class ManagedBeanConfigurat
manager.putProducer(producerMethod, new ProducerBeansProducer(producerMethod));
}
- Set<ProducerFieldBean<?>> producerFields = definitionUtil.defineProducerFields(component);
+ Set<ProducerFieldBean<?>> producerFields = webBeansContext.getAnnotatedTypeUtil().defineProducerFields(component, component.getAnnotatedType());
for (ProducerFieldBean<?> producerField : producerFields)
{
// add them one after the other to enable serialization handling et al
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java Sat Jan 5 11:23:29 2013
@@ -116,7 +116,12 @@ public final class AnnotatedElementFacto
{
try
{
- annotatedType = new AnnotatedTypeImpl<X>(webBeansContext, annotatedClass);
+ AnnotatedType<? super X> supertype = null;
+ if (annotatedClass.getSuperclass() != null && !annotatedClass.getSuperclass().equals(Object.class))
+ {
+ supertype = (AnnotatedTypeImpl<? super X>) newAnnotatedType(annotatedClass.getSuperclass());
+ }
+ annotatedType = new AnnotatedTypeImpl<X>(webBeansContext, annotatedClass, (AnnotatedTypeImpl<? super X>) supertype);
AnnotatedType<X> oldType = (AnnotatedType<X>)annotatedTypeCache.putIfAbsent(annotatedClass, annotatedType);
if(oldType != null)
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=1429263&r1=1429262&r2=1429263&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 Jan 5 11:23:29 2013
@@ -24,10 +24,8 @@ import org.apache.webbeans.util.ClassUti
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import javax.enterprise.inject.spi.AnnotatedConstructor;
@@ -44,6 +42,9 @@ import javax.enterprise.inject.spi.Annot
*/
class AnnotatedTypeImpl<X> extends AbstractAnnotated implements AnnotatedType<X>
{
+ /**parent class*/
+ private final AnnotatedType<? super X> supertype;
+
/**Annotated class*/
private final Class<X> annotatedClass;
@@ -61,9 +62,10 @@ class AnnotatedTypeImpl<X> extends Abstr
*
* @param annotatedClass class
*/
- AnnotatedTypeImpl(WebBeansContext webBeansContext, Class<X> annotatedClass)
+ AnnotatedTypeImpl(WebBeansContext webBeansContext, Class<X> annotatedClass, AnnotatedTypeImpl<? super X> supertype)
{
super(webBeansContext, annotatedClass);
+ this.supertype = supertype;
this.annotatedClass = annotatedClass;
setAnnotations(annotatedClass.getDeclaredAnnotations());
@@ -88,32 +90,37 @@ class AnnotatedTypeImpl<X> extends Abstr
}
}
- Class<?> currentClass = annotatedClass;
- List<Method> addedMethods = new ArrayList<Method>();
- do
+ Field[] decFields = getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredFields(annotatedClass);
+ Method[] decMethods = getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredMethods(annotatedClass);
+ for(Field f : decFields)
{
- Field[] decFields = getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredFields(currentClass);
- Method[] decMethods = getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredMethods(currentClass);
- for(Field f : decFields)
+ if (!f.isSynthetic())
{
- if (!f.isSynthetic())
- {
- AnnotatedField<X> af = new AnnotatedFieldImpl<X>(getWebBeansContext(), f, this);
- fields.add(af);
- }
+ AnnotatedField<X> af = new AnnotatedFieldImpl<X>(getWebBeansContext(), f, this);
+ fields.add(af);
}
+ }
- for(Method m : decMethods)
+ for(Method m : decMethods)
+ {
+ if (!m.isSynthetic() && !m.isBridge())
{
- if (!m.isSynthetic() && !m.isBridge() && !ClassUtil.isOverridden(addedMethods, m))
+ AnnotatedMethod<X> am = new AnnotatedMethodImpl<X>(getWebBeansContext(), m,this);
+ methods.add(am);
+ }
+ }
+
+ if (supertype != null)
+ {
+ fields.addAll(supertype.getFields());
+ for (AnnotatedMethod<? super X> method : supertype.getMethods())
+ {
+ if (!isOverridden(method))
{
- AnnotatedMethod<X> am = new AnnotatedMethodImpl<X>(getWebBeansContext(), m,this);
- methods.add(am);
- addedMethods.add(m);
+ methods.add(method);
}
}
- currentClass = currentClass.getSuperclass();
- } while (currentClass != Object.class);
+ }
}
}
@@ -207,4 +214,15 @@ class AnnotatedTypeImpl<X> extends Abstr
return Collections.unmodifiableSet(methods);
}
+ private boolean isOverridden(AnnotatedMethod<? super X> superclassMethod)
+ {
+ for (AnnotatedMethod<? super X> subclassMethod : methods)
+ {
+ if (ClassUtil.isOverridden(subclassMethod.getJavaMember(), superclassMethod.getJavaMember()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Sat Jan 5 11:23:29 2013
@@ -316,14 +316,14 @@ public final class ClassUtil
/**
* Check if the method is already defined in a subclass
- * @param methods
- * @param method
+ * @param subclassMethods
+ * @param superclassMethod
*/
- public static boolean isOverridden(final List<Method> methods, final Method method)
+ public static boolean isOverridden(final List<Method> subclassMethods, final Method superclassMethod)
{
- for (final Method m : methods)
+ for (final Method m : subclassMethods)
{
- if (isOverridden(m, method))
+ if (isOverridden(m, superclassMethod))
{
return true;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java?rev=1429263&r1=1429262&r2=1429263&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java Sat Jan 5 11:23:29 2013
@@ -403,10 +403,14 @@ public final class WebBeansAnnotatedType
Set<AnnotatedField<? super X>> annotatedFields = annotatedType.getFields();
for(AnnotatedField<? super X> annotatedField: annotatedFields)
{
- if(annotatedField.isAnnotationPresent(Produces.class))
+ if(annotatedField.isAnnotationPresent(Produces.class) && annotatedField.getDeclaringType().equals(annotatedType))
{
Type genericType = annotatedField.getBaseType();
+ if(ClassUtil.isTypeVariable(genericType))
+ {
+ throw new WebBeansConfigurationException("Producer annotated field : " + annotatedField + " can not be Wildcard type or Type variable");
+ }
if(ClassUtil.isParametrizedType(genericType))
{
if(!ClassUtil.checkParametrizedType((ParameterizedType)genericType))
@@ -451,18 +455,23 @@ public final class WebBeansAnnotatedType
ProducerFieldBean<X> producerFieldBean = new ProducerFieldBean<X>(bean, (Class<X>)ClassUtil.getClass(annotatedField.getBaseType()));
producerFieldBean.setProducerField(field);
- if (ClassUtil.getClass(annotatedField.getBaseType()).isPrimitive())
+ if (producerFieldBean.getReturnType().isPrimitive())
{
producerFieldBean.setNullable(false);
}
definitionUtil.defineSerializable(producerFieldBean);
definitionUtil.defineStereoTypes(producerFieldBean, anns);
- webBeansContext.getWebBeansUtil().setBeanEnableFlagForProducerBean(bean,
- producerFieldBean,
- anns);
- Set<Type> types = annotatedField.getTypeClosure();
- producerFieldBean.getTypes().addAll(types);
+ webBeansContext.getWebBeansUtil().setBeanEnableFlagForProducerBean(bean, producerFieldBean, anns);
+ if (producerFieldBean.getReturnType().isArray())
+ {
+ producerFieldBean.getTypes().add(Object.class);
+ producerFieldBean.getTypes().add(producerFieldBean.getReturnType());
+ }
+ else
+ {
+ producerFieldBean.getTypes().addAll(annotatedField.getTypeClosure());
+ }
definitionUtil.defineScopeType(producerFieldBean, anns, "Annotated producer field: " + annotatedField + "must declare default @Scope annotation", false);
webBeansContext.getWebBeansUtil().checkUnproxiableApiType(producerFieldBean,
producerFieldBean.getScope());
@@ -488,7 +497,7 @@ public final class WebBeansAnnotatedType
for(AnnotatedMethod<? super X> annotatedMethod: annotatedMethods)
{
- if(annotatedMethod.isAnnotationPresent(Produces.class))
+ if(annotatedMethod.isAnnotationPresent(Produces.class) && annotatedMethod.getDeclaringType().equals(annotatedType))
{
checkProducerMethodForDeployment(annotatedMethod);
boolean specialize = false;