[webbeans-commits] Webbeans SVN: r1131 - ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean and 11 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Tue Jan 20 16:13:56 EST 2009
Author: pete.muir at jboss.org
Date: 2009-01-20 16:13:55 -0500 (Tue, 20 Jan 2009)
New Revision: 1131
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java
tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java
tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
Log:
realization (still some bugs)
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -56,6 +56,7 @@
import org.jboss.webbeans.ejb.EjbDescriptorCache;
import org.jboss.webbeans.ejb.spi.EjbResolver;
import org.jboss.webbeans.event.EventManager;
+import org.jboss.webbeans.event.ObserverImpl;
import org.jboss.webbeans.injection.InjectionPointProvider;
import org.jboss.webbeans.introspector.AnnotatedClass;
import org.jboss.webbeans.introspector.AnnotatedItem;
@@ -414,6 +415,12 @@
this.eventManager.addObserver(observer, eventType, bindings);
return this;
}
+
+ public <T> Manager addObserver(ObserverImpl<T> observer)
+ {
+ addObserver(observer, observer.getEventType(), observer.getBindingsAsArray());
+ return this;
+ }
/**
* Registers an observer for a given event type literal and binding types
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -39,7 +39,7 @@
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.injection.InjectionPointImpl;
import org.jboss.webbeans.introspector.AnnotatedItem;
-import org.jboss.webbeans.introspector.jlr.AbstractAnnotatedItem.AnnotationMap;
+import org.jboss.webbeans.introspector.jlr.AnnotationStore.AnnotationMap;
import org.jboss.webbeans.literal.CurrentLiteral;
import org.jboss.webbeans.log.LogProvider;
import org.jboss.webbeans.log.Logging;
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -62,7 +62,7 @@
public static <T> ProducerMethodBean<T> of(Method method, AbstractClassBean<?> declaringBean, ManagerImpl manager)
{
- return of(new AnnotatedMethodImpl<T>(method, declaringBean.getAnnotatedItem()), declaringBean, manager);
+ return of(AnnotatedMethodImpl.<T>of(method, declaringBean.getAnnotatedItem()), declaringBean, manager);
}
/**
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -4,16 +4,16 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import javax.webbeans.DefinitionException;
import javax.webbeans.Fires;
import javax.webbeans.Initializer;
-import javax.webbeans.Observer;
import javax.webbeans.Observes;
import javax.webbeans.Obtains;
import javax.webbeans.Produces;
+import javax.webbeans.Realizes;
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.bean.AbstractBean;
@@ -44,6 +44,8 @@
private static final LogProvider log = Logging.getLogProvider(BeanDeployer.class);
+ private static final Set<Annotation> EMPTY_BINDINGS = Collections.emptySet();
+
private final Set<AbstractBean<?, ?>> beans;
private final ManagerImpl manager;
@@ -99,100 +101,90 @@
*
* @param bean The bean representation
*/
- protected void createBean(AbstractClassBean<?> bean, AnnotatedClass<?> annotatedClass)
+ protected void createBean(AbstractClassBean<?> bean, final AnnotatedClass<?> annotatedClass)
{
beans.add(bean);
manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
- for (AnnotatedMethod<?> producerMethod : annotatedClass.getDeclaredAnnotatedMethods(Produces.class))
+ registerProducerMethods(bean, annotatedClass, EMPTY_BINDINGS);
+ registerProducerFields(bean, annotatedClass, EMPTY_BINDINGS);
+ registerObserverMethods(bean, annotatedClass);
+ registerFacades(bean.getAnnotatedInjectionPoints());
+
+ if (annotatedClass.isAnnotationPresent(Realizes.class))
{
- ProducerMethodBean<?> producerMethodBean = ProducerMethodBean.of(producerMethod, bean, manager);
- beans.add(producerMethodBean);
- manager.getResolver().addInjectionPoints(producerMethodBean.getAnnotatedInjectionPoints());
- registerEvents(producerMethodBean.getAnnotatedInjectionPoints(), beans);
- log.info("Web Bean: " + producerMethodBean);
+ registerProducerMethods(bean, annotatedClass.getSuperclass(), bean.getBindings());
+ registerProducerFields(bean, annotatedClass.getSuperclass(), bean.getBindings());
}
- for (AnnotatedField<?> producerField : annotatedClass.getDeclaredAnnotatedFields(Produces.class))
+
+ log.info("Web Bean: " + bean);
+ }
+
+ private void registerProducerMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraBindings)
+ {
+ for (AnnotatedMethod<?> method : annotatedClass.getDeclaredAnnotatedMethods(Produces.class))
{
- ProducerFieldBean<?> producerFieldBean = ProducerFieldBean.of(producerField, bean, manager);
- beans.add(producerFieldBean);
- log.info("Web Bean: " + producerFieldBean);
+ ProducerMethodBean<?> bean = ProducerMethodBean.of(method.wrap(extraBindings), declaringBean, manager);
+ beans.add(bean);
+ manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
+ registerFacades(bean.getAnnotatedInjectionPoints());
+ log.info("Web Bean: " + bean);
}
- for (AnnotatedItem<?, ?> injectionPoint : bean.getAnnotatedInjectionPoints())
+ }
+
+ private void registerProducerFields(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraBindings)
+ {
+ for (AnnotatedField<?> field : annotatedClass.getDeclaredAnnotatedFields(Produces.class))
{
- if (injectionPoint.isAnnotationPresent(Fires.class))
- {
- registerEvent(injectionPoint, beans);
- }
- if (injectionPoint.isAnnotationPresent(Obtains.class))
- {
- // TODO FIx this
- @SuppressWarnings("unchecked")
- InstanceBean<Object, Field> instanceBean = InstanceBean.of((AnnotatedItem) injectionPoint, manager);
- beans.add(instanceBean);
- log.info("Web Bean: " + instanceBean);
- }
+ ProducerFieldBean<?> bean = ProducerFieldBean.of(field.wrap(extraBindings), declaringBean, manager);
+ beans.add(bean);
+ log.info("Web Bean: " + bean);
}
+ }
+
+ private void registerObserverMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
+ {
for (AnnotatedMethod<?> observerMethod : annotatedClass.getDeclaredMethodsWithAnnotatedParameters(Observes.class))
{
- ObserverImpl<?> observer = ObserverImpl.of(observerMethod, bean, manager);
- if (observerMethod.getAnnotatedParameters(Observes.class).size() == 1)
+ ObserverImpl<?> observer = ObserverImpl.of(observerMethod, declaringBean, manager);
+ manager.addObserver(observer);
+ }
+ }
+
+ private void registerFacades(Set<AnnotatedItem<?, ?>> injectionPoints)
+ {
+ for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
+ {
+ if (injectionPoint.isAnnotationPresent(Fires.class))
{
- registerObserver(observer, observerMethod.getAnnotatedParameters(Observes.class).get(0).getType(), observerMethod.getAnnotatedParameters(Observes.class).get(0).getBindingTypesAsArray());
+ registerEvent(injectionPoint);
}
- else
+ if (injectionPoint.isAnnotationPresent(Obtains.class))
{
- throw new DefinitionException("Observer method can only have one parameter annotated @Observes " + observer);
+ registerInstance(injectionPoint);
}
-
}
- log.info("Web Bean: " + bean);
}
-
- /**
- * Registers an observer with the getManager()
- *
- * @param observer The observer
- * @param eventType The event type to observe
- * @param bindings The binding types to observe on
- */
- private <T> void registerObserver(Observer<T> observer, Class<?> eventType, Annotation[] bindings)
+ private void registerEvent(AnnotatedItem<?, ?> injectionPoint)
{
// TODO Fix this!
@SuppressWarnings("unchecked")
- Class<T> clazz = (Class<T>) eventType;
- manager.addObserver(observer, clazz, bindings);
+ EventBean<Object, Method> bean = EventBean.of((AnnotatedItem) injectionPoint, manager);
+ beans.add(bean);
+ log.info("Web Bean: " + bean);
}
-
- /**
- * Iterates through the injection points and creates and registers any Event
- * observables specified with the @Observable annotation
- *
- * @param injectionPoints A set of injection points to inspect
- * @param beans A set of beans to add the Event beans to
- */
- private void registerEvents(Set<AnnotatedItem<?, ?>> injectionPoints, Set<AbstractBean<?, ?>> beans)
+
+ private void registerInstance(AnnotatedItem<?, ?> injectionPoint)
{
- for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
- {
- registerEvent(injectionPoint, beans);
- }
+ // TODO FIx this
+ @SuppressWarnings("unchecked")
+ InstanceBean<Object, Field> bean = InstanceBean.of((AnnotatedItem) injectionPoint, manager);
+ beans.add(bean);
+ log.info("Web Bean: " + bean);
}
-
- private void registerEvent(AnnotatedItem<?, ?> injectionPoint, Set<AbstractBean<?, ?>> beans)
- {
- if (injectionPoint.isAnnotationPresent(Fires.class))
- {
- // TODO Fix this!
- @SuppressWarnings("unchecked")
- EventBean<Object, Method> eventBean = EventBean.of((AnnotatedItem) injectionPoint, manager);
- beans.add(eventBean);
- log.info("Web Bean: " + eventBean);
- }
- }
/**
* Indicates if the type is a simple Web Bean
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,7 @@
package org.jboss.webbeans.event;
+import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
@@ -68,11 +69,13 @@
NONE, BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
}
- private Bean<?> observerBean;
+ private final Bean<?> observerBean;
private final AnnotatedMethod<?> observerMethod;
private TransactionObservationPhase transactionObservationPhase;
- private boolean conditional;
+ private final boolean conditional;
private ManagerImpl manager;
+ private final Class<T> eventType;
+ private final Annotation[] bindings;
/**
* Creates an observer
@@ -95,14 +98,20 @@
* @param observerBean The observer bean
* @param manager The Web Beans manager
*/
- public ObserverImpl(final AnnotatedMethod<?> observer, final Bean<?> observerBean, final ManagerImpl manager)
+ protected ObserverImpl(final AnnotatedMethod<?> observer, final Bean<?> observerBean, final ManagerImpl manager)
{
this.manager = manager;
this.observerBean = observerBean;
this.observerMethod = observer;
- validateObserverMethod();
+ checkObserverMethod();
+
+ @SuppressWarnings("unchecked")
+ Class<T> c = (Class<T>) observerMethod.getAnnotatedParameters(Observes.class).get(0).getType();
+ this.eventType = c;
+
+ this.bindings = observerMethod.getAnnotatedParameters(Observes.class).get(0).getBindingTypesAsArray();
initTransactionObservationPhase();
- conditional = !observerMethod.getAnnotatedParameters(IfExists.class).isEmpty();
+ this.conditional = !observerMethod.getAnnotatedParameters(IfExists.class).isEmpty();
}
private void initTransactionObservationPhase()
@@ -141,13 +150,13 @@
/**
* Performs validation of the observer method for compliance with the specifications.
*/
- private void validateObserverMethod()
+ private void checkObserverMethod()
{
// Make sure exactly one and only one parameter is annotated with Observes
List<AnnotatedParameter<?>> eventObjects = this.observerMethod.getAnnotatedParameters(Observes.class);
if (eventObjects.size() > 1)
{
- throw new DefinitionException(this + " is invalid because it contains more than event parameter");
+ throw new DefinitionException(this + " is invalid because it contains more than event parameter annotated @Observes");
}
// Make sure the event object above is not parameterized with a type
// variable or wildcard
@@ -304,4 +313,14 @@
return builder.toString();
}
+ public Class<T> getEventType()
+ {
+ return eventType;
+ }
+
+ public Annotation[] getBindingsAsArray()
+ {
+ return bindings;
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -43,4 +43,6 @@
*/
public Set<AnnotatedMethod<?>> getAnnotatedMembers(Class<? extends Annotation> annotationType);
+ public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations);
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -151,5 +151,7 @@
public boolean isNonStaticMemberClass();
public boolean isParameterizedType();
+
+ public AnnotatedClass<T> wrap(Set<Annotation> annotations);
}
\ No newline at end of file
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -20,6 +20,7 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.util.List;
+import java.util.Set;
import org.jboss.webbeans.ManagerImpl;
@@ -64,5 +65,7 @@
* @return An abstraction of the declaring class
*/
public AnnotatedType<T> getDeclaringClass();
+
+ public AnnotatedConstructor<T> wrap(Set<Annotation> annotations);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,7 +17,9 @@
package org.jboss.webbeans.introspector;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
+import java.util.Set;
import javax.webbeans.manager.Manager;
@@ -97,4 +99,6 @@
public boolean isTransient();
+ public AnnotatedField<T> wrap(Set<Annotation> annotations);
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -183,5 +183,7 @@
* @return The name
*/
public String getName();
+
+ public AnnotatedItem<T, S> wrap(Set<Annotation> annotations);
}
\ No newline at end of file
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -16,7 +16,9 @@
*/
package org.jboss.webbeans.introspector;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
+import java.util.Set;
/**
* AnnotedMember provides enhanced access to an annotated member
*
@@ -28,4 +30,6 @@
public S getMember();
+ public AnnotatedMember<T, S> wrap(Set<Annotation> annotations);
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -130,5 +130,7 @@
public boolean isEquivalent(Method method);
public Method getAnnotatedMethod();
+
+ public AnnotatedMethod<T> wrap(Set<Annotation> annotations);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,9 @@
package org.jboss.webbeans.introspector;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
import javax.webbeans.manager.Manager;
@@ -38,4 +41,6 @@
public T getValue(Manager manager);
public AnnotatedMember<?, ?> getDeclaringMember();
+
+ public AnnotatedParameter<T> wrap(Set<Annotation> annotations);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,9 @@
package org.jboss.webbeans.introspector;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
/**
* AnnotatedType provides a uniform access to a type defined either in Java or
* XML
@@ -40,5 +43,7 @@
* @return true if equivalent
*/
public boolean isEquivalent(Class<?> clazz);
+
+ public AnnotatedType<T> wrap(Set<Annotation> annotations);
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,27 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+public abstract class ForwardingAnnotatedAnnotation<T extends Annotation> extends ForwardingAnnotatedType<T> implements AnnotatedAnnotation<T>
+{
+
+ @Override
+ protected abstract AnnotatedAnnotation<T> delegate();
+
+ public Set<AnnotatedMethod<?>> getAnnotatedMembers(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getAnnotatedMembers(annotationType);
+ }
+
+ public Set<AnnotatedMethod<?>> getMembers()
+ {
+ return delegate().getMembers();
+ }
+
+ public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,98 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+public abstract class ForwardingAnnotatedClass<T> extends ForwardingAnnotatedItem<T, Class<T>> implements AnnotatedClass<T>
+{
+
+ protected abstract AnnotatedClass<T> delegate();
+
+ public Set<AnnotatedConstructor<T>> getAnnotatedConstructors(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getAnnotatedConstructors(annotationType);
+ }
+
+ public Set<AnnotatedField<?>> getAnnotatedFields(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getAnnotatedFields(annotationType);
+ }
+
+ public Set<AnnotatedMethod<?>> getAnnotatedMethods(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getAnnotatedMethods(annotationType);
+ }
+
+ public AnnotatedConstructor<T> getConstructor(List<Class<?>> arguments)
+ {
+ return delegate().getConstructor(arguments);
+ }
+
+ public Set<AnnotatedConstructor<T>> getConstructors()
+ {
+ return delegate().getConstructors();
+ }
+
+ public Set<AnnotatedField<?>> getDeclaredAnnotatedFields(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getDeclaredAnnotatedFields(annotationType);
+ }
+
+ public Set<AnnotatedMethod<?>> getDeclaredAnnotatedMethods(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getDeclaredAnnotatedMethods(annotationType);
+ }
+
+ public Set<AnnotatedMethod<?>> getDeclaredMethodsWithAnnotatedParameters(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getDeclaredMethodsWithAnnotatedParameters(annotationType);
+ }
+
+ public Set<AnnotatedField<?>> getFields()
+ {
+ return delegate().getFields();
+ }
+
+ public Set<AnnotatedField<?>> getMetaAnnotatedFields(Class<? extends Annotation> metaAnnotationType)
+ {
+ return delegate().getMetaAnnotatedFields(metaAnnotationType);
+ }
+
+ public AnnotatedMethod<?> getMethod(Method method)
+ {
+ return delegate().getMethod(method);
+ }
+
+ public Set<AnnotatedMethod<?>> getMethodsWithAnnotatedParameters(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getMethodsWithAnnotatedParameters(annotationType);
+ }
+
+ public AnnotatedClass<?> getSuperclass()
+ {
+ return delegate().getSuperclass();
+ }
+
+ public boolean isNonStaticMemberClass()
+ {
+ return delegate().isNonStaticMemberClass();
+ }
+
+ public boolean isParameterizedType()
+ {
+ return delegate().isParameterizedType();
+ }
+
+ public boolean isEquivalent(Class<?> clazz)
+ {
+ return delegate().isEquivalent(clazz);
+ }
+
+ public AnnotatedClass<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public abstract class ForwardingAnnotatedConstructor<T> extends ForwardingAnnotatedMember<T, Constructor<T>> implements AnnotatedConstructor<T>
+{
+
+ @Override
+ protected abstract AnnotatedConstructor<T> delegate();
+
+ public List<AnnotatedParameter<?>> getAnnotatedParameters(Class<? extends Annotation> annotationType)
+ {
+ return delegate().getAnnotatedParameters(annotationType);
+ }
+
+ public AnnotatedType<T> getDeclaringClass()
+ {
+ return delegate().getDeclaringClass();
+ }
+
+ public List<AnnotatedParameter<?>> getParameters()
+ {
+ return delegate().getParameters();
+ }
+
+ public T newInstance(ManagerImpl manager)
+ {
+ return delegate().newInstance(manager);
+ }
+
+ public AnnotatedConstructor<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,66 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.Set;
+
+import javax.webbeans.manager.Manager;
+
+public abstract class ForwardingAnnotatedField<T> extends ForwardingAnnotatedMember<T, Field> implements AnnotatedField<T>
+{
+
+ @Override
+ protected abstract AnnotatedField<T> delegate();
+
+ public T get(Object instance)
+ {
+ return delegate().get(instance);
+ }
+
+ public Field getAnnotatedField()
+ {
+ return delegate().getAnnotatedField();
+ }
+
+ public AnnotatedType<?> getDeclaringClass()
+ {
+ return delegate().getDeclaringClass();
+ }
+
+ public String getPropertyName()
+ {
+ return delegate().getPropertyName();
+ }
+
+ public void inject(Object declaringInstance, Manager manager)
+ {
+ delegate().inject(declaringInstance, manager);
+ }
+
+ public void inject(Object declaringInstance, Object value)
+ {
+ delegate().inject(declaringInstance, value);
+ }
+
+ public void injectIntoInstance(Object declaringInstance, Object value)
+ {
+ delegate().injectIntoInstance(declaringInstance, value);
+ }
+
+ public void injectIntoInstance(Object declaringInstance, Manager manager)
+ {
+ delegate().injectIntoInstance(declaringInstance, manager);
+ }
+
+ public boolean isTransient()
+ {
+ return delegate().isTransient();
+ }
+
+ public AnnotatedField<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -200,6 +200,11 @@
*
* @return The annotated item
*/
- public abstract AnnotatedItem<T, S> delegate();
+ protected abstract AnnotatedItem<T, S> delegate();
+
+ public AnnotatedItem<T, S> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Member;
+import java.util.Set;
+
+public abstract class ForwardingAnnotatedMember<T, S extends Member> extends ForwardingAnnotatedItem<T, S> implements AnnotatedMember<T, S>
+{
+
+ @Override
+ protected abstract AnnotatedMember<T, S> delegate();
+
+ public S getMember()
+ {
+ return delegate().getMember();
+ }
+
+ @Override
+ public AnnotatedMember<T, S> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,76 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public abstract class ForwardingAnnotatedMethod<T> extends ForwardingAnnotatedMember<T, Method> implements AnnotatedMethod<T>
+{
+
+ @Override
+ protected abstract AnnotatedMethod<T> delegate();
+
+ public Method getAnnotatedMethod()
+ {
+ return delegate().getAnnotatedMethod();
+ }
+
+ public List<AnnotatedParameter<?>> getAnnotatedParameters(Class<? extends Annotation> metaAnnotationType)
+ {
+ return delegate().getAnnotatedParameters(metaAnnotationType);
+ }
+
+ public AnnotatedType<?> getDeclaringClass()
+ {
+ return delegate().getDeclaringClass();
+ }
+
+ public Class<?>[] getParameterTypesAsArray()
+ {
+ return delegate().getParameterTypesAsArray();
+ }
+
+ public List<AnnotatedParameter<?>> getParameters()
+ {
+ return delegate().getParameters();
+ }
+
+ public String getPropertyName()
+ {
+ return delegate().getPropertyName();
+ }
+
+ public T invoke(Object instance, ManagerImpl manager)
+ {
+ return delegate().invoke(instance, manager);
+ }
+
+ public T invoke(Object instance, Object... parameters)
+ {
+ return delegate().invoke(instance, parameters);
+ }
+
+ public T invokeOnInstance(Object instance, ManagerImpl manager)
+ {
+ return delegate().invokeOnInstance(instance, manager);
+ }
+
+ public T invokeWithSpecialValue(Object instance, Class<? extends Annotation> specialParam, Object specialVal, ManagerImpl manager)
+ {
+ return delegate().invokeWithSpecialValue(instance, specialParam, specialVal, manager);
+ }
+
+ public boolean isEquivalent(Method method)
+ {
+ return delegate().isEquivalent(method);
+ }
+
+ public AnnotatedMethod<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,29 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Manager;
+
+public abstract class ForwardingAnnotatedParameter<T> extends ForwardingAnnotatedItem<T, Object> implements AnnotatedParameter<T>
+{
+
+ @Override
+ protected abstract AnnotatedParameter<T> delegate();
+
+ public AnnotatedMember<?, ?> getDeclaringMember()
+ {
+ return delegate().getDeclaringMember();
+ }
+
+ public T getValue(Manager manager)
+ {
+ return delegate().getValue(manager);
+ }
+
+ public AnnotatedParameter<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+
+
+public abstract class ForwardingAnnotatedType<T> extends ForwardingAnnotatedItem<T, Class<T>> implements AnnotatedType<T>
+{
+
+ @Override
+ protected abstract AnnotatedType<T> delegate();
+
+ public AnnotatedType<?> getSuperclass()
+ {
+ return delegate().getSuperclass();
+ }
+
+ public boolean isEquivalent(Class<?> clazz)
+ {
+ return delegate().isEquivalent(clazz);
+ }
+
+ @Override
+ public AnnotatedType<T> wrap(Set<Annotation> annotations)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -18,13 +18,10 @@
package org.jboss.webbeans.introspector.jlr;
import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Map;
import java.util.Set;
import javax.webbeans.BindingType;
@@ -33,11 +30,8 @@
import org.jboss.webbeans.literal.CurrentLiteral;
import org.jboss.webbeans.util.Proxies;
import org.jboss.webbeans.util.Reflections;
-import org.jboss.webbeans.util.Strings;
import org.jboss.webbeans.util.Types;
-import com.google.common.collect.ForwardingMap;
-
/**
* Represents functionality common for all annotated items, mainly different
* mappings of the annotations and meta-annotations
@@ -52,168 +46,26 @@
*
* @see org.jboss.webbeans.introspector.AnnotatedItem
*/
-public abstract class AbstractAnnotatedItem<T, S> implements AnnotatedItem<T, S>
+public abstract class AbstractAnnotatedItem<T, S> implements WrappableAnnotatedItem<T, S>
{
-
- /**
- * Represents a mapping from a annotation type to an annotation
- * implementation
- */
- public static class AnnotationMap extends ForwardingMap<Class<? extends Annotation>, Annotation>
+
+ interface WrappableAnnotatedItem<T, S> extends AnnotatedItem<T, S>
{
- private final Map<Class<? extends Annotation>, Annotation> delegate;
-
- public AnnotationMap()
- {
- delegate = new HashMap<Class<? extends Annotation>, Annotation>();
- }
-
- @Override
- protected Map<Class<? extends Annotation>, Annotation> delegate()
- {
- return delegate;
- }
-
- /**
- * Gets a string representation of the Map
- *
- * @return A string representation
- */
- @Override
- public String toString()
- {
- return Strings.mapToString("AnnotationMap (annotation type -> annotation): ", delegate);
- }
-
+
+ AnnotationStore getAnnotationStore();
+
}
- /**
- * Represents a mapping from a annotation (meta-annotation) to a set of
- * annotations
- *
- */
- private static class MetaAnnotationMap extends ForwardingMap<Class<? extends Annotation>, Set<Annotation>>
- {
- private final Map<Class<? extends Annotation>, Set<Annotation>> delegate;
-
- public MetaAnnotationMap()
- {
- delegate = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
- }
-
- @Override
- protected Map<Class<? extends Annotation>, Set<Annotation>> delegate()
- {
- return delegate;
- }
-
- /**
- * Gets the set of annotations matching the given annotation type
- *
- * @param key The meta-annotation to match
- * @returns The set of matching annotations containing this
- * meta-annotation
- */
- @Override
- public Set<Annotation> get(Object key)
- {
- Set<Annotation> annotations = super.get(key);
- return annotations != null ? annotations : new HashSet<Annotation>();
- }
-
- /**
- * Adds an annotation under the meta-annotation type key
- *
- * @param key The meta-annotation type
- * @param value The annotation
- */
- public void put(Class<? extends Annotation> key, Annotation value)
- {
- Set<Annotation> annotations = super.get(key);
- if (annotations == null)
- {
- annotations = new HashSet<Annotation>();
- super.put(key, annotations);
- }
- annotations.add(value);
- }
-
- /**
- * Gets a string representation of the Map
- *
- * @return A string representation
- */
- @Override
- public String toString()
- {
- return Strings.mapToString("MetaAnnotationMap (annotation type -> annotation set: ", delegate);
- }
-
- }
-
// The array of default binding types
private static final Annotation[] DEFAULT_BINDING_ARRAY = { new CurrentLiteral() };
// The set of default binding types
private static final Set<Annotation> DEFAULT_BINDING = new HashSet<Annotation>(Arrays.asList(DEFAULT_BINDING_ARRAY));
-
+
// Cached string representation
private String toString;
+ private final AnnotationStore annotationStore;
/**
- * Static helper method for building annotation map from an annotated element
- *
- * @param element The element to examine
- * @return The annotation map
- */
- protected static AnnotationMap buildAnnotationMap(AnnotatedElement element)
- {
- return buildAnnotationMap(element.getAnnotations());
- }
-
- /**
- * Static helper method for building annotation map from an annotated element
- *
- * @param element The element to examine
- * @return The annotation map
- */
- protected static AnnotationMap buildDeclaredAnnotationMap(AnnotatedElement element)
- {
- return buildAnnotationMap(element.getDeclaredAnnotations());
- }
-
- /**
- * Builds the annotation map (annotation type -> annotation)
- *
- * @param annotations The array of annotations to map
- * @return The annotation map
- */
- protected static AnnotationMap buildAnnotationMap(Annotation[] annotations)
- {
- AnnotationMap annotationMap = new AnnotationMap();
- for (Annotation annotation : annotations)
- {
- annotationMap.put(annotation.annotationType(), annotation);
- }
- return annotationMap;
- }
-
- // The annotation map (annotation type -> annotation) of the item
- private final AnnotationMap annotationMap;
- // The meta-annotation map (annotation type -> set of annotations containing
- // meta-annotation) of the item
- private final MetaAnnotationMap metaAnnotationMap;
- // The set of all annotations on the item
- private final Set<Annotation> annotationSet;
-
- // The annotation map (annotation type -> annotation) of the item
- private final AnnotationMap declaredAnnotationMap;
- // The meta-annotation map (annotation type -> set of annotations containing
- // meta-annotation) of the item
- private final MetaAnnotationMap declaredMetaAnnotationMap;
- // The set of all annotations on the item
- private final Set<Annotation> declaredAnnotationSet;
-
- /**
* Constructor
*
* Also builds the meta-annotation map. Throws a NullPointerException if
@@ -222,52 +74,14 @@
* @param annotationMap A map of annotation to register
*
*/
- public AbstractAnnotatedItem(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap)
+ public AbstractAnnotatedItem(AnnotationStore annotatedItemHelper)
{
- if (annotationMap == null)
- {
- throw new NullPointerException("annotationMap cannot be null");
- }
- this.annotationMap = annotationMap;
- this.annotationSet = new HashSet<Annotation>();
- this.metaAnnotationMap = new MetaAnnotationMap();
- for (Annotation annotation : annotationMap.values())
- {
- for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
- {
- // Only map meta-annotations we are interested in
- if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
- {
- metaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
- }
- }
- annotationSet.add(annotation);
- }
-
- if (declaredAnnotationMap == null)
- {
- throw new NullPointerException("declaredAnnotationMap cannot be null");
- }
- this.declaredAnnotationMap = declaredAnnotationMap;
- this.declaredAnnotationSet = new HashSet<Annotation>();
- this.declaredMetaAnnotationMap = new MetaAnnotationMap();
- for (Annotation annotation : declaredAnnotationMap.values())
- {
- for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
- {
- // Only map meta-annotations we are interested in
- if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
- {
- declaredMetaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
- }
- }
- declaredAnnotationSet.add(annotation);
- }
+ this.annotationStore = annotatedItemHelper;
}
- public AbstractAnnotatedItem(AnnotationMap annotationMap)
+ public AnnotationStore getAnnotationStore()
{
- this(annotationMap, annotationMap);
+ return annotationStore;
}
/**
@@ -280,7 +94,7 @@
*/
public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
{
- return annotationType.cast(annotationMap.get(annotationType));
+ return annotationType.cast(getAnnotationStore().getAnnotationMap().get(annotationType));
}
/**
@@ -294,12 +108,12 @@
*/
public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
{
- return Collections.unmodifiableSet(metaAnnotationMap.get(metaAnnotationType));
+ return Collections.unmodifiableSet(getAnnotationStore().getMetaAnnotationMap().get(metaAnnotationType));
}
public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
{
- return Collections.unmodifiableSet(declaredMetaAnnotationMap.get(metaAnnotationType));
+ return Collections.unmodifiableSet(getAnnotationStore().getDeclaredMetaAnnotationMap().get(metaAnnotationType));
}
/**
@@ -330,7 +144,7 @@
*/
public Set<Annotation> getAnnotations()
{
- return Collections.unmodifiableSet(annotationSet);
+ return getAnnotationStore().getAnnotationSet();
}
/**
@@ -343,20 +157,10 @@
*/
public boolean isAnnotationPresent(Class<? extends Annotation> annotatedType)
{
- return annotationMap.containsKey(annotatedType);
+ return getAnnotationStore().getAnnotationMap().containsKey(annotatedType);
}
/**
- * Gets the annotation map
- *
- * @return The annotation map
- */
- protected Map<Class<? extends Annotation>, Annotation> getAnnotationMap()
- {
- return Collections.unmodifiableMap(annotationMap);
- }
-
- /**
* Compares two AbstractAnnotatedItems
*
* @param other The other item
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -34,6 +34,7 @@
import org.jboss.webbeans.injection.InjectionPointProvider;
import org.jboss.webbeans.introspector.AnnotatedMember;
import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedMember;
import org.jboss.webbeans.util.Reflections;
import org.jboss.webbeans.util.Strings;
@@ -51,6 +52,12 @@
*/
public abstract class AbstractAnnotatedMember<T, S extends Member> extends AbstractAnnotatedItem<T, S> implements AnnotatedMember<T, S>
{
+
+ static abstract class WrappableForwardingAnnotatedMember<T, S extends Member> extends ForwardingAnnotatedMember<T, S> implements WrappableAnnotatedItem<T, S>
+ {
+
+ }
+
/**
* An annotation type -> list of annotations map
*/
@@ -107,9 +114,9 @@
*
* @param annotationMap The annotation map
*/
- public AbstractAnnotatedMember(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap, Member member)
+ public AbstractAnnotatedMember(AnnotationStore annotatedItemHelper, Member member)
{
- super(annotationMap, declaredAnnotationMap);
+ super(annotatedItemHelper);
name = member.getName();
_public = Modifier.isPublic(member.getModifiers());
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -33,6 +33,7 @@
*/
public abstract class AbstractAnnotatedType<T> extends AbstractAnnotatedItem<T, Class<T>>
{
+
// The superclass abstraction of the type
private final AnnotatedClass<?> superclass;
// The name of the type
@@ -47,9 +48,9 @@
*
* @param annotationMap The annotation map
*/
- public AbstractAnnotatedType(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap, Class<T> type)
+ public AbstractAnnotatedType(AnnotationStore annotatedItemHelper, Class<T> type)
{
- super(annotationMap, declaredAnnotationMap);
+ super(annotatedItemHelper);
this.name = type.getName();
if (type.getSuperclass() != null)
{
@@ -61,11 +62,6 @@
}
this._public = Modifier.isFinal(type.getModifiers());
}
-
- public AbstractAnnotatedType(AnnotationMap annotationMap, Class<T> type)
- {
- this(annotationMap, annotationMap, type);
- }
/**
* Indicates if the type is static
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -28,6 +28,7 @@
import org.jboss.webbeans.introspector.AnnotatedAnnotation;
import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedAnnotation;
import org.jboss.webbeans.util.Strings;
import com.google.common.collect.ForwardingMap;
@@ -41,9 +42,21 @@
*
* @param <T>
*/
-public class AnnotatedAnnotationImpl<T extends Annotation> extends AbstractAnnotatedType<T> implements AnnotatedAnnotation<T>
+public class AnnotatedAnnotationImpl<T extends Annotation> extends AbstractAnnotatedType<T> implements AnnotatedAnnotation<T>, WrappableAnnotatedAnnotation<T>
{
+ abstract static class ForwardingWrappableAnnotatedAnnotation<T extends Annotation> extends ForwardingAnnotatedAnnotation<T> implements WrappableAnnotatedType<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedAnnotation<T> delegate();
+
+ public AnnotationStore getAnnotationStore()
+ {
+ return delegate().getAnnotationStore();
+ }
+ }
+
/**
* A (annotation type -> set of method abstractions with annotation) map
*/
@@ -106,13 +119,13 @@
*/
public AnnotatedAnnotationImpl(Class<T> annotationType)
{
- super(buildAnnotationMap(annotationType), buildDeclaredAnnotationMap(annotationType), annotationType);
+ super(AnnotationStore.of(annotationType), annotationType);
this.clazz = annotationType;
members = new HashSet<AnnotatedMethod<?>>();
annotatedMembers = new AnnotatedMemberMap();
for (Method member : clazz.getDeclaredMethods())
{
- AnnotatedMethod<?> annotatedMethod = new AnnotatedMethodImpl<Object>(member, this);
+ AnnotatedMethod<?> annotatedMethod = AnnotatedMethodImpl.of(member, this);
members.add(annotatedMethod);
for (Annotation annotation : annotatedMethod.getAnnotations())
{
@@ -193,4 +206,19 @@
return clazz;
}
+ public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations)
+ {
+ final WrappableAnnotatedAnnotation<T> delegate = this;
+ return new ForwardingWrappableAnnotatedAnnotation<T>()
+ {
+
+ @Override
+ protected WrappableAnnotatedAnnotation<T> delegate()
+ {
+ return delegate;
+ }
+
+ };
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -37,6 +37,7 @@
import org.jboss.webbeans.introspector.AnnotatedConstructor;
import org.jboss.webbeans.introspector.AnnotatedField;
import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedClass;
import org.jboss.webbeans.util.Names;
import org.jboss.webbeans.util.Reflections;
import org.jboss.webbeans.util.Strings;
@@ -52,9 +53,22 @@
*
* @param <T>
*/
-public class AnnotatedClassImpl<T> extends AbstractAnnotatedType<T> implements AnnotatedClass<T>
+public class AnnotatedClassImpl<T> extends AbstractAnnotatedType<T> implements AnnotatedClass<T>, WrappableAnnotatedClass<T>
{
+ abstract static class ForwardingWrappableAnnotatedClass<T> extends ForwardingAnnotatedClass<T> implements WrappableAnnotatedClass<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedClass<T> delegate();
+
+
+ public AnnotationStore getAnnotationStore()
+ {
+ return delegate().getAnnotationStore();
+ }
+ }
+
/**
* A (annotation type -> set of field abstractions with annotation/meta
* annotation) map
@@ -280,7 +294,7 @@
private AnnotatedClassImpl(Class<T> rawType, Type type, Annotation[] annotations, Annotation[] declaredAnnotations)
{
- super(buildAnnotationMap(annotations), buildAnnotationMap(declaredAnnotations), rawType);
+ super(AnnotationStore.of(annotations, declaredAnnotations), rawType);
this.clazz = rawType;
if (type instanceof ParameterizedType)
{
@@ -373,7 +387,7 @@
method.setAccessible(true);
}
- AnnotatedMethod<?> annotatedMethod = new AnnotatedMethodImpl<Object>(method, this);
+ AnnotatedMethod<?> annotatedMethod = AnnotatedMethodImpl.of(method, this);
this.methods.add(annotatedMethod);
if (c == clazz)
{
@@ -613,4 +627,19 @@
return toString;
}
+ public AnnotatedClass<T> wrap(Set<Annotation> annotations)
+ {
+ final WrappableAnnotatedClass<T> delegate = this;
+ return new ForwardingWrappableAnnotatedClass<T>()
+ {
+
+ @Override
+ protected WrappableAnnotatedClass<T> delegate()
+ {
+ return delegate;
+ }
+
+ };
+ }
+
}
\ No newline at end of file
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import javax.webbeans.ExecutionException;
@@ -31,6 +32,7 @@
import org.jboss.webbeans.introspector.AnnotatedConstructor;
import org.jboss.webbeans.introspector.AnnotatedParameter;
import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedConstructor;
import org.jboss.webbeans.util.Names;
/**
@@ -42,8 +44,23 @@
*
* @param <T>
*/
-public class AnnotatedConstructorImpl<T> extends AbstractAnnotatedMember<T, Constructor<T>> implements AnnotatedConstructor<T>
+public class AnnotatedConstructorImpl<T> extends AbstractAnnotatedMember<T, Constructor<T>> implements WrappableAnnotatedConstructor<T>
{
+
+ static abstract class ForwardingWrappableAnnotatedConstructor<T> extends ForwardingAnnotatedConstructor<T> implements WrappableAnnotatedConstructor<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedConstructor<T> delegate();
+
+ public AnnotationStore getAnnotationStore()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
+
// The type arguments
private static final Type[] actualTypeArguments = new Type[0];
// The underlying constructor
@@ -75,7 +92,7 @@
*/
public AnnotatedConstructorImpl(Constructor<T> constructor, AnnotatedType<T> declaringClass)
{
- super(buildAnnotationMap(constructor), buildDeclaredAnnotationMap(constructor), constructor);
+ super(AnnotationStore.of(constructor), constructor);
this.constructor = constructor;
this.declaringClass = declaringClass;
@@ -268,5 +285,20 @@
toString = "Annotated method " + Names.constructor2String(constructor);
return toString;
}
+
+ public WrappableAnnotatedConstructor<T> wrap(Set<Annotation> annotations)
+ {
+ final WrappableAnnotatedConstructor<T> delegate = this;
+ return new ForwardingWrappableAnnotatedConstructor<T>()
+ {
+ @Override
+ protected WrappableAnnotatedConstructor<T> delegate()
+ {
+ return delegate;
+ }
+
+ };
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,14 +17,17 @@
package org.jboss.webbeans.introspector.jlr;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.util.Set;
import javax.webbeans.manager.Manager;
import org.jboss.webbeans.introspector.AnnotatedField;
import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedField;
import org.jboss.webbeans.util.Names;
import org.jboss.webbeans.util.Reflections;
@@ -37,8 +40,22 @@
*
* @param <T>
*/
-public class AnnotatedFieldImpl<T> extends AbstractAnnotatedMember<T, Field> implements AnnotatedField<T>
+public class AnnotatedFieldImpl<T> extends AbstractAnnotatedMember<T, Field> implements WrappableAnnotatedField<T>
{
+
+ static abstract class ForwardingWrappableAnnotatedField<T> extends ForwardingAnnotatedField<T> implements WrappableAnnotatedField<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedField<T> delegate();
+
+ public AnnotationStore getAnnotationStore()
+ {
+ return delegate().getAnnotationStore();
+ }
+
+ }
+
// The actual type arguments
private final Type[] actualTypeArguments;
// The underlying field
@@ -60,7 +77,7 @@
*/
public AnnotatedFieldImpl(Field field, AnnotatedType<?> declaringClass)
{
- super(buildAnnotationMap(field), buildDeclaredAnnotationMap(field), field);
+ super(AnnotationStore.of(field), field);
this.field = field;
field.setAccessible(true);
this.declaringClass = declaringClass;
@@ -186,5 +203,34 @@
toString = "Annotated field " + Names.field2String(field);
return toString;
}
+
+ public AnnotatedField<T> wrap(Set<Annotation> annotations)
+ {
+ if (annotations.size() > 0)
+ {
+ final WrappableAnnotatedField<T> delegate = this;
+ final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
+ return new ForwardingWrappableAnnotatedField<T>()
+ {
+
+ @Override
+ protected WrappableAnnotatedField<T> delegate()
+ {
+ return delegate;
+ }
+
+ @Override
+ public AnnotationStore getAnnotationStore()
+ {
+ return annotationStore;
+ }
+
+ };
+ }
+ else
+ {
+ return this;
+ }
+ }
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -25,11 +25,13 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.introspector.AnnotatedMethod;
import org.jboss.webbeans.introspector.AnnotatedParameter;
import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedMethod;
import org.jboss.webbeans.util.Names;
import org.jboss.webbeans.util.Reflections;
@@ -42,9 +44,22 @@
*
* @param <T>
*/
-public class AnnotatedMethodImpl<T> extends AbstractAnnotatedMember<T, Method> implements AnnotatedMethod<T>
+public class AnnotatedMethodImpl<T> extends AbstractAnnotatedMember<T, Method> implements AnnotatedMethod<T>, WrappableAnnotatedMethod<T>
{
+ abstract static class ForwardingWrappableAnnotatedMethod<T> extends ForwardingAnnotatedMethod<T> implements WrappableAnnotatedMethod<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedMethod<T> delegate();
+
+ public AnnotationStore getAnnotationStore()
+ {
+ return delegate().getAnnotationStore();
+ }
+
+ }
+
// The actual type arguments
private final Type[] actualTypeArguments;
// The underlying method
@@ -64,7 +79,28 @@
// Cached string representation
private String toString;
+
+ public static <T> AnnotatedMethodImpl<T> of(Method method, AnnotatedType<?> declaringClass)
+ {
+ return new AnnotatedMethodImpl<T>(method, declaringClass);
+ }
+
+ public static <T> AnnotatedMethod<T> wrap(final AnnotatedMethod<T> annotatedMethod, final Set<Annotation> extraAnnotations)
+ {
+ return new ForwardingAnnotatedMethod<T>()
+ {
+ @Override
+ protected AnnotatedMethod<T> delegate()
+ {
+ return annotatedMethod;
+ }
+
+
+
+ };
+ }
+
/**
* Constructor
*
@@ -75,9 +111,9 @@
* @param declaringClass The declaring class abstraction
*/
@SuppressWarnings("unchecked")
- public AnnotatedMethodImpl(Method method, AnnotatedType<?> declaringClass)
+ protected AnnotatedMethodImpl(Method method, AnnotatedType<?> declaringClass)
{
- super(buildAnnotationMap(method), buildDeclaredAnnotationMap(method), method);
+ super(AnnotationStore.of(method), method);
this.method = method;
this.declaringClass = declaringClass;
if (method.getGenericReturnType() instanceof ParameterizedType)
@@ -321,5 +357,35 @@
toString = "Annotated method " + Names.method2String(method);
return toString;
}
+
+ public AnnotatedMethod<T> wrap(Set<Annotation> annotations)
+ {
+ if (annotations.size() > 0)
+ {
+ final WrappableAnnotatedMethod<T> delegate = this;
+ final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
+ return new ForwardingWrappableAnnotatedMethod<T>()
+ {
+
+ @Override
+ protected WrappableAnnotatedMethod<T> delegate()
+ {
+ return delegate;
+ }
+
+ @Override
+ public AnnotationStore getAnnotationStore()
+ {
+ return annotationStore;
+ }
+
+ };
+ }
+ else
+ {
+ return this;
+ }
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -19,12 +19,14 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
+import java.util.Set;
import javax.webbeans.BindingType;
import javax.webbeans.manager.Manager;
import org.jboss.webbeans.introspector.AnnotatedMember;
import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedParameter;
/**
* Represents a parameter
@@ -35,8 +37,22 @@
*
* @param <T>
*/
-public class AnnotatedParameterImpl<T> extends AbstractAnnotatedItem<T, Object> implements AnnotatedParameter<T>
+public class AnnotatedParameterImpl<T> extends AbstractAnnotatedItem<T, Object> implements WrappableAnnotatedParameter<T>
{
+
+ static abstract class ForwardingWrappableAnnotatedParameter<T> extends ForwardingAnnotatedParameter<T> implements WrappableAnnotatedParameter<T>
+ {
+
+ @Override
+ protected abstract WrappableAnnotatedParameter<T> delegate();
+
+ public AnnotationStore getAnnotationStore()
+ {
+ return delegate().getAnnotationStore();
+ }
+
+ }
+
// The type
private final Class<T> type;
// The actual type arguments
@@ -64,7 +80,7 @@
*/
public AnnotatedParameterImpl(Annotation[] annotations, Class<T> type, AnnotatedMember<?, ?> declaringMember)
{
- super(buildAnnotationMap(annotations));
+ super(AnnotationStore.of(annotations, annotations));
this.type = type;
this.declaringMember = declaringMember;
}
@@ -187,5 +203,21 @@
{
return declaringMember;
}
+
+ public AnnotatedParameter<T> wrap(Set<Annotation> annotations)
+ {
+ final WrappableAnnotatedParameter<T> delegate = this;
+
+ return new ForwardingWrappableAnnotatedParameter<T>()
+ {
+
+ @Override
+ protected WrappableAnnotatedParameter<T> delegate()
+ {
+ return delegate;
+ }
+
+ };
+ }
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,292 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import static org.jboss.webbeans.introspector.AnnotatedItem.MAPPED_METAANNOTATIONS;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.webbeans.util.Strings;
+
+import com.google.common.collect.ForwardingMap;
+
+public class AnnotationStore
+{
+ /**
+ * Represents a mapping from a annotation type to an annotation
+ * implementation
+ */
+ public static class AnnotationMap extends ForwardingMap<Class<? extends Annotation>, Annotation>
+ {
+ private final Map<Class<? extends Annotation>, Annotation> delegate;
+
+ public AnnotationMap()
+ {
+ delegate = new HashMap<Class<? extends Annotation>, Annotation>();
+ }
+
+ @Override
+ protected Map<Class<? extends Annotation>, Annotation> delegate()
+ {
+ return delegate;
+ }
+
+ /**
+ * Gets a string representation of the Map
+ *
+ * @return A string representation
+ */
+ @Override
+ public String toString()
+ {
+ return Strings.mapToString("AnnotationMap (annotation type -> annotation): ", delegate);
+ }
+
+ }
+
+ /**
+ * Represents a mapping from a annotation (meta-annotation) to a set of
+ * annotations
+ *
+ */
+ private static class MetaAnnotationMap extends ForwardingMap<Class<? extends Annotation>, Set<Annotation>>
+ {
+ private final Map<Class<? extends Annotation>, Set<Annotation>> delegate;
+
+ public MetaAnnotationMap()
+ {
+ delegate = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
+ }
+
+ @Override
+ protected Map<Class<? extends Annotation>, Set<Annotation>> delegate()
+ {
+ return delegate;
+ }
+
+ /**
+ * Gets the set of annotations matching the given annotation type
+ *
+ * @param key The meta-annotation to match
+ * @returns The set of matching annotations containing this
+ * meta-annotation
+ */
+ @Override
+ public Set<Annotation> get(Object key)
+ {
+ Set<Annotation> annotations = super.get(key);
+ return annotations != null ? annotations : new HashSet<Annotation>();
+ }
+
+ /**
+ * Adds an annotation under the meta-annotation type key
+ *
+ * @param key The meta-annotation type
+ * @param value The annotation
+ */
+ public void put(Class<? extends Annotation> key, Annotation value)
+ {
+ Set<Annotation> annotations = super.get(key);
+ if (annotations == null)
+ {
+ annotations = new HashSet<Annotation>();
+ super.put(key, annotations);
+ }
+ annotations.add(value);
+ }
+
+ /**
+ * Gets a string representation of the Map
+ *
+ * @return A string representation
+ */
+ @Override
+ public String toString()
+ {
+ return Strings.mapToString("MetaAnnotationMap (annotation type -> annotation set: ", delegate);
+ }
+
+ }
+
+ /**
+ * Builds the annotation map (annotation type -> annotation)
+ *
+ * @param annotations The array of annotations to map
+ * @return The annotation map
+ */
+ protected static AnnotationMap buildAnnotationMap(Annotation[] annotations)
+ {
+ AnnotationMap annotationMap = new AnnotationMap();
+ for (Annotation annotation : annotations)
+ {
+ annotationMap.put(annotation.annotationType(), annotation);
+ }
+ return annotationMap;
+ }
+
+ /**
+ * Builds the annotation map (annotation type -> annotation)
+ *
+ * @param annotations The array of annotations to map
+ * @return The annotation map
+ */
+ protected static AnnotationMap buildAnnotationMap(Iterable<Annotation> annotations)
+ {
+ AnnotationMap annotationMap = new AnnotationMap();
+ for (Annotation annotation : annotations)
+ {
+ annotationMap.put(annotation.annotationType(), annotation);
+ }
+ return annotationMap;
+ }
+
+ /**
+ * Build an AnnotatedItemHelper from a class
+ *
+ * @param annotatedElement
+ * @return
+ */
+ public static AnnotationStore of(AnnotatedElement annotatedElement)
+ {
+ return new AnnotationStore(buildAnnotationMap(annotatedElement.getAnnotations()), buildAnnotationMap(annotatedElement.getDeclaredAnnotations()));
+ }
+
+ public static AnnotationStore of(Annotation[] annotations, Annotation[] declaredAnnotations)
+ {
+ return new AnnotationStore(buildAnnotationMap(annotations), buildAnnotationMap(declaredAnnotations));
+ }
+
+ public static AnnotationStore wrap(AnnotationStore annotationStore, Set<Annotation> annotations, Set<Annotation> declaredAnnotations)
+ {
+ AnnotationMap annotationMap = new AnnotationMap();
+ annotationMap.putAll(buildAnnotationMap(annotations));
+ annotationMap.putAll(annotationStore.getAnnotationMap());
+
+ AnnotationMap declaredAnnotationMap = new AnnotationMap();
+ declaredAnnotationMap.putAll(buildAnnotationMap(declaredAnnotations));
+ declaredAnnotationMap.putAll(annotationStore.getDeclaredAnnotationMap());
+
+ return new AnnotationStore(annotationMap, declaredAnnotationMap);
+ }
+
+ // The annotation map (annotation type -> annotation) of the item
+ private final AnnotationMap annotationMap;
+ // The meta-annotation map (annotation type -> set of annotations containing
+ // meta-annotation) of the item
+ private final MetaAnnotationMap metaAnnotationMap;
+ // The set of all annotations on the item
+ private final Set<Annotation> annotationSet;
+
+ // The annotation map (annotation type -> annotation) of the item
+ private final AnnotationMap declaredAnnotationMap;
+ // The meta-annotation map (annotation type -> set of annotations containing
+ // meta-annotation) of the item
+ private final MetaAnnotationMap declaredMetaAnnotationMap;
+ // The set of all annotations on the item
+ private final Set<Annotation> declaredAnnotationSet;
+
+ /**
+ * Constructor
+ *
+ * Also builds the meta-annotation map. Throws a NullPointerException if
+ * trying to register a null map
+ *
+ * @param annotationMap A map of annotation to register
+ *
+ */
+ protected AnnotationStore(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap)
+ {
+ if (annotationMap == null)
+ {
+ throw new NullPointerException("annotationMap cannot be null");
+ }
+ this.annotationMap = annotationMap;
+ this.annotationSet = new HashSet<Annotation>();
+ this.metaAnnotationMap = new MetaAnnotationMap();
+ for (Annotation annotation : annotationMap.values())
+ {
+ for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
+ {
+ // Only map meta-annotations we are interested in
+ if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
+ {
+ metaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
+ }
+ }
+ annotationSet.add(annotation);
+ }
+
+ if (declaredAnnotationMap == null)
+ {
+ throw new NullPointerException("declaredAnnotationMap cannot be null");
+ }
+ this.declaredAnnotationMap = declaredAnnotationMap;
+ this.declaredAnnotationSet = new HashSet<Annotation>();
+ this.declaredMetaAnnotationMap = new MetaAnnotationMap();
+ for (Annotation annotation : declaredAnnotationMap.values())
+ {
+ for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
+ {
+ // Only map meta-annotations we are interested in
+ if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
+ {
+ declaredMetaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
+ }
+ }
+ declaredAnnotationSet.add(annotation);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getAnnotationMap()
+ */
+ public Map<Class<? extends Annotation>, Annotation> getAnnotationMap()
+ {
+ return Collections.unmodifiableMap(annotationMap);
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getAnnotationSet()
+ */
+ public Set<Annotation> getAnnotationSet()
+ {
+ return Collections.unmodifiableSet(annotationSet);
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getMetaAnnotationMap()
+ */
+ public Map<Class<? extends Annotation>, Set<Annotation>> getMetaAnnotationMap()
+ {
+ return Collections.unmodifiableMap(metaAnnotationMap);
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredAnnotationMap()
+ */
+ public Map<Class<? extends Annotation>, Annotation> getDeclaredAnnotationMap()
+ {
+ return Collections.unmodifiableMap(declaredAnnotationMap);
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredAnnotationSet()
+ */
+ public Set<Annotation> getDeclaredAnnotationSet()
+ {
+ return Collections.unmodifiableSet(declaredAnnotationSet);
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredMetaAnnotationMap()
+ */
+ public Map<Class<? extends Annotation>, Set<Annotation>> getDeclaredMetaAnnotationMap()
+ {
+ return Collections.unmodifiableMap(declaredMetaAnnotationMap);
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.introspector.AnnotatedAnnotation;
+
+interface WrappableAnnotatedAnnotation<T extends Annotation> extends AnnotatedAnnotation<T>, WrappableAnnotatedType<T>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedClass;
+
+public interface WrappableAnnotatedClass<T> extends AnnotatedClass<T>, WrappableAnnotatedType<T>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Constructor;
+
+import org.jboss.webbeans.introspector.AnnotatedConstructor;
+
+interface WrappableAnnotatedConstructor<T> extends AnnotatedConstructor<T>, WrappableAnnotatedItem<T, Constructor<T>>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Field;
+
+import org.jboss.webbeans.introspector.AnnotatedField;
+
+interface WrappableAnnotatedField<T> extends AnnotatedField<T>, WrappableAnnotatedItem<T, Field>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+interface WrappableAnnotatedItem<T, S> extends AnnotatedItem<T, S>
+{
+
+ AnnotationStore getAnnotationStore();
+
+}
\ No newline at end of file
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Member;
+
+import org.jboss.webbeans.introspector.AnnotatedMember;
+
+interface WrappableAnnotatedMember<T, S extends Member> extends AnnotatedMember<T, S>, WrappableAnnotatedItem<T, S>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Method;
+
+import org.jboss.webbeans.introspector.AnnotatedMember;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+
+interface WrappableAnnotatedMethod<T> extends AnnotatedMethod<T>, WrappableAnnotatedItem<T, Method>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedParameter;
+
+interface WrappableAnnotatedParameter<T> extends AnnotatedParameter<T>, WrappableAnnotatedItem<T, Object>
+{
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedType;
+
+interface WrappableAnnotatedType<T> extends AnnotatedType<T>, WrappableAnnotatedItem<T, Class<T>>
+{
+
+}
\ No newline at end of file
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -22,7 +22,7 @@
import java.util.Set;
import org.jboss.webbeans.MetaDataCache;
-import org.jboss.webbeans.introspector.jlr.AbstractAnnotatedItem.AnnotationMap;
+import org.jboss.webbeans.introspector.jlr.AnnotationStore.AnnotationMap;
/**
* Meta model for the merged stereotype for a bean
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,7 +1,11 @@
package org.jboss.webbeans.test.tck;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
import javax.webbeans.manager.Manager;
+import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.tck.api.Containers;
import org.jboss.webbeans.test.mock.MockBootstrap;
import org.jboss.webbeans.test.mock.MockWebBeanDiscovery;
@@ -9,11 +13,21 @@
public class ContainersImpl implements Containers
{
- public Manager deploy(Class<?>... classes)
+ public Manager deploy(List<Class<? extends Annotation>> enabledDeploymentTypes, Class<?>... classes)
{
MockBootstrap bootstrap = new MockBootstrap();
bootstrap.setWebBeanDiscovery(new MockWebBeanDiscovery(classes));
bootstrap.boot();
- return bootstrap.getManager();
+ ManagerImpl manager = bootstrap.getManager();
+ if (enabledDeploymentTypes != null)
+ {
+ manager.setEnabledDeploymentTypes(enabledDeploymentTypes);
+ }
+ return manager;
}
+
+ public Manager deploy(java.lang.Class<?>... classes)
+ {
+ return deploy(null, classes);
+ }
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -11,16 +11,20 @@
public class ManagersImpl implements Managers
{
-
- public Manager createManager()
+
+ public Manager createManager(List<Class<? extends Annotation>> enabledDeploymentTypes)
{
new MockBootstrap();
+ if (enabledDeploymentTypes != null)
+ {
+ CurrentManager.rootManager().setEnabledDeploymentTypes(enabledDeploymentTypes);
+ }
return CurrentManager.rootManager();
}
-
- public void setEnabledDeploymentTypes(List<Class<? extends Annotation>> enabledDeploymentTypes)
+
+ public Manager createManager()
{
- CurrentManager.rootManager().setEnabledDeploymentTypes(enabledDeploymentTypes);
+ return createManager(null);
}
public List<Class<? extends Annotation>> getEnabledDeploymentTypes()
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -67,7 +67,7 @@
//AnnotatedClass<Tuna> annotatedItem = new SimpleAnnotatedClass<Tuna>(Tuna.class, annotations);
// TODO This should test a real class
tuna = createSimpleBean(Tuna.class);
- om = new AnnotatedMethodImpl<Object>(AnObserver.class.getMethod("observe", new Class[] { Event.class }), AnnotatedClassImpl.of(AnObserver.class));
+ om = AnnotatedMethodImpl.of(AnObserver.class.getMethod("observe", new Class[] { Event.class }), AnnotatedClassImpl.of(AnObserver.class));
AnObserver observerInstance = new AnObserver();
// TODO Fix this Observer<Event> observer = new MockObserverImpl<Event>(tuna, om, Event.class);
Modified: tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java
===================================================================
--- tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,5 +1,8 @@
package org.jboss.webbeans.tck.api;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
import javax.webbeans.manager.Manager;
/**
@@ -34,6 +37,8 @@
* @param classes the classes to deploy
* @return the manager created as a result of initializing the container
*/
+ public Manager deploy(List<Class<? extends Annotation>> enabledDeploymentTypes, Class<?>...classes);
+
public Manager deploy(Class<?>...classes);
}
Modified: tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java
===================================================================
--- tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -19,22 +19,23 @@
public static final String PROPERTY_NAME = Managers.class.getName();
/**
+ * Get a new Manager instance
*
- * @param enabledDeploymentTypes
+ * @return the Manager
*/
- void setEnabledDeploymentTypes(List<Class<? extends Annotation>> enabledDeploymentTypes);
+ Manager createManager(List<Class<? extends Annotation>> enabledDeploymentTypes);
/**
- * Returns a list of the enabled deployment types for the current manager
+ * Get a new Manager instance
*
- * @return
+ * @return the Manager
*/
- List<Class<? extends Annotation>> getEnabledDeploymentTypes();
+ Manager createManager();
/**
- * Get a new Manager instance
+ * Returns a list of the enabled deployment types for the current manager
*
- * @return the Manager
+ * @return
*/
- Manager createManager();
+ List<Class<? extends Annotation>> getEnabledDeploymentTypes();
}
Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -68,8 +68,14 @@
@BeforeMethod
public final void before()
{
- manager = configuration().getManagers().createManager();
- configuration().getManagers().setEnabledDeploymentTypes(getEnabledDeploymentTypes());
+ if (getEnabledDeploymentTypes().size() > 0)
+ {
+ manager = configuration().getManagers().createManager(getEnabledDeploymentTypes());
+ }
+ else
+ {
+ manager = configuration().getManagers().createManager();
+ }
}
@AfterMethod
@@ -100,17 +106,24 @@
protected void deployBeans(Class<?>... classes)
{
- manager = configuration().getContainers().deploy(classes);
+ if (getEnabledDeploymentTypes().size() > 0)
+ {
+ manager = configuration().getContainers().deploy(getEnabledDeploymentTypes(), classes);
+ }
+ else
+ {
+ manager = configuration().getContainers().deploy(classes);
+ }
}
- protected List<Class<? extends Annotation>> getStandardDeploymentTypes()
+ protected final List<Class<? extends Annotation>> getStandardDeploymentTypes()
{
return new ArrayList<Class<? extends Annotation>>(STANDARD_DEPLOYMENT_TYPES);
}
protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
{
- return getStandardDeploymentTypes();
+ return Collections.emptyList();
}
protected byte[] serialize(Object instance) throws IOException
Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.util.Arrays;
+
+import javax.webbeans.DeploymentException;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class BrokenDeploymentTypeTest extends AbstractTest
+{
+
+ @SuppressWarnings("unchecked")
+ @Test(expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
+ public void testStandardMustBeDeclared()
+ {
+
+ manager = configuration().getContainers().deploy(Arrays.asList(AnotherDeploymentType.class, HornedAnimalDeploymentType.class), Dog.class);
+ }
+
+
+}
Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,35 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.webbeans.Standard;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class CustomDeploymentTypeTest extends AbstractTest
+{
+
+ @Override
+ protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+ {
+ return Arrays.asList(Standard.class, AnotherDeploymentType.class,
+ HornedAnimalDeploymentType.class);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
+ public void testCustomDeploymentTypes()
+ {
+ assert configuration().getManagers().getEnabledDeploymentTypes().size() == 3;
+ assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
+ assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(AnotherDeploymentType.class);
+ assert configuration().getManagers().getEnabledDeploymentTypes().get(2).equals(HornedAnimalDeploymentType.class);
+ }
+
+}
Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,16 +1,12 @@
package org.jboss.webbeans.tck.unit.definition.deployment;
-import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
-
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
-import java.util.Arrays;
import java.util.List;
import javax.webbeans.DefinitionException;
import javax.webbeans.DeploymentException;
import javax.webbeans.Production;
-import javax.webbeans.Standard;
import javax.webbeans.UnsatisfiedDependencyException;
import javax.webbeans.manager.Bean;
@@ -116,37 +112,15 @@
@SuppressWarnings("unchecked")
@Test(groups="beanLifecycle", expectedExceptions=UnsatisfiedDependencyException.class) @SpecAssertion(section="2.5.6")
public void testBeanWithDisabledDeploymentTypeNotInstantiated()
- {
- configuration().getManagers().setEnabledDeploymentTypes(
- Arrays.asList(Standard.class, AnotherDeploymentType.class,
- HornedAnimalDeploymentType.class));
-
+ {
Bean<RedSnapper> bean = createSimpleBean(RedSnapper.class);
manager.addBean(bean);
manager.getInstanceByType(RedSnapper.class);
}
- @SuppressWarnings("unchecked")
- @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
- public void testCustomDeploymentTypes()
- {
- configuration().getManagers().setEnabledDeploymentTypes(
- Arrays.asList(Standard.class, AnotherDeploymentType.class,
- HornedAnimalDeploymentType.class));
- assert configuration().getManagers().getEnabledDeploymentTypes().size() == 3;
- assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
- assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(AnotherDeploymentType.class);
- assert configuration().getManagers().getEnabledDeploymentTypes().get(2).equals(HornedAnimalDeploymentType.class);
- }
+
- @SuppressWarnings("unchecked")
- @Test(expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
- public void testStandardMustBeDeclared()
- {
- configuration().getManagers().setEnabledDeploymentTypes(
- Arrays.asList(AnotherDeploymentType.class, HornedAnimalDeploymentType.class));
- }
-
+
@Test(groups={"stub", "webbeansxml"}, expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
public void testMultipleDeployElementsCannotBeDefined()
{
Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+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.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface DisabledDeploymentType
+{
+
+}
Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -4,6 +4,7 @@
@FishStereotype
@RequestScoped
+ at DisabledDeploymentType
class RedSnapper implements Animal
{
Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java 2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java 2009-01-20 21:13:55 UTC (rev 1131)
@@ -2,6 +2,10 @@
import static org.jboss.webbeans.tck.impl.util.Reflections.annotationSetMatches;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.webbeans.AnnotationLiteral;
import javax.webbeans.RequestScoped;
@@ -12,12 +16,22 @@
public class RealizationTest extends AbstractTest
{
- @Test(groups="broken") @SpecAssertion(section="4.1")
+ @Override
+ protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+ {
+ List<Class<? extends Annotation>> deploymentTypes = new ArrayList<Class<? extends Annotation>>();
+ deploymentTypes.addAll(getStandardDeploymentTypes());
+ deploymentTypes.add(AnotherDeploymentType.class);
+ deploymentTypes.add(FarmAnimalDeploymentType.class);
+ return deploymentTypes;
+ }
+
+ @Test @SpecAssertion(section="4.1")
public void testRealizedBeanWithProducerMethodHasSameScope()
{
deployBeans(Cow.class);
- assert manager.resolveByType(Dung.class).size() == 1;
- assert manager.resolveByType(Dung.class).iterator().next().getScopeType().equals(RequestScoped.class);
+ assert manager.resolveByType(Dung.class, new AnnotationLiteral<Smelly>(){}).size() == 1;
+ assert manager.resolveByType(Dung.class, new AnnotationLiteral<Smelly>(){}).iterator().next().getScopeType().equals(RequestScoped.class);
}
@Test(groups="broken") @SpecAssertion(section="4.1")
@@ -46,7 +60,7 @@
assert annotationSetMatches(manager.resolveByType(Dung.class).iterator().next().getBindings(), Smelly.class, Tame.class);
}
- @Test(groups="broken") @SpecAssertion(section="4.1")
+ @Test @SpecAssertion(section="4.1")
public void testRealizedBeanWithProducerMethodHasSameStereotypes()
{
deployBeans(LabradorKennel.class);
More information about the weld-commits
mailing list