Return-Path: X-Original-To: apmail-openwebbeans-commits-archive@www.apache.org Delivered-To: apmail-openwebbeans-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 26C11E5EA for ; Thu, 24 Jan 2013 08:28:02 +0000 (UTC) Received: (qmail 97975 invoked by uid 500); 24 Jan 2013 08:28:02 -0000 Delivered-To: apmail-openwebbeans-commits-archive@openwebbeans.apache.org Received: (qmail 97945 invoked by uid 500); 24 Jan 2013 08:28:01 -0000 Mailing-List: contact commits-help@openwebbeans.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openwebbeans.apache.org Delivered-To: mailing list commits@openwebbeans.apache.org Received: (qmail 97934 invoked by uid 99); 24 Jan 2013 08:28:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 24 Jan 2013 08:28:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 24 Jan 2013 08:27:51 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E221523889E2; Thu, 24 Jan 2013 08:27:29 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1437893 [2/3] - in /openwebbeans/trunk: webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/ webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbeans-impl/src/main/java/org/apache/webbeans/component/ webbean... Date: Thu, 24 Jan 2013 08:27:27 -0000 To: commits@openwebbeans.apache.org From: arne@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130124082729.E221523889E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -18,14 +18,11 @@ */ package org.apache.webbeans.component.creation; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Set; - import javax.enterprise.inject.spi.AnnotatedMember; import javax.enterprise.inject.spi.AnnotatedType; import org.apache.webbeans.component.AbstractProducerBean; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.InjectionTargetBean; public abstract class AbstractProducerBeanBuilder, P extends AbstractProducerBean> extends AbstractBeanBuilder @@ -33,9 +30,9 @@ public abstract class AbstractProducerBe private InjectionTargetBean parent; - public AbstractProducerBeanBuilder(InjectionTargetBean parent, A annotated) + public AbstractProducerBeanBuilder(InjectionTargetBean parent, A annotated, BeanAttributesImpl beanAttributes) { - super(parent.getWebBeansContext(), annotated); + super(parent.getWebBeansContext(), annotated, beanAttributes); this.parent = parent; } @@ -49,25 +46,10 @@ public abstract class AbstractProducerBe return parent.getWebBeansContext().getAnnotatedElementFactory().getAnnotatedType(superclass); } - protected abstract P createBean(InjectionTargetBean parent, - Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative); + protected abstract P createBean(InjectionTargetBean parent, Class beanClass); @Override - protected P createBean(Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative) + protected P createBean(Class beanClass) { - return createBean(parent, types, qualifiers, scope, name, nullable, beanClass, stereotypes, alternative); + return createBean(parent, beanClass); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -23,6 +23,7 @@ import java.util.logging.Logger; import javax.enterprise.inject.spi.AnnotatedType; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.ManagedBean; import org.apache.webbeans.config.OWBLogConst; import org.apache.webbeans.config.WebBeansContext; @@ -32,9 +33,9 @@ public class AnnotatedTypeBeanBuilder { private final static Logger logger = WebBeansLoggerFacade.getLogger(AnnotatedTypeBeanBuilder.class); - public AnnotatedTypeBeanBuilder(AnnotatedType annotatedType, WebBeansContext context) + public AnnotatedTypeBeanBuilder(AnnotatedType annotatedType, WebBeansContext context, BeanAttributesImpl beanAttributes) { - super(context, annotatedType); + super(context, annotatedType, beanAttributes); } /** Copied: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java (from r1436940, openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java) URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java?p2=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java&p1=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java&r1=1436940&r2=1437893&rev=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java Thu Jan 24 08:27:26 2013 @@ -18,12 +18,8 @@ */ package org.apache.webbeans.component.creation; -import static org.apache.webbeans.util.InjectionExceptionUtil.throwUnproxyableResolutionException; - import java.lang.annotation.Annotation; -import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.util.HashSet; import java.util.Iterator; @@ -38,8 +34,8 @@ import javax.enterprise.inject.spi.Annot import javax.enterprise.inject.spi.AnnotatedField; import javax.enterprise.inject.spi.AnnotatedMember; import javax.enterprise.inject.spi.AnnotatedMethod; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.InjectionPoint; +import javax.enterprise.inject.spi.AnnotatedParameter; +import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.util.Nonbinding; import javax.inject.Named; import javax.inject.Scope; @@ -48,14 +44,16 @@ import org.apache.webbeans.annotation.An import org.apache.webbeans.annotation.AnyLiteral; import org.apache.webbeans.annotation.DefaultLiteral; import org.apache.webbeans.annotation.NamedLiteral; -import org.apache.webbeans.component.OwbBean; +import org.apache.webbeans.component.BeanAttributesImpl; +import org.apache.webbeans.config.OWBLogConst; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.container.ExternalScope; -import org.apache.webbeans.event.EventUtil; import org.apache.webbeans.exception.WebBeansConfigurationException; -import org.apache.webbeans.exception.helper.ViolationMessageBuilder; +import org.apache.webbeans.exception.inject.DefinitionException; +import org.apache.webbeans.logger.WebBeansLoggerFacade; import org.apache.webbeans.util.AnnotationUtil; -import org.apache.webbeans.util.SecurityUtil; +import org.apache.webbeans.util.Asserts; +import org.apache.webbeans.util.ClassUtil; import org.apache.webbeans.util.WebBeansUtil; /** @@ -65,150 +63,77 @@ import org.apache.webbeans.util.WebBeans * * @param bean class info */ -public abstract class AbstractBeanBuilder> +public abstract class BeanAttributesBuilder { - private A annotated; + A annotated; - private WebBeansContext webBeansContext; + WebBeansContext webBeansContext; + + Set types = new HashSet(); + + Set qualifiers = new HashSet(); - private String beanName; + Class scope; - private Class scope; - - private Set apiTypes = new HashSet(); + String name; + + boolean nullable; - private Set qualifiers = new HashSet(); + Set> stereotypes = new HashSet>(); - private Set> stereotypes = new HashSet>(); + boolean alternative; - private Set> injectionPoints = new HashSet>(); + public static BeanAttributesBuilderFactory forContext(WebBeansContext webBeansContext) + { + return new BeanAttributesBuilderFactory(webBeansContext); + } /** * Creates a bean instance. * * @param annotated */ - public AbstractBeanBuilder(WebBeansContext webBeansContext, A annotated) + protected BeanAttributesBuilder(WebBeansContext webBeansContext, A annotated) { this.annotated = annotated; this.webBeansContext = webBeansContext; } - public Class getScope() + public BeanAttributesImpl build() { - return scope; + defineTypes(); + defineStereotypes(); + defineScope(); + defineName(); + defineQualifiers(); + defineNullable(); + defineAlternative(); + return new BeanAttributesImpl(types, qualifiers, scope, name, nullable, stereotypes, alternative); } - public String getName() - { - return beanName; - } - - protected Set> getStereotypes() - { - return stereotypes; - } - - protected Set getApiTypes() - { - return apiTypes; - } - - /** - * {@inheritDoc} - */ - public void checkCreateConditions() - { - //Sub-class can override this - } - - /** - * Check if the given annotatedMethod overrides some previously defined AnnotatedMethods - * from a superclass and remove them if non-private. - * - * - * @param alreadyDefinedMethods the methods already calculated from the superclasses. See - * {@link org.apache.webbeans.intercept.InterceptorUtil#getReverseClassHierarchy(Class)} - * @param annotatedMethod the AnnotatedMethod to check for. - * @return true if a method was overridden and got removed, false otherwise. - */ - protected boolean removeOverriddenMethod(List alreadyDefinedMethods, AnnotatedMethod annotatedMethod) + protected A getAnnotated() { - String methodName = null; - Class[] methodParameterTypes = null; - - Iterator it = alreadyDefinedMethods.iterator(); - while (it.hasNext()) - { - AnnotatedMethod alreadyDefined = it.next(); - - if (alreadyDefined == annotatedMethod) - { - // we don't remove ourself - continue; - } - - if (methodName == null) - { - methodName = annotatedMethod.getJavaMember().getName(); - methodParameterTypes = annotatedMethod.getJavaMember().getParameterTypes(); - } - - // check method overrides - if (!Modifier.isPrivate(alreadyDefined.getJavaMember().getModifiers())) - { - // we only scan non-private methods, as private methods cannot get overridden. - if (methodName.equals(alreadyDefined.getJavaMember().getName()) && - methodParameterTypes.length == alreadyDefined.getJavaMember().getParameterTypes().length) - { - boolean overridden = true; - // same name and param length so we need to check if all the paramTypes are equal. - if (methodParameterTypes.length > 0) - { - Class[] otherParamTypes = alreadyDefined.getJavaMember().getParameterTypes(); - - for (int i = 0; i < otherParamTypes.length; i++) - { - if (!otherParamTypes[i].equals(methodParameterTypes[i])) - { - overridden = false; - break; - } - } - } - - if (overridden) - { - // then we need to remove this method - it.remove(); - return true; - } - } - } - } - - return false; + return annotated; } - - /** * {@inheritDoc} */ - public void defineApiType() + public void defineTypes() { - if (getBeanType().isArray()) + Class baseType = ClassUtil.getClass(annotated.getBaseType()); + if (baseType.isArray()) { // 3.3.1 - apiTypes.add(Object.class); - apiTypes.add(getBeanType()); + types.add(Object.class); + types.add(baseType); } else { Set types = annotated.getTypeClosure(); - apiTypes.addAll(types); + this.types.addAll(types); Set ignored = webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces(); - for (Iterator i = apiTypes.iterator(); i.hasNext();) + for (Iterator i = this.types.iterator(); i.hasNext();) { Type t = i.next(); if (t instanceof Class && ignored.contains(((Class)t).getName())) @@ -219,49 +144,6 @@ public abstract class AbstractBeanBuilde } } - protected void defineName(Annotated annotated, String name) - { - Annotation[] anns = AnnotationUtil.asArray(annotated.getAnnotations()); - Named nameAnnot = null; - boolean isDefault = false; - for (Annotation ann : anns) - { - if (ann.annotationType().equals(Named.class)) - { - nameAnnot = (Named) ann; - break; - } - } - - if (nameAnnot == null) // no @Named - { - // Check for stereottype - if (webBeansContext.getAnnotationManager().hasNamedOnStereoTypes(stereotypes)) - { - isDefault = true; - } - - } - else - // yes @Named - { - if (nameAnnot.value().equals("")) - { - isDefault = true; - } - else - { - beanName = nameAnnot.value(); - } - - } - - if (isDefault) - { - beanName = name; - } - } - /** * {@inheritDoc} */ @@ -274,8 +156,6 @@ public abstract class AbstractBeanBuilde } defineQualifiers(annotated, qualifiedTypes); } - - protected abstract Annotated getSuperAnnotated(); private void defineQualifiers(Annotated annotated, Set> qualifiedTypes) { @@ -312,9 +192,9 @@ public abstract class AbstractBeanBuilde { qualifiedTypes.add(annotation.annotationType()); } - if (annotation.annotationType().equals(Named.class) && beanName != null) + if (annotation.annotationType().equals(Named.class) && name != null) { - qualifiers.add(new NamedLiteral(beanName)); + qualifiers.add(new NamedLiteral(name)); } else { @@ -345,19 +225,6 @@ public abstract class AbstractBeanBuilde } - protected void addInjectionPoint(AnnotatedMember member) - { - injectionPoints.add(member); - } - - /** - * @return the AnnotatedMember of all found injection points before InjectionPoint will be constructed from it. - */ - protected Set> getInjectionPointsAnnotated() - { - return injectionPoints; - } - /** * Returns true if any binding exist * @@ -368,12 +235,15 @@ public abstract class AbstractBeanBuilde return AnnotationUtil.getAnnotation(qualifiers, Any.class) != null; } - public void defineScopeType(String errorMessage) + + protected abstract void defineScope(); + + protected void defineScope(String errorMessage) { - defineScopeType(null, errorMessage); + defineScope(null, errorMessage); } - protected void defineScopeType(Class declaringClass, String errorMessage) + protected void defineScope(Class declaringClass, String errorMessage) { Annotation[] annotations = AnnotationUtil.asArray(annotated.getAnnotations()); boolean found = false; @@ -419,7 +289,7 @@ public abstract class AbstractBeanBuilde { if(pseudo != null) { - throw new WebBeansConfigurationException("Not to define both @Scope and @NormalScope on bean : " + getBeanType().getName()); + throw new WebBeansConfigurationException("Not to define both @Scope and @NormalScope on bean : " + ClassUtil.getClass(annotated.getBaseType()).getName()); } if (found) @@ -447,15 +317,15 @@ public abstract class AbstractBeanBuilde if (!found && declaringClass != null && !hasDeclaredNonInheritedScope(declaringClass)) { - defineScopeType(declaringClass.getSuperclass(), errorMessage); + defineScope(declaringClass.getSuperclass(), errorMessage); } else if (!found) { - defineDefaultScopeType(errorMessage); + defineDefaultScope(errorMessage); } } - private void defineDefaultScopeType(String exceptionMessage) + private void defineDefaultScope(String exceptionMessage) { if (scope == null) { @@ -517,74 +387,62 @@ public abstract class AbstractBeanBuilde return webBeansContext.getAnnotationManager().getDeclaredScopeAnnotation(type) != null; } - /** - * Checks the unproxiable condition. - * @throws WebBeansConfigurationException if bean is not proxied by the container - */ - protected void checkUnproxiableApiType() + protected abstract void defineName(); + + protected void defineName(Annotated annotated, String name) { - //Unproxiable test for NormalScoped beans - if (webBeansContext.getBeanManagerImpl().isNormalScope(scope)) + Annotation[] anns = AnnotationUtil.asArray(annotated.getAnnotations()); + Named nameAnnot = null; + boolean isDefault = false; + for (Annotation ann : anns) { - ViolationMessageBuilder violationMessage = ViolationMessageBuilder.newViolation(); - - Class beanClass = getBeanType(); - - if(!beanClass.isInterface() && beanClass != Object.class) + if (ann.annotationType().equals(Named.class)) { - if(beanClass.isPrimitive()) - { - violationMessage.addLine("It isn't possible to proxy a primitive type (" + beanClass.getName(), ")"); - } - - if(beanClass.isArray()) - { - violationMessage.addLine("It isn't possible to proxy an array type (", beanClass.getName(), ")"); - } + nameAnnot = (Named) ann; + break; + } + } - if(!violationMessage.containsViolation()) - { - if (Modifier.isFinal(beanClass.getModifiers())) - { - violationMessage.addLine(beanClass.getName(), " is a final class! CDI doesn't allow to proxy that."); - } + if (nameAnnot == null) // no @Named + { + // Check for stereottype + if (webBeansContext.getAnnotationManager().hasNamedOnStereoTypes(stereotypes)) + { + isDefault = true; + } - Method[] methods = SecurityUtil.doPrivilegedGetDeclaredMethods(beanClass); - for (Method m : methods) - { - int modifiers = m.getModifiers(); - if (Modifier.isFinal(modifiers) && !Modifier.isPrivate(modifiers) && - !m.isSynthetic() && !m.isBridge()) - { - violationMessage.addLine(beanClass.getName(), " has final method "+ m + " CDI doesn't allow to proxy that."); - } - } + } + else + // yes @Named + { + if (nameAnnot.value().equals("")) + { + isDefault = true; + } + else + { + this.name = nameAnnot.value(); + } - Constructor cons = webBeansContext.getWebBeansUtil().getNoArgConstructor(beanClass); - if (cons == null) - { - violationMessage.addLine(beanClass.getName(), " has no explicit no-arg constructor!", - "A public or protected constructor without args is required!"); - } - else if (Modifier.isPrivate(cons.getModifiers())) - { - violationMessage.addLine(beanClass.getName(), " has a >private< no-arg constructor! CDI doesn't allow to proxy that."); - } - } + } - //Throw Exception - if(violationMessage.containsViolation()) - { - throwUnproxyableResolutionException(violationMessage); - } - } + if (isDefault) + { + this.name = name; } } + + protected abstract Annotated getSuperAnnotated(); + + public void defineNullable() + { + nullable = false; + } /** * {@inheritDoc} */ - public void defineStereoTypes() + public void defineStereotypes() { Annotation[] anns = AnnotationUtil.asArray(annotated.getAnnotations()); final AnnotationManager annotationManager = webBeansContext.getAnnotationManager(); @@ -599,70 +457,208 @@ public abstract class AbstractBeanBuilde } } } + + public void defineAlternative() + { + alternative = false; + } + + public static class BeanAttributesBuilderFactory + { + private WebBeansContext webBeansContext; + + private BeanAttributesBuilderFactory(WebBeansContext webBeansContext) + { + Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null"); + this.webBeansContext = webBeansContext; + } + + public BeanAttributesBuilder> newBeanAttibutes(AnnotatedType annotatedType) + { + return new AnnotatedTypeBeanAttributesBuilder(webBeansContext, annotatedType); + } + + public BeanAttributesBuilder> newBeanAttibutes(AnnotatedField annotatedField) + { + return new AnnotatedFieldBeanAttributesBuilder(webBeansContext, annotatedField); + } + + public BeanAttributesBuilder> newBeanAttibutes(AnnotatedMethod annotatedMethod) + { + return new AnnotatedMethodBeanAttributesBuilder(webBeansContext, annotatedMethod); + } + } - protected void addFieldInjectionPointMetaData(OwbBean bean, AnnotatedField annotField) + private static class AnnotatedTypeBeanAttributesBuilder extends BeanAttributesBuilder> { - InjectionPoint injectionPoint = webBeansContext.getInjectionPointFactory().getFieldInjectionPointData(bean, annotField); - if (injectionPoint != null) + + public AnnotatedTypeBeanAttributesBuilder(WebBeansContext webBeansContext, AnnotatedType annotated) + { + super(webBeansContext, annotated); + } + + @Override + protected void defineScope() { - addImplicitComponentForInjectionPoint(injectionPoint); - bean.addInjectionPoint(injectionPoint); + defineScope(getAnnotated().getJavaClass(), WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_MB_IMPL) + getAnnotated().getJavaClass().getName() + + WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_SAME_SCOPE)); + } + + @Override + protected void defineName() + { + if (getAnnotated().isAnnotationPresent(Specializes.class)) + { + AnnotatedType superAnnotated = getSuperAnnotated(); + defineName(superAnnotated, WebBeansUtil.getManagedBeanDefaultName(superAnnotated.getJavaClass().getSimpleName())); + } + if (name == null) + { + defineName(getAnnotated(), WebBeansUtil.getManagedBeanDefaultName(getAnnotated().getJavaClass().getSimpleName())); + } + else + { + // TODO XXX We have to check stereotypes here, too + if (getAnnotated().getJavaClass().isAnnotationPresent(Named.class)) + { + throw new DefinitionException("@Specialized Class : " + getAnnotated().getJavaClass().getName() + + " may not explicitly declare a bean name"); + } + } + } + + @Override + protected AnnotatedType getSuperAnnotated() + { + Class superclass = getAnnotated().getJavaClass().getSuperclass(); + if (superclass == null) + { + return null; + } + return webBeansContext.getAnnotatedElementFactory().newAnnotatedType(superclass); } } - protected void addMethodInjectionPointMetaData(OwbBean bean, AnnotatedMethod method) + private static class AnnotatedFieldBeanAttributesBuilder extends AnnotatedMemberBeanAttributesBuilder> { - List methodInjectionPoints = webBeansContext.getInjectionPointFactory().getMethodInjectionPointData(bean, method); - for (InjectionPoint injectionPoint : methodInjectionPoints) + + protected AnnotatedFieldBeanAttributesBuilder(WebBeansContext webBeansContext, AnnotatedField annotated) + { + super(webBeansContext, annotated); + } + + @Override + protected void defineScope() + { + defineScope("Annotated producer field: " + getAnnotated().getJavaMember() + "must declare default @Scope annotation"); + } + + @Override + protected void defineName() { - addImplicitComponentForInjectionPoint(injectionPoint); - bean.addInjectionPoint(injectionPoint); + defineName(getAnnotated(), WebBeansUtil.getProducerDefaultName(getAnnotated().getJavaMember().getName())); + } + + @Override + protected AnnotatedField getSuperAnnotated() + { + AnnotatedField thisField = getAnnotated(); + for (AnnotatedField superField: getSuperType().getFields()) + { + if (thisField.getJavaMember().getName().equals(superField.getJavaMember().getName()) + && thisField.getBaseType().equals(superField.getBaseType())) + { + return superField; + } + } + return null; } } - protected void addImplicitComponentForInjectionPoint(InjectionPoint injectionPoint) + private static class AnnotatedMethodBeanAttributesBuilder extends AnnotatedMemberBeanAttributesBuilder> { - if(!WebBeansUtil.checkObtainsInjectionPointConditions(injectionPoint)) + + protected AnnotatedMethodBeanAttributesBuilder(WebBeansContext webBeansContext, AnnotatedMethod annotated) { - EventUtil.checkObservableInjectionPointConditions(injectionPoint); - } - } + super(webBeansContext, annotated); + } - protected abstract B createBean(Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class returnType, - Set> stereotypes, - boolean alternative); + @Override + protected void defineScope() + { + defineScope("Annotated producer method : " + getAnnotated().getJavaMember() + "must declare default @Scope annotation"); + } - /** - * {@inheritDoc} - */ - public B getBean() - { - B bean = createBean(apiTypes, qualifiers, getScope(), beanName, false, getBeanType(), stereotypes, false); - for (Iterator> memberIterator = injectionPoints.iterator(); memberIterator.hasNext();) + @Override + protected void defineName() { - AnnotatedMember member = memberIterator.next(); - if (member instanceof AnnotatedField) + if (getAnnotated().isAnnotationPresent(Specializes.class)) { - addFieldInjectionPointMetaData((OwbBean)bean, (AnnotatedField) member); + AnnotatedMethod superAnnotated = getSuperAnnotated(); + defineName(superAnnotated, WebBeansUtil.getProducerDefaultName(superAnnotated.getJavaMember().getName())); } - else if (member instanceof AnnotatedMethod) + if (name == null) { - addMethodInjectionPointMetaData((OwbBean)bean, (AnnotatedMethod) member); + defineName(getAnnotated(), WebBeansUtil.getProducerDefaultName(getAnnotated().getJavaMember().getName())); + } + else + { + // TODO XXX We have to check stereotypes here, too + if (getAnnotated().isAnnotationPresent(Named.class)) + { + throw new DefinitionException("@Specialized Producer method : " + getAnnotated().getJavaMember().getName() + + " may not explicitly declare a bean name"); + } } } - return bean; + @Override + protected AnnotatedMethod getSuperAnnotated() + { + AnnotatedMethod thisMethod = getAnnotated(); + for (AnnotatedMethod superMethod: getSuperType().getMethods()) + { + List> thisParameters = thisMethod.getParameters(); + if (thisMethod.getJavaMember().getName().equals(superMethod.getJavaMember().getName()) + && thisMethod.getBaseType().equals(superMethod.getBaseType()) + && thisParameters.size() == superMethod.getParameters().size()) + { + List> superParameters = (List>)(List)superMethod.getParameters(); + boolean match = true; + for (int i = 0; i < thisParameters.size(); i++) + { + if (!thisParameters.get(i).getBaseType().equals(superParameters.get(i).getBaseType())) + { + match = false; + break; + } + } + if (match) + { + return superMethod; + } + } + } + return null; + } } - protected A getAnnotated() + private abstract static class AnnotatedMemberBeanAttributesBuilder> extends BeanAttributesBuilder { - return annotated; + + protected AnnotatedMemberBeanAttributesBuilder(WebBeansContext webBeansContext, A annotated) + { + super(webBeansContext, annotated); + } + + protected AnnotatedType getSuperType() + { + Class superclass = getAnnotated().getDeclaringType().getJavaClass().getSuperclass(); + if (superclass == null) + { + return null; + } + return webBeansContext.getAnnotatedElementFactory().getAnnotatedType(superclass); + } } - - protected abstract Class getBeanType(); } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -24,10 +24,10 @@ import javax.enterprise.inject.spi.Inter import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import java.lang.reflect.Type; import java.util.Map; import java.util.Set; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.CdiInterceptorBean; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.exception.WebBeansConfigurationException; @@ -41,9 +41,9 @@ public class CdiInterceptorBeanBuilder interceptorBindings; - public CdiInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType) + public CdiInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); } public void defineCdiInterceptorRules() @@ -71,8 +71,8 @@ public class CdiInterceptorBeanBuilder createBean(Set types, Class beanClass, boolean enabled, Map interceptionMethods) + protected CdiInterceptorBean createBean(Class beanClass, boolean enabled, Map interceptionMethods) { - return new CdiInterceptorBean(webBeansContext, getAnnotated(), types, beanClass, interceptorBindings, enabled, interceptionMethods); + return new CdiInterceptorBean(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptorBindings, enabled, interceptionMethods); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -41,6 +41,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.DecoratorBean; import org.apache.webbeans.component.WebBeansType; import org.apache.webbeans.config.OWBLogConst; @@ -80,9 +81,10 @@ public class DecoratorBeanBuilder ext private final Set ignoredDecoratorInterfaces; - public DecoratorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType) + public DecoratorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); + decoratedTypes = new HashSet(beanAttributes.getTypes()); ignoredDecoratorInterfaces = getIgnoredDecoratorInterfaces(); } @@ -128,7 +130,7 @@ public class DecoratorBeanBuilder ext protected void checkDecoratorConditions() { - if(getScope() != Dependent.class) + if(getBeanAttributes().getScope() != Dependent.class) { if(logger.isLoggable(Level.WARNING)) { @@ -136,7 +138,7 @@ public class DecoratorBeanBuilder ext } } - if(getName() != null) + if(getBeanAttributes().getName() != null) { if(logger.isLoggable(Level.WARNING)) { @@ -178,12 +180,8 @@ public class DecoratorBeanBuilder ext public void defineDecoratorRules() { - defineScopeType(WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_MB_IMPL) + getBeanType() + - WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_SAME_SCOPE)); - checkDecoratorConditions(); - defineApiType(); defineConstructor(); defineInjectedMethods(); defineInjectedFields(); @@ -193,7 +191,6 @@ public class DecoratorBeanBuilder ext private void defineDecoratedTypes() { - decoratedTypes = new HashSet(getApiTypes()); Class beanClass = getBeanType(); // determine a safe Type for for a later BeanManager.getReference(...) @@ -300,10 +297,10 @@ public class DecoratorBeanBuilder ext } @Override - protected InjectionTarget buildInjectionTarget(Set types, Set qualifiers, AnnotatedType annotatedType, Set points, + protected InjectionTarget buildInjectionTarget(AnnotatedType annotatedType, Set points, WebBeansContext webBeansContext, List> postConstructMethods, List> preDestroyMethods) { - InjectionTarget injectionTarget = super.buildInjectionTarget(types, qualifiers, annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods); + InjectionTarget injectionTarget = super.buildInjectionTarget(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods); if (Modifier.isAbstract(annotatedType.getJavaClass().getModifiers())) { @@ -313,18 +310,9 @@ public class DecoratorBeanBuilder ext } @Override - protected DecoratorBean createBean(Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative, - boolean enabled) + protected DecoratorBean createBean(Class beanClass, boolean enabled) { - DecoratorBean decorator = new DecoratorBean(webBeansContext, WebBeansType.MANAGED, getAnnotated(), types, qualifiers, - scope, beanClass, stereotypes); + DecoratorBean decorator = new DecoratorBean(webBeansContext, WebBeansType.MANAGED, getAnnotated(), getBeanAttributes(), beanClass); addConstructorInjectionPointMetaData(decorator); decorator.setEnabled(enabled); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -20,13 +20,12 @@ package org.apache.webbeans.component.cr import java.lang.reflect.Method; -import java.lang.reflect.Type; import java.util.Map; -import java.util.Set; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.InterceptionType; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.EjbInterceptorBean; import org.apache.webbeans.config.WebBeansContext; @@ -36,9 +35,9 @@ import org.apache.webbeans.config.WebBea public class EjbInterceptorBeanBuilder extends InterceptorBeanBuilder> { - public EjbInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType) + public EjbInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); } public void defineEjbInterceptorRules() @@ -54,8 +53,8 @@ public class EjbInterceptorBeanBuilder createBean(Set types, Class beanClass, boolean enabled, Map interceptionMethods) + protected EjbInterceptorBean createBean(Class beanClass, boolean enabled, Map interceptionMethods) { - return new EjbInterceptorBean(webBeansContext, getAnnotated(), types, beanClass, interceptionMethods); + return new EjbInterceptorBean(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptionMethods); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -37,7 +37,9 @@ public class ExtensionBeanBuilder ext public ExtensionBeanBuilder(WebBeansContext webBeansContext, Class type) { - super(webBeansContext, webBeansContext.getAnnotatedElementFactory().newAnnotatedType(type)); + super(webBeansContext, + webBeansContext.getAnnotatedElementFactory().newAnnotatedType(type), + BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(webBeansContext.getAnnotatedElementFactory().getAnnotatedType(type)).build()); } protected InjectionTarget buildInjectionTarget(Set types, @@ -52,15 +54,7 @@ public class ExtensionBeanBuilder ext } @Override - protected ExtensionBean createBean(Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative, - boolean enabled) + protected ExtensionBean createBean(Class beanClass, boolean enabled) { return new ExtensionBean(webBeansContext, beanClass); } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -20,7 +20,6 @@ package org.apache.webbeans.component.cr import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.AnnotatedConstructor; import javax.enterprise.inject.spi.AnnotatedMethod; @@ -35,13 +34,13 @@ import javax.interceptor.InvocationConte import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.InterceptorBean; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.exception.WebBeansConfigurationException; @@ -64,9 +63,9 @@ public abstract class InterceptorBeanBui private Map interceptionMethods; - protected InterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType) + protected InterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); ejbPlugin = webBeansContext.getPluginLoader().getEjbLCAPlugin(); if (ejbPlugin != null) { @@ -80,13 +79,6 @@ public abstract class InterceptorBeanBui } } - @Override - public Class getScope() - { - // Interceptors are always Dependent scoped - return Dependent.class; - } - public void defineConstructor() { constructor = getBeanConstructor(); @@ -137,7 +129,6 @@ public abstract class InterceptorBeanBui protected void defineInterceptorRules() { - defineApiType(); defineConstructor(); defineInterceptorMethods(); defineInjectedMethods(); @@ -363,23 +354,14 @@ public abstract class InterceptorBeanBui } } - protected abstract B createBean(Set types, - Class beanClass, + protected abstract B createBean(Class beanClass, boolean enabled, Map interceptionMethods); @Override - protected B createBean(Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative, - boolean enabled) + protected B createBean(Class beanClass, boolean enabled) { - B bean = createBean(types, beanClass, enabled, interceptionMethods); + B bean = createBean(beanClass, enabled, interceptionMethods); addConstructorInjectionPointMetaData(bean); return bean; } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -18,10 +18,7 @@ */ package org.apache.webbeans.component.creation; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; import java.util.List; -import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -30,12 +27,11 @@ import javax.enterprise.inject.spi.Annot import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.InjectionPoint; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.ManagedBean; import org.apache.webbeans.component.WebBeansType; -import org.apache.webbeans.config.OWBLogConst; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.inject.impl.InjectionPointFactory; -import org.apache.webbeans.logger.WebBeansLoggerFacade; import org.apache.webbeans.util.WebBeansUtil; /** @@ -53,9 +49,9 @@ public class ManagedBeanBuilder annotatedType) + public ManagedBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); } /** @@ -65,7 +61,7 @@ public class ManagedBeanBuilder defineManagedBean(AnnotatedType annotatedType) { - Class clazz = annotatedType.getJavaClass(); - - defineApiType(); - - //Define meta-data - defineStereoTypes(); - //Scope type - defineScopeType(WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_MB_IMPL) + clazz.getName() + - WebBeansLoggerFacade.getTokenString(OWBLogConst.TEXT_SAME_SCOPE)); - //Check for Enabled via Alternative defineEnabled(); checkCreateConditions(); - defineName(); - defineQualifiers(); defineConstructor(); defineInjectedFields(); @@ -144,17 +128,9 @@ public class ManagedBeanBuilder types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative, - boolean enabled) + protected M createBean(Class beanClass, boolean enabled) { - M managedBean = (M)new ManagedBean(webBeansContext, WebBeansType.MANAGED, getAnnotated(), types, qualifiers, scope, name, beanClass, stereotypes, alternative); + M managedBean = (M)new ManagedBean(webBeansContext, WebBeansType.MANAGED, getAnnotated(), getBeanAttributes(), beanClass); managedBean.setEnabled(enabled); return managedBean; } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -18,41 +18,20 @@ */ package org.apache.webbeans.component.creation; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Set; - -import javax.enterprise.inject.Specializes; import javax.enterprise.inject.spi.AnnotatedField; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.component.ProducerFieldBean; -import org.apache.webbeans.util.WebBeansUtil; public class ProducerFieldBeanBuilder> extends AbstractProducerBeanBuilder, P> { - public ProducerFieldBeanBuilder(InjectionTargetBean owner, AnnotatedField annotated) + public ProducerFieldBeanBuilder(InjectionTargetBean owner, AnnotatedField annotated, BeanAttributesImpl beanAttributes) { - super(owner, annotated); + super(owner, annotated, beanAttributes); } - /** - * {@inheritDoc} - */ - public void defineName() - { - if (getAnnotated().isAnnotationPresent(Specializes.class)) - { - AnnotatedField superAnnotated = getSuperAnnotated(); - defineName(superAnnotated, WebBeansUtil.getProducerDefaultName(superAnnotated.getJavaMember().getName())); - } - if (getName() == null) - { - defineName(getAnnotated(), WebBeansUtil.getProducerDefaultName(getAnnotated().getJavaMember().getName())); - } - } - @Override protected Class getBeanType() { @@ -74,16 +53,8 @@ public class ProducerFieldBeanBuilder owner, - Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative) + protected P createBean(InjectionTargetBean owner, Class beanClass) { - return (P) new ProducerFieldBean(owner, types, qualifiers, scope, name, nullable, beanClass, stereotypes, alternative); + return (P) new ProducerFieldBean(owner, getBeanAttributes(), beanClass); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -18,35 +18,29 @@ */ package org.apache.webbeans.component.creation; -import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Set; import javax.enterprise.inject.Produces; -import javax.enterprise.inject.Specializes; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedParameter; -import javax.inject.Named; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.component.ProducerMethodBean; import org.apache.webbeans.exception.WebBeansConfigurationException; -import org.apache.webbeans.exception.inject.DefinitionException; import org.apache.webbeans.util.AnnotationUtil; import org.apache.webbeans.util.ClassUtil; -import org.apache.webbeans.util.WebBeansUtil; public class ProducerMethodBeanBuilder extends AbstractProducerBeanBuilder, ProducerMethodBean> { private boolean specialized; - public ProducerMethodBeanBuilder(InjectionTargetBean parent, AnnotatedMethod annotatedMethod) + public ProducerMethodBeanBuilder(InjectionTargetBean parent, AnnotatedMethod annotatedMethod, BeanAttributesImpl beanAttributes) { - super(parent, annotatedMethod); + super(parent, annotatedMethod, beanAttributes); } public void configureProducerSpecialization(ProducerMethodBean bean, AnnotatedMethod annotatedMethod) @@ -89,32 +83,6 @@ public class ProducerMethodBeanBuilder superAnnotated = getSuperAnnotated(); - defineName(superAnnotated, WebBeansUtil.getProducerDefaultName(superAnnotated.getJavaMember().getName())); - } - if (getName() == null) - { - defineName(getAnnotated(), WebBeansUtil.getProducerDefaultName(getAnnotated().getJavaMember().getName())); - } - else - { - // TODO XXX We have to check stereotypes here, too - if (getAnnotated().isAnnotationPresent(Named.class)) - { - throw new DefinitionException("@Specialized Producer method : " + getAnnotated().getJavaMember().getName() - + " may not explicitly declare a bean name"); - } - } - } - protected AnnotatedMethod getSuperAnnotated() { AnnotatedMethod thisMethod = getAnnotated(); @@ -151,17 +119,9 @@ public class ProducerMethodBeanBuilder createBean(InjectionTargetBean parent, - Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative) + protected ProducerMethodBean createBean(InjectionTargetBean parent, Class beanClass) { - ProducerMethodBean producerMethodBean = new ProducerMethodBean(parent, types, qualifiers, scope, name, nullable, beanClass, stereotypes, alternative); + ProducerMethodBean producerMethodBean = new ProducerMethodBean(parent, getBeanAttributes(), beanClass); producerMethodBean.setSpecializedBean(specialized); return producerMethodBean; } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -19,11 +19,10 @@ package org.apache.webbeans.component.creation; import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Set; import javax.enterprise.inject.spi.AnnotatedField; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.component.ResourceBean; import org.apache.webbeans.spi.api.ResourceReference; @@ -33,23 +32,15 @@ public class ResourceBeanBuilder resourceRef; - public ResourceBeanBuilder(InjectionTargetBean parent, ResourceReference resourceRef, AnnotatedField annotatedField) + public ResourceBeanBuilder(InjectionTargetBean parent, ResourceReference resourceRef, AnnotatedField annotatedField, BeanAttributesImpl beanAttributes) { - super(parent, annotatedField); + super(parent, annotatedField, beanAttributes); this.resourceRef = resourceRef; } @Override - protected ResourceBean createBean(InjectionTargetBean owner, - Set types, - Set qualifiers, - Class scope, - String name, - boolean nullable, - Class beanClass, - Set> stereotypes, - boolean alternative) + protected ResourceBean createBean(InjectionTargetBean owner, Class beanClass) { - return new ResourceBean(owner, resourceRef, types, qualifiers, scope, name, nullable, beanClass, stereotypes, alternative); + return new ResourceBean(owner, resourceRef, getBeanAttributes(), beanClass); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java Thu Jan 24 08:27:26 2013 @@ -20,13 +20,12 @@ package org.apache.webbeans.component.cr import java.lang.reflect.Method; -import java.lang.reflect.Type; import java.util.Map; -import java.util.Set; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.InterceptionType; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.SelfInterceptorBean; import org.apache.webbeans.config.WebBeansContext; @@ -37,9 +36,9 @@ public class SelfInterceptorBeanBuilder< { private boolean enabled = false; - public SelfInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType) + public SelfInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType annotatedType, BeanAttributesImpl beanAttributes) { - super(webBeansContext, annotatedType); + super(webBeansContext, annotatedType, beanAttributes); } public void defineSelfInterceptorRules() @@ -50,7 +49,6 @@ public class SelfInterceptorBeanBuilder< // we do NOT invoke defineInterceptorRules() ! - defineApiType(); enabled = defineInterceptorMethods(); } @@ -60,8 +58,8 @@ public class SelfInterceptorBeanBuilder< } @Override - protected SelfInterceptorBean createBean(Set types, Class beanClass, boolean enabled, Map interceptionMethods) + protected SelfInterceptorBean createBean(Class beanClass, boolean enabled, Map interceptionMethods) { - return new SelfInterceptorBean(webBeansContext, getAnnotated(), types, beanClass, interceptionMethods); + return new SelfInterceptorBean(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptionMethods); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java Thu Jan 24 08:27:26 2013 @@ -19,7 +19,6 @@ package org.apache.webbeans.component.third; import java.lang.annotation.Annotation; -import java.lang.reflect.Type; import java.util.Set; import javax.enterprise.context.spi.CreationalContext; @@ -28,6 +27,7 @@ import javax.enterprise.inject.spi.Injec import javax.enterprise.inject.spi.PassivationCapable; import org.apache.webbeans.component.AbstractOwbBean; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.WebBeansType; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.inject.AlternativesManager; @@ -40,61 +40,19 @@ public class ThirdpartyBeanImpl exten { super(webBeansContext, WebBeansType.THIRDPARTY, - bean.getTypes(), - bean.getQualifiers(), - bean.getScope(), - bean.getName(), - bean.isNullable(), - bean.getBeanClass(), - bean.getStereotypes(), - bean.isAlternative()); + new BeanAttributesImpl(bean), + bean.getBeanClass()); this.bean = bean; } - - @Override - public Set getQualifiers() - { - - return bean.getQualifiers(); - } @Override public Set getInjectionPoints() { - return bean.getInjectionPoints(); } - @Override - public String getName() - { - - return bean.getName(); - } - - @Override - public Class getScope() - { - - return bean.getScope(); - } - - @Override - public Set getTypes() - { - - return bean.getTypes(); - } - - @Override - public boolean isNullable() - { - - return bean.isNullable(); - } - public T create(CreationalContext context) { @@ -107,7 +65,6 @@ public class ThirdpartyBeanImpl exten } - /* (non-Javadoc) * @see org.apache.webbeans.component.AbstractBean#getId() */ @@ -138,15 +95,9 @@ public class ThirdpartyBeanImpl exten } @Override - public Set> getStereotypes() - { - return bean.getStereotypes(); - } - - @Override public boolean isAlternative() { - boolean alternative = bean.isAlternative(); + boolean alternative = super.isAlternative(); if(alternative) { AlternativesManager manager = getWebBeansContext().getAlternativesManager(); 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=1437893&r1=1437892&r2=1437893&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 Thu Jan 24 08:27:26 2013 @@ -49,6 +49,7 @@ import javax.enterprise.inject.spi.Proce import javax.enterprise.inject.spi.Producer; import org.apache.webbeans.annotation.AnnotationManager; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.DecoratorBean; import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.component.AbstractProducerBean; @@ -59,6 +60,7 @@ import org.apache.webbeans.component.Man import org.apache.webbeans.component.OwbBean; import org.apache.webbeans.component.ProducerFieldBean; import org.apache.webbeans.component.ProducerMethodBean; +import org.apache.webbeans.component.creation.BeanAttributesBuilder; import org.apache.webbeans.component.creation.CdiInterceptorBeanBuilder; import org.apache.webbeans.component.creation.DecoratorBeanBuilder; import org.apache.webbeans.component.creation.ManagedBeanBuilder; @@ -822,8 +824,10 @@ public class BeansDeployer { //Check conditions webBeansContext.getWebBeansUtil().checkManagedBeanCondition(clazz); + + BeanAttributesImpl beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build(); - ManagedBeanBuilder> managedBeanCreator = new ManagedBeanBuilder>(webBeansContext, annotatedType); + ManagedBeanBuilder> managedBeanCreator = new ManagedBeanBuilder>(webBeansContext, annotatedType, beanAttributes); InjectionTargetBean bean; GProcessInjectionTarget processInjectionTarget = null; @@ -833,7 +837,7 @@ public class BeansDeployer { logger.log(Level.FINE, "Found Managed Bean Decorator with class name : [{0}]", annotatedType.getJavaClass().getName()); } - DecoratorBeanBuilder dbb = new DecoratorBeanBuilder(webBeansContext, annotatedType); + DecoratorBeanBuilder dbb = new DecoratorBeanBuilder(webBeansContext, annotatedType, beanAttributes); if (dbb.isDecoratorEnabled()) { dbb.defineDecoratorRules(); @@ -853,7 +857,7 @@ public class BeansDeployer logger.log(Level.FINE, "Found Managed Bean Interceptor with class name : [{0}]", annotatedType.getJavaClass().getName()); } - CdiInterceptorBeanBuilder ibb = new CdiInterceptorBeanBuilder(webBeansContext, annotatedType); + CdiInterceptorBeanBuilder ibb = new CdiInterceptorBeanBuilder(webBeansContext, annotatedType, beanAttributes); if (ibb.isInterceptorEnabled()) { ibb.defineCdiInterceptorRules(); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java Thu Jan 24 08:27:26 2013 @@ -39,6 +39,7 @@ import javax.enterprise.inject.spi.Injec import org.apache.webbeans.annotation.AnyLiteral; import org.apache.webbeans.annotation.DefaultLiteral; import org.apache.webbeans.component.AbstractOwbBean; +import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.component.OwbBean; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.exception.WebBeansConfigurationException; @@ -172,17 +173,7 @@ public class InjectionResolver { if (qualifiers.length == 1 && qualifiers[0].annotationType().equals(New.class)) { - New newQualifier = (New) qualifiers[0]; - - if (newQualifier.value() == New.class) - { - beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent(clazz, type)); - } - else - { - beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent(newQualifier.value(), null)); - } - + createNewBean(injectionPoint, type, qualifiers, beanSet); } } @@ -247,16 +238,7 @@ public class InjectionResolver { if (qualifiers.length == 1 && qualifiers[0].annotationType().equals(New.class)) { - New newQualifier = (New) qualifiers[0]; - - if (newQualifier.value() == New.class) - { - beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent(clazz, type)); - } - else - { - beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent(newQualifier.value(), null)); - } + createNewBean(injectionPoint, type, qualifiers, beanSet); } else { @@ -267,6 +249,42 @@ public class InjectionResolver return resolve(beanSet); } + private void createNewBean(InjectionPoint injectionPoint, Type type, Annotation[] qualifiers, Set> beanSet) + { + New newQualifier = (New) qualifiers[0]; + Class newType; + if (newQualifier.value() == New.class) + { + newType = ClassUtil.getClass(type); + } + else + { + newType = newQualifier.value(); + } + Set> beans = implResolveByType(newType, injectionPoint.getBean().getBeanClass(), new AnyLiteral()); + if (beans.isEmpty()) + { + beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent(newType)); + } + else + { + // we just need the bean for the injection points. So when we find an InjectionTargetBean, we can just take it. + for (Bean bean: beans) + { + if (bean instanceof InjectionTargetBean) + { + beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent((OwbBean)bean, (Class)newType)); + break; + } + } + if (beanSet.isEmpty()) + { + //Hmm, no InjectionTargetBean available, then we have to create the injection points on our own + beanSet.add(webBeansContext.getWebBeansUtil().createNewComponent((Class)newType)); + } + } + } + private boolean isInstanceOrEventInjection(Type type) { Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java Thu Jan 24 08:27:26 2013 @@ -49,7 +49,9 @@ import java.util.Set; import java.util.logging.Logger; import org.apache.webbeans.annotation.AnnotationManager; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.SelfInterceptorBean; +import org.apache.webbeans.component.creation.BeanAttributesBuilder; import org.apache.webbeans.component.creation.SelfInterceptorBeanBuilder; import org.apache.webbeans.config.OpenWebBeansConfiguration; import org.apache.webbeans.config.WebBeansContext; @@ -240,7 +242,8 @@ public class InterceptorResolutionServic */ private SelfInterceptorBean resolveSelfInterceptorBean(AnnotatedType annotatedType) { - SelfInterceptorBeanBuilder sibb = new SelfInterceptorBeanBuilder(webBeansContext, annotatedType); + BeanAttributesImpl beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build(); + SelfInterceptorBeanBuildersibb = new SelfInterceptorBeanBuilder(webBeansContext, annotatedType, beanAttributes); sibb.defineSelfInterceptorRules(); if (!sibb.isInterceptorEnabled()) { Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java?rev=1437893&r1=1437892&r2=1437893&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java Thu Jan 24 08:27:26 2013 @@ -34,7 +34,9 @@ import javax.enterprise.inject.spi.Inter import javax.enterprise.inject.spi.Interceptor; import javax.enterprise.inject.spi.PassivationCapable; +import org.apache.webbeans.component.BeanAttributesImpl; import org.apache.webbeans.component.OwbBean; +import org.apache.webbeans.component.creation.BeanAttributesBuilder; import org.apache.webbeans.component.creation.EjbInterceptorBeanBuilder; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.container.BeanManagerImpl; @@ -120,7 +122,8 @@ public class InterceptorsManager if (interceptor == null) { AnnotatedType annotatedType = webBeansContext.getBeanManagerImpl().createAnnotatedType(interceptorClass); - EjbInterceptorBeanBuilder buildr = new EjbInterceptorBeanBuilder(webBeansContext, annotatedType); + BeanAttributesImpl beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build(); + EjbInterceptorBeanBuilder buildr = new EjbInterceptorBeanBuilder(webBeansContext, annotatedType, beanAttributes); buildr.defineEjbInterceptorRules(); Interceptor i = buildr.getBean(); interceptor = (Interceptor) ejbInterceptors.putIfAbsent(interceptorClass, i);