Weld SVN: r6806 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 12:21:47 -0400 (Sat, 24 Jul 2010)
New Revision: 6806
Added:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanProducer.java
Removed:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/ProducerInjectionTarget.java
Log:
reimplement GenericBeanExtension around ProcessProducer
Added: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanProducer.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanProducer.java (rev 0)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanProducer.java 2010-07-24 16:21:47 UTC (rev 6806)
@@ -0,0 +1,53 @@
+package org.jboss.weld.extensions.bean.generic;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.UnsatisfiedResolutionException;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Producer;
+
+import org.jboss.weld.extensions.bean.AbstractImmutableProducer;
+import org.jboss.weld.extensions.util.Synthetic;
+
+public class GenericBeanProducer<T> extends AbstractImmutableProducer<T>
+{
+
+ private final BeanManager beanManager;
+ private final Synthetic qualifier;
+ private final Annotation genericConfigurationAnnotation;
+ private final Type type;
+
+ public GenericBeanProducer(Producer<T> originalProducer, Type genericBeanType, Annotation genericConfigurationAnnotation, Synthetic.Provider syntheticProvider, BeanManager beanManager)
+ {
+ super(originalProducer.getInjectionPoints());
+ this.beanManager = beanManager;
+ this.genericConfigurationAnnotation = genericConfigurationAnnotation;
+ this.qualifier = syntheticProvider.get(genericConfigurationAnnotation);
+ this.type = genericBeanType;
+ }
+
+ public void dispose(T instance)
+ {
+ // TODO implement
+ }
+
+ public T produce(CreationalContext<T> ctx)
+ {
+ Bean<?> underlyingBean = beanManager.resolve(beanManager.getBeans(type, qualifier));
+ if (underlyingBean == null)
+ {
+ throw new UnsatisfiedResolutionException("Could not resolve generic bean " + type + " with generic configuration " + genericConfigurationAnnotation);
+ }
+
+ Object object = beanManager.getReference(underlyingBean, underlyingBean.getBeanClass(), ctx);
+
+ @SuppressWarnings("unchecked")
+ T value = (T) object;
+
+ return value;
+ }
+
+}
Property changes on: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanProducer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Deleted: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/ProducerInjectionTarget.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/ProducerInjectionTarget.java 2010-07-24 16:20:43 UTC (rev 6805)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/ProducerInjectionTarget.java 2010-07-24 16:21:47 UTC (rev 6806)
@@ -1,82 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.bean.generic;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Member;
-import java.util.List;
-import java.util.Map;
-
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.UnsatisfiedResolutionException;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionTarget;
-
-import org.jboss.weld.extensions.bean.ForwardingInjectionTarget;
-import org.jboss.weld.extensions.util.Synthetic;
-import org.jboss.weld.extensions.util.properties.Property;
-
-/**
- * {@link InjectionTarget} wrapper used for beans that have generic producer fields
- *
- * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
- *
- * @param <T>
- */
-public class ProducerInjectionTarget<T> extends ForwardingInjectionTarget<T>
-{
- private final InjectionTarget<T> delegate;
-
- private final BeanManager beanManager;
- private final List<Property<Object>> properties;
- private final Map<Member, Annotation> producers;
- private final Synthetic.Provider syntheticProvider;
-
- public ProducerInjectionTarget(InjectionTarget<T> delegate, BeanManager beanManager, List<Property<Object>> properties, Map<Member, Annotation> producers, Synthetic.Provider syntheticProvider)
- {
- this.delegate = delegate;
- this.beanManager = beanManager;
- this.properties = properties;
- this.producers = producers;
- this.syntheticProvider = syntheticProvider;
- }
-
- @Override
- protected InjectionTarget<T> delegate()
- {
- return delegate;
- }
-
- @Override
- public void inject(T instance, CreationalContext<T> ctx)
- {
- for (Property<Object> property: properties)
- {
- Synthetic qualifier = syntheticProvider.get(producers.get(property.getMember()));
- Bean<?> bean = beanManager.resolve(beanManager.getBeans(property.getBaseType(), qualifier));
- if (bean == null)
- {
- throw new UnsatisfiedResolutionException("Could not resolve bean for Generic Producer " + property.toString() + ". Type: " + property.getJavaClass() + " Qualifiers:" + qualifier);
- }
- Object value = beanManager.getReference(bean, property.getBaseType(), ctx);
- property.setValue(instance, value);
- }
- delegate().inject(instance, ctx);
- }
-
-}
13 years, 9 months
Weld SVN: r6805 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 12:20:43 -0400 (Sat, 24 Jul 2010)
New Revision: 6805
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
Log:
reimplement GenericBeanExtension around ProcessProducer
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 15:38:50 UTC (rev 6804)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 16:20:43 UTC (rev 6805)
@@ -19,7 +19,6 @@
import static org.jboss.weld.extensions.util.Reflections.getRawType;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Member;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
@@ -32,11 +31,11 @@
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.AfterDeploymentValidation;
import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMember;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import javax.enterprise.inject.spi.AnnotatedType;
@@ -45,7 +44,7 @@
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
-import javax.enterprise.inject.spi.ProcessInjectionTarget;
+import javax.enterprise.inject.spi.ProcessProducer;
import javax.inject.Inject;
import org.jboss.weld.extensions.annotated.AnnotatedTypeBuilder;
@@ -53,8 +52,6 @@
import org.jboss.weld.extensions.bean.BeanLifecycle;
import org.jboss.weld.extensions.util.Arrays2;
import org.jboss.weld.extensions.util.Synthetic;
-import org.jboss.weld.extensions.util.properties.Properties;
-import org.jboss.weld.extensions.util.properties.Property;
/**
* Extension that wires in Generic Beans
@@ -66,14 +63,11 @@
class GenericBeanExtension implements Extension
{
- // A map of generic configuration types to generic beans
- private final Map<Class<?>, Set<AnnotatedType<?>>> genericTypes;
+ // A map of generic configuration types to generic bean types
+ private final Map<Class<?>, Set<AnnotatedType<?>>> genericBeanTypes;
- // A map of classes containing producers which produce generic beans
- private final Map<Class<?>, Map<Member, Annotation>> producers;
-
// A map of a generic configuration types to all instances of that type found
- private final Map<Class<?>, Set<Annotation>> concreteGenerics;
+ private final Map<Class<?>, Set<Annotation>> genericConfigurationTypes;
// A map of generic configuration annotations to generic configuration beans
private final Map<Annotation, Bean<?>> genericConfigurationBeans;
@@ -82,10 +76,9 @@
GenericBeanExtension()
{
- this.genericTypes = new HashMap<Class<?>, Set<AnnotatedType<?>>>();
+ this.genericBeanTypes = new HashMap<Class<?>, Set<AnnotatedType<?>>>();
this.genericConfigurationBeans = new HashMap<Annotation, Bean<?>>();
- this.producers = new HashMap<Class<?>, Map<Member, Annotation>>();
- this.concreteGenerics = new HashMap<Class<?>, Set<Annotation>>();
+ this.genericConfigurationTypes = new HashMap<Class<?>, Set<Annotation>>();
this.syntheticProvider = new Synthetic.Provider("org.jboss.weld.extensions.bean.generic");
}
@@ -95,91 +88,92 @@
event.addQualifier(GenericBean.class);
}
- void processAnnotatedType(@Observes ProcessAnnotatedType<?> event)
+ <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event)
{
AnnotatedType<?> type = event.getAnnotatedType();
if (type.isAnnotationPresent(Generic.class))
{
- Generic generic = type.getAnnotation(Generic.class);
- if (!genericTypes.containsKey(generic.value()))
- {
- genericTypes.put(generic.value(), new HashSet<AnnotatedType<?>>());
- }
- genericTypes.get(generic.value()).add(type);
+ addGenericBeanType(type);
// we will install (multiple copies of) this bean later
event.veto();
}
- // make note of any producer fields that produce generic beans
- for (AnnotatedField<?> field : type.getFields())
+ }
+
+ private <X> void addGenericBeanType(AnnotatedType<X> type)
+ {
+ Generic generic = type.getAnnotation(Generic.class);
+ if (!genericBeanTypes.containsKey(generic.value()))
{
- if (field.isAnnotationPresent(Produces.class))
- {
- for (Annotation annotation : field.getAnnotations())
- {
- if (annotation.annotationType().isAnnotationPresent(GenericConfiguration.class))
- {
- if (!producers.containsKey(type.getJavaClass()))
- {
- producers.put(type.getJavaClass(), new HashMap<Member, Annotation>());
- }
- if (!concreteGenerics.containsKey(annotation.annotationType()))
- {
- concreteGenerics.put(annotation.annotationType(), new HashSet<Annotation>());
- }
- producers.get(type.getJavaClass()).put(field.getJavaMember(), annotation);
- concreteGenerics.get(annotation.annotationType()).add(annotation);
- }
- }
- }
+ Set<AnnotatedType<?>> annotatedTypes = new HashSet<AnnotatedType<?>>();
+ annotatedTypes.add(type);
+ genericBeanTypes.put(generic.value(), annotatedTypes);
}
-
- // make note of any producer method that produce generic beans
- for (AnnotatedMethod<?> method : type.getMethods())
+ else
{
- if (method.isAnnotationPresent(Produces.class))
+ genericBeanTypes.get(generic.value()).add(type);
+ }
+ }
+
+ <T, X> void processProducers(@Observes ProcessProducer<T, X> event, BeanManager beanManager)
+ {
+ // Only process the producer as a generic producer, if it has an annotation meta-annotated with GenericConfiguration
+ List<Annotation> genericConfigurationAnnotiations = new ArrayList<Annotation>();
+ for (Annotation annotation : event.getAnnotatedMember().getAnnotations())
+ {
+ if (annotation.annotationType().isAnnotationPresent(GenericConfiguration.class))
{
- for (Annotation annotation : method.getAnnotations())
- {
- if (annotation.annotationType().isAnnotationPresent(GenericConfiguration.class))
- {
- if (!producers.containsKey(type.getJavaClass()))
- {
- producers.put(type.getJavaClass(), new HashMap<Member, Annotation>());
- }
- if (!concreteGenerics.containsKey(annotation.annotationType()))
- {
- concreteGenerics.put(annotation.annotationType(), new HashSet<Annotation>());
- }
- producers.get(type.getJavaClass()).put(method.getJavaMember(), annotation);
- concreteGenerics.get(annotation.annotationType()).add(annotation);
- }
- }
+ genericConfigurationAnnotiations.add(annotation);
}
}
+
+ if (genericConfigurationAnnotiations.size() > 1)
+ {
+ throw new IllegalStateException("Can only have one generic configuration annotation on producer " + event.getAnnotatedMember());
+ }
+ else if (genericConfigurationAnnotiations.size() == 1)
+ {
+ Annotation genericConfiguration = genericConfigurationAnnotiations.get(0);
+ replaceProducer(event, genericConfiguration, beanManager);
+ addGenericConfigurationType(genericConfiguration);
+ }
}
-
- /**
- * wraps InjectionTarget to initialise producer fields that produce generic
- * beans
- */
- <T> void processInjectionTarget(@Observes ProcessInjectionTarget<T> event, BeanManager beanManager)
+
+ private <X> void addGenericConfigurationType(Annotation genericConfiguration)
{
- Class<?> clazz = event.getAnnotatedType().getJavaClass();
- if (producers.containsKey(clazz))
+ Class<? extends Annotation> genericConfigurationType = genericConfiguration.annotationType();
+ if (!genericConfigurationTypes.containsKey(genericConfigurationType))
{
- Map<Member, Annotation> producersOnClass = producers.get(clazz);
- List<Property<Object>> setters = new ArrayList<Property<Object>>();
- for (Member member : producersOnClass.keySet())
+ Set<Annotation> annotations = new HashSet<Annotation>();
+ annotations.add(genericConfiguration);
+ genericConfigurationTypes.put(genericConfigurationType, annotations);
+ }
+ else
+ {
+ genericConfigurationTypes.get(genericConfigurationType).add(genericConfiguration);
+ }
+ }
+
+ private <T, X> void replaceProducer(ProcessProducer<T, X> event, Annotation genericConfigurationAnnotation, BeanManager beanManager)
+ {
+ // First, check that this producer's type is assignable from a generic bean's type
+ AnnotatedMember<T> annotatedMember = event.getAnnotatedMember();
+ Class<?> memberRawType = getRawType(annotatedMember.getBaseType());
+ for (Entry<Class<?>, Set<AnnotatedType<?>>> entry : genericBeanTypes.entrySet())
+ {
+ for (AnnotatedType<?> annotatedType : entry.getValue())
{
- // TODO Need a producer method property really
- Property<Object> property = Properties.createProperty(member);
- setters.add(property);
+ // TODO should take account of parameterized types
+ if (memberRawType.isAssignableFrom(getRawType(annotatedType.getBaseType())))
+ {
+ // This is the generic bean that this producer is making
+ event.setProducer(new GenericBeanProducer<X>(event.getProducer(), memberRawType, genericConfigurationAnnotation, syntheticProvider, beanManager));
+ // Short-circuit, they're can of course be only one matching generic bean to be produced!
+ return;
+ }
}
- ProducerInjectionTarget<T> it = new ProducerInjectionTarget<T>(event.getInjectionTarget(), beanManager, setters, producersOnClass, syntheticProvider);
- event.setInjectionTarget(it);
}
-
+ throw new IllegalStateException("Unable to find a generic bean type for " + event.getAnnotatedMember() + " amongst " + genericBeanTypes);
}
/**
@@ -187,20 +181,21 @@
*/
void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager beanManager)
{
- for (Entry<Class<?>, Set<AnnotatedType<?>>> entry : genericTypes.entrySet())
+ for (Entry<Class<?>, Set<AnnotatedType<?>>> entry : genericBeanTypes.entrySet())
{
- Set<Annotation> concretes = concreteGenerics.get(entry.getKey());
- if (concretes != null)
+ Set<Annotation> genericConfigurations = genericConfigurationTypes.get(entry.getKey());
+ if (genericConfigurations != null)
{
for (AnnotatedType<?> type : entry.getValue())
{
- for (Annotation concrete : concretes)
+ for (Annotation genericConfiguration : genericConfigurations)
{
- event.addBean(createGenericBean(type, concrete, beanManager));
+ event.addBean(createGenericBean(type, genericConfiguration, beanManager));
}
}
}
}
+
// Add all the generic configuration beans, which were created above
for (Bean<?> bean : genericConfigurationBeans.values())
{
@@ -312,9 +307,9 @@
void cleanup(@Observes AfterDeploymentValidation event)
{
// Defensively clear maps to help with GC
- this.concreteGenerics.clear();
+ this.genericConfigurationTypes.clear();
this.genericConfigurationBeans.clear();
- this.genericTypes.clear();
+ this.genericBeanTypes.clear();
// TODO this.producers.clear();
// TODO this.syntheticProvider.clear();
}
13 years, 9 months
Weld SVN: r6804 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 11:38:50 -0400 (Sat, 24 Jul 2010)
New Revision: 6804
Added:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableBean.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableProducer.java
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java
Log:
Split out helper base class, add helper base class for Producer
Added: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableBean.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableBean.java (rev 0)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableBean.java 2010-07-24 15:38:50 UTC (rev 6804)
@@ -0,0 +1,171 @@
+package org.jboss.weld.extensions.bean;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.jboss.weld.extensions.literal.DefaultLiteral;
+import org.jboss.weld.extensions.util.Arrays2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A base class for implementing {@link Bean}. The base class is immutable, and
+ * uses defensive copying for collections. It uses the defaults from the spec
+ * for properties if not specified.
+ *
+ * @author Pete Muir
+ *
+ */
+public abstract class AbstractImmutableBean<T>
+{
+
+ private static final Logger log = LoggerFactory.getLogger(AbstractImmutableBean.class);
+
+ private final Class<?> beanClass;
+ private final String name;
+ private final Set<Annotation> qualifiers;
+ private final Class<? extends Annotation> scope;
+ private final Set<Class<? extends Annotation>> stereotypes;
+ private final Set<Type> types;
+ private final boolean alternative;
+ private final boolean nullable;
+ private final Set<InjectionPoint> injectionPoints;
+
+ /**
+ * Create a new, immutable bean. All arguments passed as collections are
+ * defensively copied.
+ *
+ * @param beanClass The Bean class, may not be null
+ * @param name The bean name
+ * @param qualifiers The bean's qualifiers, if null, a singleton set of
+ * {@link Default} is used
+ * @param scope The bean's scope, if null, the default scope of
+ * {@link Dependent} is used
+ * @param stereotypes The bean's stereotypes, if null, an empty set is used
+ * @param types The bean's types, if null, the beanClass and {@link Object}
+ * will be used
+ * @param alternative True if the bean is an alternative
+ * @param nullable True if the bean is nullable
+ * @param injectionPoints the bean's injection points, if null an empty set
+ * is used
+ * @param beanLifecycle Handler for {@link #create(CreationalContext)} and
+ * {@link #destroy(Object, CreationalContext)}
+ *
+ * @throws IllegalArgumentException if the beanClass is null
+ */
+ public AbstractImmutableBean(Class<?> beanClass, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, Set<InjectionPoint> injectionPoints)
+ {
+ if (beanClass == null)
+ {
+ throw new IllegalArgumentException("beanClass cannot be null");
+ }
+ this.beanClass = beanClass;
+ this.name = name;
+ if (qualifiers == null)
+ {
+ this.qualifiers = Collections.<Annotation> singleton(DefaultLiteral.INSTANCE);
+ log.trace("No qualifers provided for bean class " + beanClass + ", using singleton set of @Default");
+ }
+ else
+ {
+ this.qualifiers = new HashSet<Annotation>(qualifiers);
+ }
+ if (scope == null)
+ {
+ this.scope = Dependent.class;
+ log.trace("No scope provided for bean class " + beanClass + ", using @Dependent");
+ }
+ else
+ {
+ this.scope = scope;
+ }
+ if (stereotypes == null)
+ {
+ this.stereotypes = Collections.emptySet();
+ }
+ else
+ {
+ this.stereotypes = new HashSet<Class<? extends Annotation>>(stereotypes);
+ }
+ if (types == null)
+ {
+ this.types = Arrays2.<Type> asSet(Object.class, beanClass);
+ log.trace("No types provided for bean class " + beanClass + ", using [java.lang.Object.class, " + beanClass.getName() + ".class]");
+ }
+ else
+ {
+ this.types = new HashSet<Type>(types);
+ }
+ if (injectionPoints == null)
+ {
+ this.injectionPoints = Collections.emptySet();
+ }
+ else
+ {
+ this.injectionPoints = new HashSet<InjectionPoint>(injectionPoints);
+ }
+ this.alternative = alternative;
+ this.nullable = nullable;
+ }
+
+ public Class<?> getBeanClass()
+ {
+ return beanClass;
+ }
+
+ public Set<InjectionPoint> getInjectionPoints()
+ {
+ return injectionPoints;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public Set<Annotation> getQualifiers()
+ {
+ return Collections.unmodifiableSet(qualifiers);
+ }
+
+ public Class<? extends Annotation> getScope()
+ {
+ return scope;
+ }
+
+ public Set<Class<? extends Annotation>> getStereotypes()
+ {
+ return Collections.unmodifiableSet(stereotypes);
+ }
+
+ public Set<Type> getTypes()
+ {
+ return Collections.unmodifiableSet(types);
+ }
+
+ public boolean isAlternative()
+ {
+ return alternative;
+ }
+
+ public boolean isNullable()
+ {
+ return nullable;
+ }
+
+ @Override
+ public String toString()
+ {
+ return new StringBuilder().append("Custom Bean with bean class ").append(beanClass).append(" and qualifiers ").append(qualifiers).toString();
+ }
+
+}
\ No newline at end of file
Property changes on: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableProducer.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableProducer.java (rev 0)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableProducer.java 2010-07-24 15:38:50 UTC (rev 6804)
@@ -0,0 +1,31 @@
+package org.jboss.weld.extensions.bean;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Producer;
+
+/**
+ * A base class for implementing {@link Producer}. The base class is immutable,
+ * and uses defensive copying for collections
+ *
+ * @author Pete Muir
+ *
+ */
+public abstract class AbstractImmutableProducer<T> implements Producer<T>
+{
+
+ private final Set<InjectionPoint> injectionPoints;
+
+ public AbstractImmutableProducer(Set<InjectionPoint> injectionPoints)
+ {
+ this.injectionPoints = injectionPoints;
+ }
+
+ public Set<InjectionPoint> getInjectionPoints()
+ {
+ return new HashSet<InjectionPoint>(injectionPoints);
+ }
+
+}
Property changes on: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/AbstractImmutableProducer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java 2010-07-24 15:05:21 UTC (rev 6803)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java 2010-07-24 15:38:50 UTC (rev 6804)
@@ -18,8 +18,6 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Set;
import javax.enterprise.context.Dependent;
@@ -28,11 +26,6 @@
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
-import org.jboss.weld.extensions.literal.DefaultLiteral;
-import org.jboss.weld.extensions.util.Arrays2;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
* An immutable bean which provides basic defaulting and checking of arguments.
*
@@ -40,22 +33,10 @@
* @author Pete Muir
*
*/
-public class BeanImpl<T> implements Bean<T>
+public class BeanImpl<T> extends AbstractImmutableBean<T> implements Bean<T>
{
- private static final Logger log = LoggerFactory.getLogger(BeanImpl.class);
-
- private final Class<?> beanClass;
- private final String name;
- private final Set<Annotation> qualifiers;
- private final Class<? extends Annotation> scope;
- private final Set<Class<? extends Annotation>> stereotypes;
- private final Set<Type> types;
- private final boolean alternative;
- private final boolean nullable;
- private final BeanLifecycle<T> beanLifecycle;
- private final Set<InjectionPoint> injectionPoints;
-
+ final BeanLifecycle<T> beanLifecycle;
/**
* Create a new, immutable bean. All arguments passed as collections are defensively copied.
*
@@ -78,105 +59,10 @@
*/
public BeanImpl(Class<?> beanClass, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, Set<InjectionPoint> injectionPoints, BeanLifecycle<T> beanLifecycle)
{
- if (beanClass == null)
- {
- throw new IllegalArgumentException("beanClass cannot be null");
- }
- this.beanClass = beanClass;
- this.name = name;
- if (qualifiers == null)
- {
- this.qualifiers = Collections.<Annotation>singleton(DefaultLiteral.INSTANCE);
- log.trace("No qualifers provided for bean class " + beanClass + ", using singleton set of @Default");
- }
- else
- {
- this.qualifiers = new HashSet<Annotation>(qualifiers);
- }
- if (scope == null)
- {
- this.scope = Dependent.class;
- log.trace("No scope provided for bean class " + beanClass + ", using @Dependent");
- }
- else
- {
- this.scope = scope;
- }
- if (stereotypes == null)
- {
- this.stereotypes = Collections.emptySet();
- }
- else
- {
- this.stereotypes = new HashSet<Class<? extends Annotation>>(stereotypes);
- }
- if (types == null)
- {
- this.types = Arrays2.<Type>asSet(Object.class, beanClass);
- log.trace("No types provided for bean class " + beanClass + ", using [java.lang.Object.class, " + beanClass.getName() + ".class]");
- }
- else
- {
- this.types = new HashSet<Type>(types);
- }
- if (injectionPoints == null)
- {
- this.injectionPoints = Collections.emptySet();
- }
- else
- {
- this.injectionPoints = new HashSet<InjectionPoint>(injectionPoints);
- }
- this.alternative = alternative;
- this.nullable = nullable;
+ super(beanClass, name, qualifiers, scope, stereotypes, types, alternative, nullable, injectionPoints);
this.beanLifecycle = beanLifecycle;
}
-
- public Class<?> getBeanClass()
- {
- return beanClass;
- }
-
- public Set<InjectionPoint> getInjectionPoints()
- {
- return injectionPoints;
- }
-
- public String getName()
- {
- return name;
- }
-
- public Set<Annotation> getQualifiers()
- {
- return Collections.unmodifiableSet(qualifiers);
- }
-
- public Class<? extends Annotation> getScope()
- {
- return scope;
- }
-
- public Set<Class<? extends Annotation>> getStereotypes()
- {
- return Collections.unmodifiableSet(stereotypes);
- }
-
- public Set<Type> getTypes()
- {
- return Collections.unmodifiableSet(types);
- }
-
- public boolean isAlternative()
- {
- return alternative;
- }
-
- public boolean isNullable()
- {
- return nullable;
- }
-
+
public T create(CreationalContext<T> arg0)
{
return beanLifecycle.create(this, arg0);
@@ -187,10 +73,4 @@
beanLifecycle.destroy(this, arg0, arg1);
}
- @Override
- public String toString()
- {
- return new StringBuilder().append("Custom Bean with bean class ").append(beanClass).append(" and qualifiers ").append(qualifiers).toString();
- }
-
}
13 years, 9 months
Weld SVN: r6803 - in extensions/trunk/impl/src/main/java/org/jboss/weld/extensions: util and 1 other directory.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 11:05:21 -0400 (Sat, 24 Jul 2010)
New Revision: 6803
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java
Log:
make a start at cleanup
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 14:43:04 UTC (rev 6802)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 15:05:21 UTC (rev 6803)
@@ -34,6 +34,7 @@
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedField;
import javax.enterprise.inject.spi.AnnotatedMethod;
@@ -65,13 +66,16 @@
class GenericBeanExtension implements Extension
{
+ // A map of generic configuration types to generic beans
private final Map<Class<?>, Set<AnnotatedType<?>>> genericTypes;
+ // A map of classes containing producers which produce generic beans
private final Map<Class<?>, Map<Member, Annotation>> producers;
- // A map of a generic annotation type to all instances of that type found on beans
+ // A map of a generic configuration types to all instances of that type found
private final Map<Class<?>, Set<Annotation>> concreteGenerics;
+ // A map of generic configuration annotations to generic configuration beans
private final Map<Annotation, Bean<?>> genericConfigurationBeans;
private final Synthetic.Provider syntheticProvider;
@@ -304,5 +308,15 @@
return syntheticProvider.get(genericConfiguration);
}
}
+
+ void cleanup(@Observes AfterDeploymentValidation event)
+ {
+ // Defensively clear maps to help with GC
+ this.concreteGenerics.clear();
+ this.genericConfigurationBeans.clear();
+ this.genericTypes.clear();
+ // TODO this.producers.clear();
+ // TODO this.syntheticProvider.clear();
+ }
}
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java 2010-07-24 14:43:04 UTC (rev 6802)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java 2010-07-24 15:05:21 UTC (rev 6803)
@@ -114,6 +114,11 @@
{
return new Synthetic.SyntheticLiteral(namespace, count.getAndIncrement());
}
+
+ public void clear()
+ {
+ this.synthetics.clear();
+ }
}
}
13 years, 9 months
Weld SVN: r6802 - extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 10:43:04 -0400 (Sat, 24 Jul 2010)
New Revision: 6802
Added:
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Qux.java
Log:
oops
Added: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java (rev 0)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java 2010-07-24 14:43:04 UTC (rev 6802)
@@ -0,0 +1,40 @@
+package org.jboss.weld.extensions.test.bean.generic;
+
+import javax.inject.Inject;
+
+import org.jboss.weld.extensions.bean.generic.Generic;
+import org.jboss.weld.extensions.bean.generic.GenericBean;
+
+/**
+ * A generic bean for the config annotation Message that uses initializer
+ * injection for generic configuration annotations and generic bean injection
+ *
+ * @author pmuir
+ *
+ */
+
+(a)Generic(Message.class)
+public class Garply
+{
+
+ private Message message;
+ private Qux qux;
+
+ @Inject
+ public void init(Message message, @GenericBean Qux qux)
+ {
+ this.qux = qux;
+ this.message = message;
+ }
+
+ public Message getMessage()
+ {
+ return message;
+ }
+
+ public Qux getQux()
+ {
+ return qux;
+ }
+
+}
Property changes on: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Qux.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Qux.java (rev 0)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Qux.java 2010-07-24 14:43:04 UTC (rev 6802)
@@ -0,0 +1,40 @@
+package org.jboss.weld.extensions.test.bean.generic;
+
+import javax.inject.Inject;
+
+import org.jboss.weld.extensions.bean.generic.Generic;
+import org.jboss.weld.extensions.bean.generic.GenericBean;
+
+/**
+ * A generic bean for the config annotation Message that uses ctor injection for
+ * generic configuration annotations and generic bean injection
+ *
+ * @author pmuir
+ *
+ */
+
+(a)Generic(Message.class)
+public class Qux
+{
+
+ private final Message message;
+ private final Bar bar;
+
+ @Inject
+ public Qux(Message message, @GenericBean Bar bar)
+ {
+ this.bar = bar;
+ this.message = message;
+ }
+
+ public Message getMessage()
+ {
+ return message;
+ }
+
+ public Bar getBar()
+ {
+ return bar;
+ }
+
+}
Property changes on: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Qux.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
13 years, 9 months
Weld SVN: r6801 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 10:40:47 -0400 (Sat, 24 Jul 2010)
New Revision: 6801
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
Log:
reuse generic configuration beans
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 14:17:57 UTC (rev 6800)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 14:40:47 UTC (rev 6801)
@@ -65,18 +65,21 @@
class GenericBeanExtension implements Extension
{
- private final Map<Class<?>, Set<AnnotatedType<?>>> genericBeans;
+ private final Map<Class<?>, Set<AnnotatedType<?>>> genericTypes;
private final Map<Class<?>, Map<Member, Annotation>> producers;
// A map of a generic annotation type to all instances of that type found on beans
private final Map<Class<?>, Set<Annotation>> concreteGenerics;
+
+ private final Map<Annotation, Bean<?>> genericConfigurationBeans;
private final Synthetic.Provider syntheticProvider;
GenericBeanExtension()
{
- this.genericBeans = new HashMap<Class<?>, Set<AnnotatedType<?>>>();
+ this.genericTypes = new HashMap<Class<?>, Set<AnnotatedType<?>>>();
+ this.genericConfigurationBeans = new HashMap<Annotation, Bean<?>>();
this.producers = new HashMap<Class<?>, Map<Member, Annotation>>();
this.concreteGenerics = new HashMap<Class<?>, Set<Annotation>>();
this.syntheticProvider = new Synthetic.Provider("org.jboss.weld.extensions.bean.generic");
@@ -94,11 +97,11 @@
if (type.isAnnotationPresent(Generic.class))
{
Generic generic = type.getAnnotation(Generic.class);
- if (!genericBeans.containsKey(generic.value()))
+ if (!genericTypes.containsKey(generic.value()))
{
- genericBeans.put(generic.value(), new HashSet<AnnotatedType<?>>());
+ genericTypes.put(generic.value(), new HashSet<AnnotatedType<?>>());
}
- genericBeans.get(generic.value()).add(type);
+ genericTypes.get(generic.value()).add(type);
// we will install (multiple copies of) this bean later
event.veto();
@@ -180,7 +183,7 @@
*/
void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager beanManager)
{
- for (Entry<Class<?>, Set<AnnotatedType<?>>> entry : genericBeans.entrySet())
+ for (Entry<Class<?>, Set<AnnotatedType<?>>> entry : genericTypes.entrySet())
{
Set<Annotation> concretes = concreteGenerics.get(entry.getKey());
if (concretes != null)
@@ -189,14 +192,19 @@
{
for (Annotation concrete : concretes)
{
- event.addBean(redefineType(type, concrete, beanManager, event));
+ event.addBean(createGenericBean(type, concrete, beanManager));
}
}
}
}
+ // Add all the generic configuration beans, which were created above
+ for (Bean<?> bean : genericConfigurationBeans.values())
+ {
+ event.addBean(bean);
+ }
}
- private <X> Bean<X> redefineType(AnnotatedType<X> annotatedType, Annotation concrete, BeanManager beanManager, AfterBeanDiscovery event)
+ private <X> Bean<X> createGenericBean(AnnotatedType<X> annotatedType, Annotation concrete, BeanManager beanManager)
{
Synthetic genericBeanQualifier = syntheticProvider.get(concrete);
@@ -212,9 +220,7 @@
// if this is a configuration injection point
if (concrete.annotationType().isAssignableFrom(getRawType(field.getBaseType())))
{
- Synthetic genericConfigurationQualifier = syntheticProvider.get();
- builder.addToField(field, genericConfigurationQualifier);
- event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
+ builder.addToField(field, getGenericConfigurationQualifier(beanManager, concrete));
}
// if this is a generic bean injection point
else if (field.isAnnotationPresent(Inject.class) && field.isAnnotationPresent(GenericBean.class))
@@ -233,9 +239,7 @@
// if this is a configuration injection point
if (concrete.annotationType().isAssignableFrom(getRawType(parameter.getBaseType())))
{
- Synthetic genericConfigurationQualifier = syntheticProvider.get();
- builder.addToParameter(parameter, genericConfigurationQualifier);
- event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
+ builder.addToParameter(parameter, getGenericConfigurationQualifier(beanManager, concrete));
}
// if this is a generic bean injection point
if (parameter.isAnnotationPresent(GenericBean.class))
@@ -256,9 +260,7 @@
// if this is a configuration injection point
if (concrete.annotationType().isAssignableFrom(getRawType(parameter.getBaseType())))
{
- Synthetic genericConfigurationQualifier = syntheticProvider.get();
- builder.addToParameter(parameter, genericConfigurationQualifier);
- event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
+ builder.addToParameter(parameter, getGenericConfigurationQualifier(beanManager, concrete));
}
// if this is a generic bean injection point
if (parameter.isAnnotationPresent(GenericBean.class))
@@ -273,24 +275,34 @@
return beanBuilder.create();
}
- private Bean<Annotation> createConfigurationBean(BeanManager beanManager, final Annotation genericConfiguration, Annotation syntheticQualifier)
+ private Synthetic getGenericConfigurationQualifier(BeanManager beanManager, final Annotation genericConfiguration)
{
- // TODO make this passivation capable?
- BeanBuilder<Annotation> builder = new BeanBuilder<Annotation>(beanManager).setJavaClass(genericConfiguration.annotationType()).setTypes(Arrays2.<Type> asSet(genericConfiguration.annotationType(), Object.class)).setScope(Dependent.class).setQualifiers(Arrays2.asSet(syntheticQualifier)).setBeanLifecycle(new BeanLifecycle<Annotation>()
+ if (!genericConfigurationBeans.containsKey(genericConfiguration))
{
-
- public void destroy(Bean<Annotation> bean, Annotation arg0, CreationalContext<Annotation> arg1)
+ // We don't have a bean created for this generic configuration annotation. Create it, store it to be added later
+ Synthetic syntheticQualifier = syntheticProvider.get(genericConfiguration);
+ // TODO make this passivation capable?
+ BeanBuilder<Annotation> builder = new BeanBuilder<Annotation>(beanManager).setJavaClass(genericConfiguration.annotationType()).setTypes(Arrays2.<Type> asSet(genericConfiguration.annotationType(), Object.class)).setScope(Dependent.class).setQualifiers(Arrays2.<Annotation>asSet(syntheticQualifier)).setBeanLifecycle(new BeanLifecycle<Annotation>()
{
- // No-op
- }
-
- public Annotation create(Bean<Annotation> bean, CreationalContext<Annotation> arg0)
- {
- return genericConfiguration;
- }
- });
-
- return builder.create();
+
+ public void destroy(Bean<Annotation> bean, Annotation arg0, CreationalContext<Annotation> arg1)
+ {
+ // No-op
+ }
+
+ public Annotation create(Bean<Annotation> bean, CreationalContext<Annotation> arg0)
+ {
+ return genericConfiguration;
+ }
+ });
+ genericConfigurationBeans.put(genericConfiguration, builder.create());
+ return syntheticQualifier;
+ }
+ else
+ {
+ // The bean already exists, just return the qualifier
+ return syntheticProvider.get(genericConfiguration);
+ }
}
}
13 years, 9 months
Weld SVN: r6800 - in extensions/trunk/impl/src: main/java/org/jboss/weld/extensions/util and 1 other directories.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 10:17:57 -0400 (Sat, 24 Jul 2010)
New Revision: 6800
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Reflections.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
Log:
tests for initializer and ctor injection for generic beans
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 13:59:59 UTC (rev 6799)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 14:17:57 UTC (rev 6800)
@@ -16,6 +16,8 @@
*/
package org.jboss.weld.extensions.bean.generic;
+import static org.jboss.weld.extensions.util.Reflections.getRawType;
+
import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
import java.lang.reflect.Type;
@@ -208,7 +210,7 @@
if (field.isAnnotationPresent(Inject.class))
{
// if this is a configuration injection point
- if (concrete.annotationType().isAssignableFrom(field.getJavaMember().getType()))
+ if (concrete.annotationType().isAssignableFrom(getRawType(field.getBaseType())))
{
Synthetic genericConfigurationQualifier = syntheticProvider.get();
builder.addToField(field, genericConfigurationQualifier);
@@ -228,6 +230,14 @@
{
for (AnnotatedParameter<? super X> parameter : method.getParameters())
{
+ // if this is a configuration injection point
+ if (concrete.annotationType().isAssignableFrom(getRawType(parameter.getBaseType())))
+ {
+ Synthetic genericConfigurationQualifier = syntheticProvider.get();
+ builder.addToParameter(parameter, genericConfigurationQualifier);
+ event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
+ }
+ // if this is a generic bean injection point
if (parameter.isAnnotationPresent(GenericBean.class))
{
builder.removeFromParameter(parameter, GenericBean.class);
@@ -243,6 +253,14 @@
{
for (AnnotatedParameter<X> parameter : constructor.getParameters())
{
+ // if this is a configuration injection point
+ if (concrete.annotationType().isAssignableFrom(getRawType(parameter.getBaseType())))
+ {
+ Synthetic genericConfigurationQualifier = syntheticProvider.get();
+ builder.addToParameter(parameter, genericConfigurationQualifier);
+ event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
+ }
+ // if this is a generic bean injection point
if (parameter.isAnnotationPresent(GenericBean.class))
{
builder.removeFromParameter(parameter, GenericBean.class);
@@ -257,21 +275,20 @@
private Bean<Annotation> createConfigurationBean(BeanManager beanManager, final Annotation genericConfiguration, Annotation syntheticQualifier)
{
- BeanBuilder<Annotation> builder = new BeanBuilder<Annotation>(beanManager).setJavaClass(genericConfiguration.annotationType()).setTypes(Arrays2.<Type> asSet(genericConfiguration.annotationType(), Object.class)).setScope(Dependent.class).setQualifiers(Arrays2.asSet(syntheticQualifier))
// TODO make this passivation capable?
- .setBeanLifecycle(new BeanLifecycle<Annotation>()
- {
+ BeanBuilder<Annotation> builder = new BeanBuilder<Annotation>(beanManager).setJavaClass(genericConfiguration.annotationType()).setTypes(Arrays2.<Type> asSet(genericConfiguration.annotationType(), Object.class)).setScope(Dependent.class).setQualifiers(Arrays2.asSet(syntheticQualifier)).setBeanLifecycle(new BeanLifecycle<Annotation>()
+ {
- public void destroy(Bean<Annotation> bean, Annotation arg0, CreationalContext<Annotation> arg1)
- {
- // No-op
- }
+ public void destroy(Bean<Annotation> bean, Annotation arg0, CreationalContext<Annotation> arg1)
+ {
+ // No-op
+ }
- public Annotation create(Bean<Annotation> bean, CreationalContext<Annotation> arg0)
- {
- return genericConfiguration;
- }
- });
+ public Annotation create(Bean<Annotation> bean, CreationalContext<Annotation> arg0)
+ {
+ return genericConfiguration;
+ }
+ });
return builder.create();
}
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Reflections.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Reflections.java 2010-07-24 13:59:59 UTC (rev 6799)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Reflections.java 2010-07-24 14:17:57 UTC (rev 6800)
@@ -22,6 +22,8 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Set;
@@ -355,5 +357,22 @@
throw new RuntimeException(buildInvokeMethodErrorMessage(method, obj, args), e);
}
}
+
+ @SuppressWarnings("unchecked")
+ public static <T> Class<T> getRawType(Type type)
+ {
+ if (type instanceof Class<?>)
+ {
+ return (Class<T>) type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ if (((ParameterizedType) type).getRawType() instanceof Class<?>)
+ {
+ return (Class<T>) ((ParameterizedType) type).getRawType();
+ }
+ }
+ return null;
+ }
}
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java 2010-07-24 13:59:59 UTC (rev 6799)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java 2010-07-24 14:17:57 UTC (rev 6800)
@@ -22,7 +22,7 @@
import org.jboss.weld.extensions.bean.generic.GenericBean;
/**
- * A generic bean for the config annotation Garply
+ * A generic bean for the config annotation Message
*
* @author pmuir
*
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java 2010-07-24 13:59:59 UTC (rev 6799)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java 2010-07-24 14:17:57 UTC (rev 6800)
@@ -37,14 +37,40 @@
@Message("hello2")
private Baz baz2;
+ @SuppressWarnings("unused")
@Foo(1)
@Produces
@Message("bye1")
private Bar bar1;
+ @SuppressWarnings("unused")
@Foo(2)
@Produces
@Message("bye2")
private Bar bar2;
+
+ @SuppressWarnings("unused")
+ @Foo(1)
+ @Produces
+ @Message("adios1")
+ private Qux qux1;
+
+ @SuppressWarnings("unused")
+ @Foo(2)
+ @Produces
+ @Message("adios2")
+ private Qux qux2;
+
+ @SuppressWarnings("unused")
+ @Foo(1)
+ @Produces
+ @Message("aurevoir1")
+ private Garply garply1;
+
+ @SuppressWarnings("unused")
+ @Foo(2)
+ @Produces
+ @Message("aurevoir2")
+ private Garply garply2;
}
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java 2010-07-24 13:59:59 UTC (rev 6799)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java 2010-07-24 14:17:57 UTC (rev 6800)
@@ -54,6 +54,22 @@
@Inject
@Foo(2)
private Bar bar2;
+
+ @Inject
+ @Foo(1)
+ private Qux qux1;
+
+ @Inject
+ @Foo(2)
+ private Qux qux2;
+
+ @Inject
+ @Foo(1)
+ private Garply garply1;
+
+ @Inject
+ @Foo(2)
+ private Garply garply2;
@Test
public void testGeneric()
@@ -74,6 +90,18 @@
assertNotNull(baz2.getMessage());
assertEquals(baz2.getMessage().value(), "hello2");
+ // Check that the generic configuration injection wiring is working for qux (ctor injection)
+ assertNotNull(qux1.getMessage());
+ assertEquals(qux1.getMessage().value(), "adios1");
+ assertNotNull(qux2.getMessage());
+ assertEquals(qux2.getMessage().value(), "adios2");
+
+ // Check that the generic configuration injection wiring is working for garply (initializer injection)
+ assertNotNull(garply1.getMessage());
+ assertEquals(garply1.getMessage().value(), "aurevoir1");
+ assertNotNull(garply2.getMessage());
+ assertEquals(garply2.getMessage().value(), "aurevoir2");
+
// Check that generic beans can inject each other
assertNotNull(baz1.getBar());
assertNotNull(baz1.getBar().getInjectedMessage());
@@ -82,6 +110,22 @@
assertNotNull(baz2.getBar().getInjectedMessage());
assertEquals(baz2.getBar().getInjectedMessage().value(), "hello2");
+ // Check for ctor injection
+ assertNotNull(qux1.getBar());
+ assertNotNull(qux1.getBar().getInjectedMessage());
+ assertEquals(qux1.getBar().getInjectedMessage().value(), "adios1");
+ assertNotNull(qux2.getBar());
+ assertNotNull(qux2.getBar().getInjectedMessage());
+ assertEquals(qux2.getBar().getInjectedMessage().value(), "adios2");
+
+ // Check for initializer injection
+ assertNotNull(garply1.getQux());
+ assertNotNull(garply1.getQux().getMessage());
+ assertEquals(garply1.getQux().getMessage().value(), "aurevoir1");
+ assertNotNull(garply2.getQux());
+ assertNotNull(garply2.getQux().getMessage());
+ assertEquals(garply2.getQux().getMessage().value(), "aurevoir2");
+
// Check that this isn't affecting annotations on the generic bean without @Inject
assertNull(baz1.getBar().getMessage());
assertNull(baz2.getBar().getMessage());
13 years, 9 months
Weld SVN: r6799 - in extensions/trunk/impl/src: main/java/org/jboss/weld/extensions/bean/generic and 2 other directories.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 09:59:59 -0400 (Sat, 24 Jul 2010)
New Revision: 6799
Added:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBean.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Foo.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Message.java
Removed:
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/BazProducer.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Grault.java
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/Generic.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericConfiguration.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Bar.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
Log:
make test clearer, remove assert keyword, overloading for AnnotatedTypeBuilder, use @GenericBean qualifier
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -94,6 +94,11 @@
fields.get(field).add(annotation);
return this;
}
+
+ public AnnotatedTypeBuilder<X> addToField(AnnotatedField<? super X> field, Annotation annotation)
+ {
+ return addToField(field.getJavaMember(), annotation);
+ }
public AnnotatedTypeBuilder<X> removeFromField(Field field, Class<? extends Annotation> annotationType)
{
@@ -103,6 +108,11 @@
}
return this;
}
+
+ public AnnotatedTypeBuilder<X> removeFromField(AnnotatedField<? super X> field, Class<? extends Annotation> annotationType)
+ {
+ return removeFromField(field.getJavaMember(), annotationType);
+ }
public AnnotatedTypeBuilder<X> addToMethod(Method method, Annotation annotation)
{
@@ -113,6 +123,11 @@
methods.get(method).add(annotation);
return this;
}
+
+ public AnnotatedTypeBuilder<X> addToMethod(AnnotatedMethod<? super X> method, Annotation annotation)
+ {
+ return addToMethod(method.getJavaMember(), annotation);
+ }
public AnnotatedTypeBuilder<X> removeFromMethod(Method method, Class<? extends Annotation> annotationType)
{
@@ -122,6 +137,11 @@
}
return this;
}
+
+ public AnnotatedTypeBuilder<X> removeFromMethod(AnnotatedMethod<? super X> method, Class<? extends Annotation> annotationType)
+ {
+ return removeFromMethod(method.getJavaMember(), annotationType);
+ }
public AnnotatedTypeBuilder<X> addToMethodParameter(Method method, int position, Annotation annotation)
{
@@ -162,8 +182,13 @@
constructors.get(constructor).add(annotation);
return this;
}
+
+ public AnnotatedTypeBuilder<X> addToConstructor(AnnotatedConstructor<X> constructor, Annotation annotation)
+ {
+ return addToConstructor(constructor.getJavaMember(), annotation);
+ }
- public AnnotatedTypeBuilder<X> removeFromConstructor(Constructor<?> constructor, Class<? extends Annotation> annotationType)
+ public AnnotatedTypeBuilder<X> removeFromConstructor(Constructor<X> constructor, Class<? extends Annotation> annotationType)
{
if (constructors.get(constructor) != null)
{
@@ -171,6 +196,11 @@
}
return this;
}
+
+ public AnnotatedTypeBuilder<X> removeFromConstructor(AnnotatedConstructor<X> constructor, Class<? extends Annotation> annotationType)
+ {
+ return removeFromConstructor(constructor.getJavaMember(), annotationType);
+ }
public AnnotatedTypeBuilder<X> addToConstructorParameter(Constructor<X> constructor, int position, Annotation annotation)
{
@@ -201,6 +231,45 @@
}
return this;
}
+
+
+ public AnnotatedTypeBuilder<X> removeFromParameter(AnnotatedParameter<? super X> parameter, Class<? extends Annotation> annotationType)
+ {
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Method)
+ {
+ Method method = (Method) parameter.getDeclaringCallable().getJavaMember();
+ return removeFromMethodParameter(method, parameter.getPosition(), annotationType);
+ }
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Constructor<?>)
+ {
+ @SuppressWarnings("unchecked")
+ Constructor<X> constructor = (Constructor<X>) parameter.getDeclaringCallable().getJavaMember();
+ return removeFromConstructorParameter(constructor, parameter.getPosition(), annotationType);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Cannot remove from parameter " + parameter + " - cannot operate on member " + parameter.getDeclaringCallable().getJavaMember());
+ }
+ }
+
+ public AnnotatedTypeBuilder<X> addToParameter(AnnotatedParameter<? super X> parameter, Annotation annotation)
+ {
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Method)
+ {
+ Method method = (Method) parameter.getDeclaringCallable().getJavaMember();
+ return addToMethodParameter(method, parameter.getPosition(), annotation);
+ }
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Constructor<?>)
+ {
+ @SuppressWarnings("unchecked")
+ Constructor<X> constructor = (Constructor<X>) parameter.getDeclaringCallable().getJavaMember();
+ return addToConstructorParameter(constructor, parameter.getPosition(), annotation);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Cannot remove from parameter " + parameter + " - cannot operate on member " + parameter.getDeclaringCallable().getJavaMember());
+ }
+ }
public AnnotatedTypeBuilder<X> removeFromAll(Class<? extends Annotation> annotationType)
{
@@ -436,24 +505,50 @@
{
fieldTypes.put(field, type);
}
+
+ public void overrideFieldType(AnnotatedField<? super X> field, Type type)
+ {
+ fieldTypes.put(field.getJavaMember(), type);
+ }
- public void overrideMethodParameterType(Method method, Type type, int position)
+ public AnnotatedTypeBuilder<X> overrideMethodParameterType(Method method, int position, Type type)
{
if (methodParameterTypes.get(method) == null)
{
methodParameterTypes.put(method, new HashMap<Integer, Type>());
}
methodParameterTypes.get(method).put(position, type);
+ return this;
}
- public void overrideConstructorParameterType(Constructor<?> constructor, Type type, int position)
+ public AnnotatedTypeBuilder<X> overrideConstructorParameterType(Constructor<X> constructor, int position, Type type)
{
if (constructorParameterTypes.get(constructor) == null)
{
constructorParameterTypes.put(constructor, new HashMap<Integer, Type>());
}
constructorParameterTypes.get(constructor).put(position, type);
+ return this;
}
+
+ public AnnotatedTypeBuilder<X> overrideParameterType(AnnotatedParameter<? super X> parameter, Type type)
+ {
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Method)
+ {
+ Method method = (Method) parameter.getDeclaringCallable().getJavaMember();
+ return overrideMethodParameterType(method, parameter.getPosition(), type);
+ }
+ if (parameter.getDeclaringCallable().getJavaMember() instanceof Constructor<?>)
+ {
+ @SuppressWarnings("unchecked")
+ Constructor<X> constructor = (Constructor<X>) parameter.getDeclaringCallable().getJavaMember();
+ return overrideConstructorParameterType(constructor, parameter.getPosition(), type);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Cannot remove from parameter " + parameter + " - cannot operate on member " + parameter.getDeclaringCallable().getJavaMember());
+ }
+ }
public Class<X> getJavaClass()
{
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/Generic.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/Generic.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/Generic.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -19,6 +19,7 @@
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -31,6 +32,7 @@
*/
@Retention( RUNTIME )
@Target( TYPE )
+@Documented
public @interface Generic
{
Class<?> value();
Added: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBean.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBean.java (rev 0)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBean.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.weld.extensions.bean.generic;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ *
+ * Qualifier used to identify generic bean injection points. Generic bean
+ * injections can only occur in other generic beans which share the same config
+ * annotation.
+ *
+ *
+ * @author stuart
+ * @author Pete Muir
+ *
+ */
+@Retention(RUNTIME)
+@Target( { METHOD, FIELD, PARAMETER, TYPE })
+@Qualifier
+@Documented
+public @interface GenericBean
+{
+
+}
Property changes on: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -16,9 +16,6 @@
*/
package org.jboss.weld.extensions.bean.generic;
-import static org.jboss.weld.extensions.util.Reflections.EMPTY_ANNOTATION_ARRAY;
-import static org.jboss.weld.extensions.util.Reflections.getQualifiers;
-
import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
import java.lang.reflect.Type;
@@ -86,6 +83,7 @@
void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event)
{
event.addQualifier(Synthetic.class);
+ event.addQualifier(GenericBean.class);
}
void processAnnotatedType(@Observes ProcessAnnotatedType<?> event)
@@ -201,7 +199,10 @@
Synthetic genericBeanQualifier = syntheticProvider.get(concrete);
AnnotatedTypeBuilder<X> builder = new AnnotatedTypeBuilder<X>().readFromType(annotatedType);
+
+ // Add in the synthetic qualifier to the bean
builder.addToClass(genericBeanQualifier);
+
for (AnnotatedField<? super X> field : annotatedType.getFields())
{
if (field.isAnnotationPresent(Inject.class))
@@ -210,56 +211,27 @@
if (concrete.annotationType().isAssignableFrom(field.getJavaMember().getType()))
{
Synthetic genericConfigurationQualifier = syntheticProvider.get();
- builder.addToField(field.getJavaMember(), genericConfigurationQualifier);
+ builder.addToField(field, genericConfigurationQualifier);
event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
}
- else
+ // if this is a generic bean injection point
+ else if (field.isAnnotationPresent(Inject.class) && field.isAnnotationPresent(GenericBean.class))
{
- /*
- * check to see if we should be injecting a generic bean we do
- * this by checking if there are any beans that can be injected
- * into this point if there is not then we assume it is a generic
- * injection point this has the downside that if it is actually a
- * deployment error then it will confuse the user
- */
- // TODO Improve this
- Annotation[] qualifiers = getQualifiers(field.getAnnotations(), beanManager).toArray(EMPTY_ANNOTATION_ARRAY);
- Set<Bean<?>> beans = beanManager.getBeans(field.getJavaMember().getType(), qualifiers);
- if (beans.isEmpty())
- {
- builder.addToField(field.getJavaMember(), genericBeanQualifier);
- }
+ builder.removeFromField(field, GenericBean.class);
+ builder.addToField(field, genericBeanQualifier);
}
}
- else if (field.isAnnotationPresent(Produces.class))
- {
- // TODO: register a producer with the appropriate qualifier
- }
}
- for (AnnotatedMethod<?> method : annotatedType.getMethods())
+ for (AnnotatedMethod<? super X> method : annotatedType.getMethods())
{
- // TODO: need to properly handle Observer methods and Disposal
- // methods
- if (method.isAnnotationPresent(Produces.class))
+ if (method.isAnnotationPresent(Inject.class))
{
- // TODO: we need to register the producer bean, so this is not
- // very useful at the moment
- for (AnnotatedParameter<?> pm : method.getParameters())
+ for (AnnotatedParameter<? super X> parameter : method.getParameters())
{
- Class<?> paramType = method.getJavaMember().getParameterTypes()[pm.getPosition()];
-
- // check to see if we should be injecting a generic bean
- // we do this by checking if there are any beans that can be
- // injected into this point
- // if there is not then we assume it is a generic injection
- // point
- // this has the downside that if it is actually a deployment
- // error then it will confuse the user
- Annotation[] qualifiers = getQualifiers(pm.getAnnotations(), beanManager).toArray(EMPTY_ANNOTATION_ARRAY);
- Set<Bean<?>> beans = beanManager.getBeans(paramType, qualifiers);
- if (beans.isEmpty())
+ if (parameter.isAnnotationPresent(GenericBean.class))
{
- builder.addToMethod(method.getJavaMember(), genericBeanQualifier);
+ builder.removeFromParameter(parameter, GenericBean.class);
+ builder.addToParameter(parameter, genericBeanQualifier);
}
}
}
@@ -271,12 +243,10 @@
{
for (AnnotatedParameter<X> parameter : constructor.getParameters())
{
- Class<?> paramType = constructor.getJavaMember().getParameterTypes()[parameter.getPosition()];
- Annotation[] qualifiers = getQualifiers(parameter.getAnnotations(), beanManager).toArray(EMPTY_ANNOTATION_ARRAY);
- Set<Bean<?>> beans = beanManager.getBeans(paramType, qualifiers);
- if (beans.isEmpty())
+ if (parameter.isAnnotationPresent(GenericBean.class))
{
- builder.addToConstructorParameter(constructor.getJavaMember(), parameter.getPosition(), genericBeanQualifier);
+ builder.removeFromParameter(parameter, GenericBean.class);
+ builder.addToParameter(parameter, genericBeanQualifier);
}
}
}
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericConfiguration.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericConfiguration.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericConfiguration.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -16,6 +16,7 @@
*/
package org.jboss.weld.extensions.bean.generic;
+import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -30,6 +31,7 @@
*/
@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.TYPE })
+@Documented
public @interface GenericConfiguration
{
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -111,7 +111,7 @@
if (f.isAnnotationPresent(Exact.class))
{
Class<?> type = f.getAnnotation(Exact.class).value();
- builder.overrideFieldType(f.getJavaMember(), type);
+ builder.overrideFieldType(f, type);
}
}
// method parameters
@@ -122,7 +122,7 @@
if (p.isAnnotationPresent(Exact.class))
{
Class<?> type = p.getAnnotation(Exact.class).value();
- builder.overrideMethodParameterType(m.getJavaMember(), type, p.getPosition());
+ builder.overrideParameterType(p, type);
}
}
}
@@ -134,7 +134,7 @@
if (p.isAnnotationPresent(Exact.class))
{
Class<?> type = p.getAnnotation(Exact.class).value();
- builder.overrideConstructorParameterType(c.getJavaMember(), type, p.getPosition());
+ builder.overrideParameterType(p, type);
}
}
}
@@ -151,10 +151,10 @@
// remove bean constructors annotated @Inject
for (AnnotatedConstructor<X> constructor2 : pat.getAnnotatedType().getConstructors())
{
- annotatedTypeBuilder.removeFromConstructor(constructor2.getJavaMember(), Inject.class);
+ annotatedTypeBuilder.removeFromConstructor(constructor2, Inject.class);
}
// make the constructor annotated @Constructs the bean constructor
- annotatedTypeBuilder.addToConstructor(constructor.getJavaMember(), InjectLiteral.INSTANCE);
+ annotatedTypeBuilder.addToConstructor(constructor, InjectLiteral.INSTANCE);
// add all the annotations of this constructor to the class
for (Annotation ann : constructor.getAnnotations())
{
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Bar.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Bar.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Bar.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -21,28 +21,28 @@
import org.jboss.weld.extensions.bean.generic.Generic;
/**
- * A generic bean
+ * A generic bean for the config annotation Message
*
* @author pmuir
*
*/
-(a)Generic(Garply.class)
+(a)Generic(Message.class)
public class Bar
{
@Inject
- private Garply injectedGarply;
+ private Message injectedMessage;
- // A Garply with no @Inject
- private Garply garply;
+ // A Message with no @Inject
+ private Message message;
- public Garply getInjectedGarply()
+ public Message getInjectedMessage()
{
- return injectedGarply;
+ return injectedMessage;
}
- public Garply getGarply()
+ public Message getMessage()
{
- return garply;
+ return message;
}
}
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -19,26 +19,27 @@
import javax.inject.Inject;
import org.jboss.weld.extensions.bean.generic.Generic;
+import org.jboss.weld.extensions.bean.generic.GenericBean;
/**
+ * A generic bean for the config annotation Garply
*
- *
* @author pmuir
*
*/
-(a)Generic(Garply.class)
+(a)Generic(Message.class)
public class Baz
{
- @Inject
+ @Inject @GenericBean
private Bar bar;
@Inject
private Corge corge;
@Inject
- private Garply garply;
+ private Message message;
public Bar getBar()
{
@@ -50,8 +51,8 @@
return corge;
}
- public Garply getGarply()
+ public Message getMessage()
{
- return garply;
+ return message;
}
}
Deleted: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/BazProducer.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/BazProducer.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/BazProducer.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -1,40 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.test.bean.generic;
-
-import javax.enterprise.inject.Produces;
-
-/**
- * A producer of Baz's
- * @author pmuir
- *
- */
-public class BazProducer
-{
- @SuppressWarnings("unused")
- @Grault(1)
- @Produces
- @Garply("hello1")
- private Baz baz1;
-
- @SuppressWarnings("unused")
- @Grault(2)
- @Produces
- @Garply("hello2")
- private Baz baz2;
-
-}
Copied: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Foo.java (from rev 6781, extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Grault.java)
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Foo.java (rev 0)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Foo.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.weld.extensions.test.bean.generic;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ * A qualifier
+ *
+ * @author pmuir
+ *
+ */
+
+@Retention(RUNTIME)
+@Target({METHOD, FIELD, PARAMETER, TYPE})
+@Qualifier
+public @interface Foo
+{
+ int value();
+}
Deleted: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -1,43 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.test.bean.generic;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import org.jboss.weld.extensions.bean.generic.GenericConfiguration;
-
-/**
- * The annotation used to configure a generic bean
- *
- * @author pmuir
- *
- */
-
-@Retention(RUNTIME)
-@Target({METHOD, FIELD, PARAMETER, TYPE})
-@GenericConfiguration
-public @interface Garply
-{
- String value();
-}
Copied: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java (from rev 6781, extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/BazProducer.java)
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java (rev 0)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanProducer.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.weld.extensions.test.bean.generic;
+
+import javax.enterprise.inject.Produces;
+
+/**
+ * A producer of generic beans
+ * @author pmuir
+ *
+ */
+public class GenericBeanProducer
+{
+ @SuppressWarnings("unused")
+ @Foo(1)
+ @Produces
+ @Message("hello1")
+ private Baz baz1;
+
+ @SuppressWarnings("unused")
+ @Foo(2)
+ @Produces
+ @Message("hello2")
+ private Baz baz2;
+
+ @Foo(1)
+ @Produces
+ @Message("bye1")
+ private Bar bar1;
+
+ @Foo(2)
+ @Produces
+ @Message("bye2")
+ private Bar bar2;
+
+}
Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -16,6 +16,10 @@
*/
package org.jboss.weld.extensions.test.bean.generic;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
import javax.inject.Inject;
import org.jboss.arquillian.api.Deployment;
@@ -36,32 +40,51 @@
}
@Inject
- @Grault(1)
+ @Foo(1)
private Baz baz1;
@Inject
- @Grault(2)
+ @Foo(2)
private Baz baz2;
+
+ @Inject
+ @Foo(1)
+ private Bar bar1;
+
+ @Inject
+ @Foo(2)
+ private Bar bar2;
@Test
public void testGeneric()
{
- // Test that the generic configuration injection wiring is working!
- assert baz1.getGarply() != null;
- assert baz1.getGarply().value().equals("hello1");
- assert baz2.getGarply() != null;
- assert baz2.getGarply().value().equals("hello2");
- assert baz1.getBar() != null;
- assert baz1.getBar().getInjectedGarply() != null;
- assert baz1.getBar().getInjectedGarply().value().equals("hello1");
- assert baz2.getBar() != null;
- assert baz2.getBar().getInjectedGarply() != null;
- assert baz2.getBar().getInjectedGarply().value().equals("hello2");
+ // Check that normal bean injection is working correctly!
+ assertNotNull(baz2.getCorge());
+ assertEquals(baz2.getCorge().getName(), "fred");
+
+ // Test that the generic configuration injection wiring is working for bar
+ assertNotNull(bar1.getInjectedMessage());
+ assertEquals(bar1.getInjectedMessage().value(), "bye1");
+ assertNotNull(bar2.getInjectedMessage());
+ assertEquals(bar2.getInjectedMessage().value(), "bye2");
+
+ // Check that the generic configuration injection wiring is working for baz
+ assertNotNull(baz1.getMessage());
+ assertEquals(baz1.getMessage().value(), "hello1");
+ assertNotNull(baz2.getMessage());
+ assertEquals(baz2.getMessage().value(), "hello2");
+
+ // Check that generic beans can inject each other
+ assertNotNull(baz1.getBar());
+ assertNotNull(baz1.getBar().getInjectedMessage());
+ assertEquals(baz1.getBar().getInjectedMessage().value(), "hello1");
+ assertNotNull(baz2.getBar());
+ assertNotNull(baz2.getBar().getInjectedMessage());
+ assertEquals(baz2.getBar().getInjectedMessage().value(), "hello2");
+
// Check that this isn't affecting annotations on the generic bean without @Inject
- assert baz1.getBar().getGarply() == null;
- assert baz2.getBar().getGarply() == null;
- // Check that normal bean injection is working correctly!
- assert baz2.getCorge() != null;
- assert baz2.getCorge().getName() == "fred";
+ assertNull(baz1.getBar().getMessage());
+ assertNull(baz2.getBar().getMessage());
+
}
}
Deleted: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Grault.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Grault.java 2010-07-24 13:23:55 UTC (rev 6798)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Grault.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -1,43 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.test.bean.generic;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * A qualifier
- *
- * @author pmuir
- *
- */
-
-@Retention(RUNTIME)
-@Target({METHOD, FIELD, PARAMETER, TYPE})
-@Qualifier
-public @interface Grault
-{
- int value();
-}
Copied: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Message.java (from rev 6785, extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Garply.java)
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Message.java (rev 0)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Message.java 2010-07-24 13:59:59 UTC (rev 6799)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.weld.extensions.test.bean.generic;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import org.jboss.weld.extensions.bean.generic.GenericConfiguration;
+
+/**
+ * The annotation used to configure a generic bean
+ *
+ * @author pmuir
+ *
+ */
+
+@Retention(RUNTIME)
+@Target({METHOD, FIELD, PARAMETER, TYPE})
+@GenericConfiguration
+public @interface Message
+{
+ String value();
+}
13 years, 9 months
Weld SVN: r6798 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 09:23:55 -0400 (Sat, 24 Jul 2010)
New Revision: 6798
Modified:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java
Log:
minor
Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java 2010-07-24 13:05:27 UTC (rev 6797)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/annotated/AnnotatedTypeBuilder.java 2010-07-24 13:23:55 UTC (rev 6798)
@@ -79,9 +79,9 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromClass(Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromClass(Class<? extends Annotation> annotationType)
{
- typeAnnotations.remove(annotation);
+ typeAnnotations.remove(annotationType);
return this;
}
@@ -95,11 +95,11 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromField(Field field, Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromField(Field field, Class<? extends Annotation> annotationType)
{
if (fields.get(field) != null)
{
- fields.get(field).remove(annotation);
+ fields.get(field).remove(annotationType);
}
return this;
}
@@ -114,11 +114,11 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromMethod(Method method, Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromMethod(Method method, Class<? extends Annotation> annotationType)
{
if (methods.get(method) != null)
{
- methods.get(method).remove(annotation);
+ methods.get(method).remove(annotationType);
}
return this;
}
@@ -141,13 +141,13 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromMethodParameter(Method method, int position, Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromMethodParameter(Method method, int position, Class<? extends Annotation> annotationType)
{
if (methodParameters.get(method) != null)
{
if (methodParameters.get(method).get(position) != null)
{
- methodParameters.get(method).get(position).remove(annotation);
+ methodParameters.get(method).get(position).remove(annotationType);
}
}
return this;
@@ -163,11 +163,11 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromConstructor(Constructor<?> constructor, Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromConstructor(Constructor<?> constructor, Class<? extends Annotation> annotationType)
{
if (constructors.get(constructor) != null)
{
- constructors.get(constructor).remove(annotation);
+ constructors.get(constructor).remove(annotationType);
}
return this;
}
@@ -190,44 +190,44 @@
return this;
}
- public AnnotatedTypeBuilder<X> removeFromConstructorParameter(Constructor<X> constructor, int position, Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromConstructorParameter(Constructor<X> constructor, int position, Class<? extends Annotation> annotationType)
{
if (constructorParameters.get(constructor) != null)
{
if (constructorParameters.get(constructor).get(position) != null)
{
- constructorParameters.get(constructor).get(position).remove(annotation);
+ constructorParameters.get(constructor).get(position).remove(annotationType);
}
}
return this;
}
- public AnnotatedTypeBuilder<X> removeFromAll(Class<? extends Annotation> annotation)
+ public AnnotatedTypeBuilder<X> removeFromAll(Class<? extends Annotation> annotationType)
{
- removeFromClass(annotation);
+ removeFromClass(annotationType);
for (Entry<Field, AnnotationBuilder> field : fields.entrySet())
{
- field.getValue().remove(annotation);
+ field.getValue().remove(annotationType);
}
for (Entry<Method, AnnotationBuilder> method : methods.entrySet())
{
- method.getValue().remove(annotation);
+ method.getValue().remove(annotationType);
if (methodParameters.get(method.getKey()) != null)
{
for (Entry<Integer, AnnotationBuilder> parameter : methodParameters.get(method.getKey()).entrySet())
{
- parameter.getValue().remove(annotation);
+ parameter.getValue().remove(annotationType);
}
}
}
for (Entry<Constructor<?>, AnnotationBuilder> constructor : constructors.entrySet())
{
- constructor.getValue().remove(annotation);
+ constructor.getValue().remove(annotationType);
if (constructorParameters.get(constructor.getKey()) != null)
{
for (Entry<Integer, AnnotationBuilder> parameter : constructorParameters.get(constructor.getKey()).entrySet())
{
- parameter.getValue().remove(annotation);
+ parameter.getValue().remove(annotationType);
}
}
}
13 years, 9 months
Weld SVN: r6797 - extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-07-24 09:05:27 -0400 (Sat, 24 Jul 2010)
New Revision: 6797
Removed:
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanInjectionTargetWrapper.java
extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/InjectConfiguration.java
Log:
cleanup
Deleted: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanInjectionTargetWrapper.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanInjectionTargetWrapper.java 2010-07-24 13:02:56 UTC (rev 6796)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanInjectionTargetWrapper.java 2010-07-24 13:05:27 UTC (rev 6797)
@@ -1,86 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.bean.generic;
-
-import static org.jboss.weld.extensions.util.Reflections.getAllFields;
-import static org.jboss.weld.extensions.util.Reflections.getField;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.InjectionTarget;
-
-import org.jboss.weld.extensions.bean.ForwardingInjectionTarget;
-
-/**
- * injection target wrapper that injects the configuration for generic beans
- *
- * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
- *
- * @param <T>
- */
-public class GenericBeanInjectionTargetWrapper<T> extends ForwardingInjectionTarget<T>
-{
-
- private final InjectionTarget<T> delegate;
- private final Annotation annotation;
- private final AnnotatedType<T> annotatedType;
-
- public GenericBeanInjectionTargetWrapper(AnnotatedType<T> annotatedType, InjectionTarget<T> delegate, Annotation annotation)
- {
- this.annotation = annotation;
- this.delegate = delegate;
- this.annotatedType = annotatedType;
- }
-
- @Override
- protected InjectionTarget<T> delegate()
- {
- return delegate;
- }
-
- @Override
- public void inject(T instance, CreationalContext<T> ctx)
- {
- for (Field f : getAllFields(instance.getClass()))
- {
-
- if (annotation.annotationType().isAssignableFrom(f.getType()))
- {
- AnnotatedField<? super T> annotatedField = getField(annotatedType, f);
- if (annotatedField.isAnnotationPresent(InjectConfiguration.class))
- {
- try
- {
- f.setAccessible(true);
- f.set(instance, annotation);
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e);
- }
- }
- }
- }
-
- delegate().inject(instance, ctx);
- }
-
-}
Deleted: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/InjectConfiguration.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/InjectConfiguration.java 2010-07-24 13:02:56 UTC (rev 6796)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/InjectConfiguration.java 2010-07-24 13:05:27 UTC (rev 6797)
@@ -1,43 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.weld.extensions.bean.generic;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-import javax.enterprise.util.AnnotationLiteral;
-
-/**
- * Annotation used to indicate {@link GenericConfiguration} injection points
- *
- * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
- *
- */
-(a)Retention(RetentionPolicy.RUNTIME)
-public @interface InjectConfiguration
-{
-
- public static class InjectConfigurationLiteral extends AnnotationLiteral<InjectConfiguration> implements InjectConfiguration
- {
-
- private static final long serialVersionUID = 5365615929893138969L;
-
- }
-
- public static final InjectConfiguration INSTANCE = new InjectConfigurationLiteral();
-
-}
13 years, 9 months