[webbeans-commits] Webbeans SVN: r119 - in ri/trunk: webbeans-ri/src/main/java/org/jboss/webbeans and 4 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Sun Oct 19 18:31:45 EDT 2008
Author: pete.muir at jboss.org
Date: 2008-10-19 18:31:44 -0400 (Sun, 19 Oct 2008)
New Revision: 119
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.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/SimpleAnnotatedConstructor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java
Removed:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java
Modified:
ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java
ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.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/AnnotatedMethod.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/SimpleAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java
Log:
Implement most of the resolution algorithms, tests tomorrow
Modified: ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java
===================================================================
--- ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -35,9 +35,9 @@
public <T> T getInstanceByType(TypeLiteral<T> type,
Annotation... bindingTypes);
- public <T> T resolveByType(Class<T> apiType, Annotation... bindingTypes);
+ public <T> Set<Bean<T>> resolveByType(Class<T> apiType, Annotation... bindingTypes);
- public <T> T resolveByType(TypeLiteral<T> apiType,
+ public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType,
Annotation... bindingTypes);
public Object getInstanceByName(String name);
Modified: ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java
===================================================================
--- ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -17,10 +17,7 @@
package javax.webbeans.manager;
-import java.lang.annotation.Annotation;
-import java.util.Set;
-
/**
*
* @author Pete Muir
@@ -30,7 +27,6 @@
{
public Class<T> getEventType();
- public Set<Annotation> getEventBindingTypes();
public void notify(Manager container, T event);
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -19,7 +19,7 @@
private AbstractComponentModel<T, ?> componentMetaModel;
- public BeanImpl(AbstractComponentModel<T, ?> componentMetaModel, Manager manager)
+ public BeanImpl(AbstractComponentModel<T, ?> componentMetaModel, ManagerImpl manager)
{
super(manager);
this.componentMetaModel = componentMetaModel;
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 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -20,6 +20,8 @@
import org.jboss.webbeans.bindings.StandardAnnotationLiteral;
import org.jboss.webbeans.ejb.EjbManager;
import org.jboss.webbeans.event.EventBus;
+import org.jboss.webbeans.injectable.Injectable;
+import org.jboss.webbeans.injectable.SimpleInjectable;
public class ManagerImpl implements Manager
{
@@ -28,20 +30,24 @@
private ModelManager modelManager;
private EjbManager ejbLookupManager;
private EventBus eventBus;
+ private ResolutionManager resolutionManager;
+
+ private boolean containerInitialized = false;
private ThreadLocal<Map<Class<Annotation>, Context>> contexts =
new ThreadLocal<Map<Class<Annotation>, Context>>();
- private Set<Bean<?>> components;
+ private Set<Bean<?>> beans;
public ManagerImpl(List<Annotation> enabledDeploymentTypes)
{
initEnabledDeploymentTypes(enabledDeploymentTypes);
this.modelManager = new ModelManager();
this.ejbLookupManager = new EjbManager();
- this.components = new HashSet<Bean<?>>();
+ this.beans = new HashSet<Bean<?>>();
this.eventBus = new EventBus();
+ resolutionManager = new ResolutionManager(this);
}
private void initEnabledDeploymentTypes(List<Annotation> enabledDeploymentTypes)
@@ -62,9 +68,13 @@
}
}
- public Manager addBean(Bean<?> component)
+ public Manager addBean(Bean<?> bean)
{
- components.add(component);
+ beans.add(bean);
+ if (containerInitialized)
+ {
+ // TODO Somehow deal with dynamically reigstered components
+ }
return this;
}
@@ -130,18 +140,7 @@
return null;
}
- public <T> T resolveByType(Class<T> apiType, Annotation... bindingTypes)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- public <T> T resolveByType(TypeLiteral<T> apiType,
- Annotation... bindingTypes)
- {
- // TODO Auto-generated method stub
- return null;
- }
+
public <T> Set<Method> resolveDisposalMethods(Class<T> apiType, Annotation... bindingTypes)
{
@@ -173,5 +172,27 @@
// TODO Auto-generated method stub
return null;
}
+
+ public <T> Set<Bean<T>> resolveByType(Class<T> apiType,
+ Annotation... bindingTypes)
+ {
+ return getResolutionManager().get(new SimpleInjectable<T>(apiType, bindingTypes));
+ }
+
+ public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType,
+ Annotation... bindingTypes)
+ {
+ return resolveByType(apiType.getRawType(), bindingTypes);
+ }
+ public ResolutionManager getResolutionManager()
+ {
+ return resolutionManager;
+ }
+
+ public Set<Bean<?>> getBeans()
+ {
+ return beans;
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -30,9 +30,9 @@
componentModels.put(componentModel.getType(), componentModel);
}
- public <T> AbstractComponentModel<T, ?> getComponentModel(Class<T> clazz)
+ public AbstractComponentModel<?, ?> getComponentModel(Class<?> clazz)
{
- return (AbstractComponentModel<T, ?>) componentModels.get(clazz);
+ return componentModels.get(clazz);
}
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,42 @@
+package org.jboss.webbeans;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.injectable.Injectable;
+
+public class ResolutionManager
+{
+
+ private Map<Injectable<?, ?>, Set<?>> resolvedInjectionPoints;
+ private ManagerImpl manager;
+
+ public ResolutionManager(ManagerImpl manager)
+ {
+ resolvedInjectionPoints = new HashMap<Injectable<?, ?>, Set<?>>();
+ this.manager = manager;
+ }
+
+ public void registerInjectionPoint(Injectable<?, ?> injectable)
+ {
+ resolvedInjectionPoints.put(injectable, injectable.getPossibleTargets(manager.getBeans()));
+ }
+
+ public void registerInjectionPoints(Set<Injectable<?, ?>> injectables)
+ {
+ for (Injectable<?, ?> injectable : injectables)
+ {
+ registerInjectionPoint(injectable);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> Set<Bean<T>> get(Injectable<T, ?> key)
+ {
+ return (Set<Bean<T>>) resolvedInjectionPoints.get(key);
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -49,7 +49,7 @@
*/
public void addObserver(Observer<?> o)
{
- int key = generateKey(o.getEventType(), o.getEventBindingTypes());
+ int key = 1 /*TODO generateKey(o.getEventType(), o.get)*/;
Set<Observer<?>> l = registeredObservers.get(key);
if (l == null)
l = new HashSet<Observer<?>>();
@@ -101,10 +101,11 @@
*/
public void removeObserver(Observer<?> o)
{
- Set<Observer<?>> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
- if (l != null) {
- l.remove(o);
- }
+ // TODO fix
+ // Set<Observer<?>> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
+ //if (l != null) {
+ // l.remove(o);
+ //}
}
/**
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 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,17 +1,13 @@
package org.jboss.webbeans.event;
import java.lang.annotation.Annotation;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
import javax.webbeans.manager.Manager;
import javax.webbeans.manager.Observer;
-import javax.webbeans.Observes;
-import org.jboss.webbeans.injectable.Parameter;
+import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
+import org.jboss.webbeans.injectable.InjectableParameterWrapper;
import org.jboss.webbeans.model.AbstractComponentModel;
/**
@@ -35,8 +31,7 @@
{
private final AbstractComponentModel<?, ?> componentModel;
- private final ObserverMethod observerMethod;
- private final Set<Annotation> eventBindings;
+ private final InjectableMethod<?> observerMethod;
private final Class<T> eventType;
/**
@@ -48,46 +43,16 @@
* @param eventType The type of event being observed
*/
@SuppressWarnings("unchecked")
- public ObserverImpl(AbstractComponentModel<?, ?> componentModel, ObserverMethod observer, Class<T> eventType)
+ public ObserverImpl(AbstractComponentModel<?, ?> componentModel, InjectableMethod<?> observer, Class<T> eventType)
{
this.componentModel = componentModel;
this.observerMethod = observer;
this.eventType = eventType;
- List<Parameter> parms = observer.getParameters();
- eventBindings = new HashSet<Annotation>();
- for (Parameter p : parms)
- {
- if (p.getType().equals(eventType))
- {
- if ((p.getBindingTypes() != null) && (p.getBindingTypes().length > 0))
- {
- eventBindings.addAll(Arrays.asList(p.getBindingTypes()));
- // Remove the @Observes annotation since it is not an event
- // binding type
- for (Annotation annotation : eventBindings)
- {
- if (Observes.class.isAssignableFrom(annotation.getClass()))
- eventBindings.remove(annotation);
- }
- break;
- }
- }
- }
}
/*
* (non-Javadoc)
*
- * @see javax.webbeans.Observer#getEventBindingTypes()
- */
- public Set<Annotation> getEventBindingTypes()
- {
- return Collections.unmodifiableSet(this.eventBindings);
- }
-
- /*
- * (non-Javadoc)
- *
* @see javax.webbeans.Observer#getEventType()
*/
public Class<T> getEventType()
@@ -101,12 +66,34 @@
* @see javax.webbeans.Observer#notify(javax.webbeans.Container,
* java.lang.Object)
*/
- public void notify(Manager manager, T event)
+ @SuppressWarnings("unchecked")
+ public void notify(Manager manager, final T event)
{
// Get the most specialized instance of the component
Object instance = getInstance(manager);
if (instance != null)
- this.observerMethod.invoke(manager, instance, event);
+ {
+ // Let the super class get the parameter values, but substitute the event
+ // object so that we know for certain it is the correct one.
+ for (int i = 0; i < observerMethod.getParameters().size(); i++)
+ {
+ InjectableParameter<?> parameter = observerMethod.getParameters().get(i);
+ if (parameter.getType().isAssignableFrom(event.getClass()))
+ {
+ InjectableParameter<?> newParameter = new InjectableParameterWrapper(parameter)
+ {
+ @Override
+ public Object getValue(Manager manager)
+ {
+ return event;
+ }
+ };
+ observerMethod.getParameters().set(i, newParameter);
+ }
+ }
+ this.observerMethod.invoke(manager, instance);
+ }
+
}
/**
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,74 +0,0 @@
-package org.jboss.webbeans.event;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import javax.webbeans.manager.Manager;
-
-import org.jboss.webbeans.injectable.InjectableMethod;
-import org.jboss.webbeans.injectable.Parameter;
-
-/**
- * A specialized injectable method where one of the injected parameters is an
- * event object.
- *
- * @author David Allen
- *
- */
-public class ObserverMethod extends InjectableMethod
-{
-
- public ObserverMethod(Method method)
- {
- super(method);
- }
-
- /**
- * Invokes the method on the given component instance and uses the specified
- * event object for parameter injection.
- *
- * @param manager The WebBeans manager
- * @param instance The component instance to invoke the observer method on
- * @param event The event object being fired
- */
- public void invoke(Manager manager, Object instance, Object event)
- {
- try
- {
- getMethod().invoke(instance, getParameterValues(manager, event));
- }
- catch (Exception e)
- {
- throw new RuntimeException("Unable to invoke " + getMethod() + " on " + instance, e);
- }
- }
-
- /**
- * Creates a list of parameter values to inject and uses the specified event object
- * to inject the observed event.
- *
- * @param manager The WebBeans manager
- * @param event The event being fired
- * @return an array of objects that serve as arguments for the invocation of the method
- */
- @SuppressWarnings("unchecked")
- public Object[] getParameterValues(Manager manager, Object event)
- {
- // Let the super class get the parameter values, but substitute the event
- // object so that we know for certain it is the correct one.
- Object[] parameterValues = super.getParameterValues(manager);
- List<Parameter> parms = this.getParameters();
- int i = 0;
- for (Parameter p : parms)
- {
- if (p.getType().isAssignableFrom(event.getClass()))
- {
- parameterValues[i] = event;
- break;
- }
- i++;
- }
- return parameterValues;
- }
-
-}
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,40 +0,0 @@
-package org.jboss.webbeans.injectable;
-
-import java.lang.annotation.Annotation;
-
-import javax.webbeans.manager.Manager;
-
-public abstract class Element<T>
-{
-
- private Annotation[] bindingTypes;
-
- public Element(Annotation[] bindingTypes)
- {
- this.bindingTypes = bindingTypes;
- }
-
- public Element()
- {
- this.bindingTypes = new Annotation[0];
- }
-
- public Annotation[] getBindingTypes()
- {
- return bindingTypes;
- }
-
- @Override
- public String toString()
- {
- return getType() + " with binding types " + getBindingTypes();
- }
-
- public T getValue(Manager container)
- {
- return container.getInstanceByType(getType(), getBindingTypes());
- }
-
- public abstract Class<? extends T> getType();
-
-}
Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java (from rev 117, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,95 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+/**
+ * Abstraction of java reflection for Web Beans, represent's something that can
+ * be injected
+ *
+ * @author Pete Muir
+ *
+ */
+public abstract class Injectable<T, S>
+{
+
+ private AnnotatedItem<T, S> annotatedItem;
+
+ public Injectable(AnnotatedItem<T, S> annotatedItem)
+ {
+ this.annotatedItem = annotatedItem;
+ }
+
+ public Annotation[] getBindingTypes()
+ {
+ return (Annotation[]) annotatedItem.getAnnotations().toArray();
+ }
+
+ protected Injectable() {}
+
+ @Override
+ public String toString()
+ {
+ return getType() + " with binding types " + getBindingTypes();
+ }
+
+ public T getValue(Manager manager)
+ {
+ return manager.getInstanceByType(getType(), getBindingTypes());
+ }
+
+ public Class<? extends T> getType()
+ {
+ return annotatedItem.getType();
+ }
+
+ public AnnotatedItem<T, S> getAnnotatedItem()
+ {
+ return annotatedItem;
+ }
+
+ public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+ {
+ Set<Bean<?>> resolvedBeans = new HashSet<Bean<?>>();
+ for (Bean<?> bean : possibleBeans)
+ {
+ if (bean.getTypes().contains(getType()))
+ {
+ List<Annotation> beanBindingTypes = new ArrayList<Annotation>(bean.getBindingTypes());
+ for (Annotation annotation : annotatedItem.getAnnotations())
+ {
+ if (beanBindingTypes.contains(annotation))
+ {
+ // TODO inspect annotation parameters
+ // TODO inspect deployment types
+ resolvedBeans.add(bean);
+ }
+ }
+ }
+ }
+ return resolvedBeans;
+ }
+
+ @Override
+ public boolean equals(Object other)
+ {
+ if (other instanceof Injectable)
+ {
+ Injectable<?, ?> that = (Injectable<?, ?>) other;
+ return this.getAnnotatedItem().equals(that.getAnnotatedItem());
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.reflect.Field;
+
+import org.jboss.webbeans.introspector.SimpleAnnotatedField;
+
+/**
+ * Abstraction of Java Reflection
+ *
+ * @author Pete Muir
+ *
+ */
+public class InjectableField<T> extends Injectable<T, Field>
+{
+
+ @SuppressWarnings("unchecked")
+ public InjectableField(Field field)
+ {
+ super(new SimpleAnnotatedField(field));
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,25 +1,36 @@
package org.jboss.webbeans.injectable;
+import java.lang.reflect.Method;
+
import javax.webbeans.manager.Manager;
-// TODO Name this class better
-public class InjectableMethod<T> extends Unit<T>
+import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.SimpleAnnotatedMethod;
+
+public class InjectableMethod<T> extends Unit<T, Method>
{
- private java.lang.reflect.Method method;
+ private AnnotatedMethod<T> method;
public InjectableMethod(java.lang.reflect.Method method)
{
super(method.getParameterTypes(), method.getParameterAnnotations());
- this.method = method;
+ this.method = new SimpleAnnotatedMethod<T>(method);
}
@SuppressWarnings("unchecked")
public T invoke(Manager container, Object instance)
{
+ return invoke(container, instance, getParameterValues(container));
+ }
+
+ @SuppressWarnings("unchecked")
+ public T invoke(Manager container, Object instance, Object[] parameters)
+ {
try
{
- return (T) method.invoke(instance, getParameterValues(container));
+ return (T) method.getAnnotatedMethod().invoke(instance, parameters);
}
catch (Exception e)
{
@@ -27,10 +38,10 @@
}
}
- public java.lang.reflect.Method getMethod()
+ @Override
+ public AnnotatedItem<T, Method> getAnnotatedItem()
{
return method;
}
-
}
Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java (from rev 117, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
+
+public class InjectableParameter<T> extends Injectable<T, Object>
+{
+
+ private static Annotation[] currentBinding = {new CurrentAnnotationLiteral()};
+
+ protected InjectableParameter() {}
+
+ public InjectableParameter(Annotation[] bindingTypes, Class<? extends T> type)
+ {
+ super(new SimpleAnnotatedItem<T, Object>(bindingTypes, type));
+ }
+
+ public InjectableParameter(Class<? extends T> type)
+ {
+ this(currentBinding, type);
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+public class InjectableParameterWrapper<T> extends InjectableParameter<T>
+{
+
+ private InjectableParameter<T> delegate;
+
+ public InjectableParameterWrapper(InjectableParameter<T> delegate)
+ {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public Annotation[] getBindingTypes()
+ {
+ return delegate.getBindingTypes();
+ }
+
+ @Override
+ public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+ {
+ return delegate.getPossibleTargets(possibleBeans);
+ }
+
+ @Override
+ public Class<? extends T> getType()
+ {
+ return delegate.getType();
+ }
+
+ @Override
+ public T getValue(Manager manager)
+ {
+ return delegate.getValue(manager);
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+public class InjectableWrapper<T, S> extends Injectable<T, S>
+{
+
+ private Injectable<T, S> delegate;
+
+ public InjectableWrapper(Injectable<T, S> delegate)
+ {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public Annotation[] getBindingTypes()
+ {
+ return delegate.getBindingTypes();
+ }
+
+ @Override
+ public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+ {
+ return delegate.getPossibleTargets(possibleBeans);
+ }
+
+ @Override
+ public Class<? extends T> getType()
+ {
+ return delegate.getType();
+ }
+
+ @Override
+ public T getValue(Manager manager)
+ {
+ return delegate.getValue(manager);
+ }
+
+}
\ No newline at end of file
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,33 +0,0 @@
-package org.jboss.webbeans.injectable;
-
-import java.lang.annotation.Annotation;
-
-import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
-
-public class Parameter<T> extends Element<T>
-{
-
- private static Annotation[] currentBinding = {new CurrentAnnotationLiteral()};
-
- private Class<? extends T> type;
-
- public Parameter(Annotation[] bindingTypes, Class<? extends T> type)
- {
- super(bindingTypes);
- this.type = type;
- }
-
- public Parameter(Class<? extends T> type)
- {
- super(currentBinding);
- this.type = type;
- }
-
- public Class<? extends T> getType()
- {
- return type;
- }
-
-
-
-}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -5,41 +5,45 @@
import javax.webbeans.manager.Manager;
+import org.jboss.webbeans.introspector.AnnotatedConstructor;
+import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.SimpleAnnotatedConstructor;
import org.jboss.webbeans.util.LoggerUtil;
-public class SimpleConstructor<T> extends Unit<T> implements ComponentConstructor<T>
+public class SimpleConstructor<T> extends Unit<T, Constructor<T>> implements ComponentConstructor<T>
{
public static final String LOGGER_NAME = "componentConstructor";
private static Logger log = LoggerUtil.getLogger(LOGGER_NAME);
- private Constructor<T> constructor;
+ private AnnotatedConstructor<T> constructor;
@SuppressWarnings("unchecked")
public SimpleConstructor(Constructor<T> constructor)
{
super(constructor.getParameterTypes(), constructor.getParameterAnnotations());
- this.constructor = constructor;
+ this.constructor = new SimpleAnnotatedConstructor<T>(constructor);
log.finest("Initialized metadata for " + constructor + " with injectable parameters " + getParameters());
}
-
- public Constructor<T> getConstructor()
- {
- return constructor;
- }
public T invoke(Manager container)
{
try
{
- log.finest("Creating new instance of " + constructor.getDeclaringClass() + " with injected parameters " + getParameters());
- return constructor.newInstance(getParameterValues(container));
+ log.finest("Creating new instance of " + constructor.getType() + " with injected parameters " + getParameters());
+ return constructor.getAnnotatedConstructor().newInstance(getParameterValues(container));
}
catch (Exception e)
{
- throw new RuntimeException("Error instantiating " + constructor.getDeclaringClass(), e);
+ throw new RuntimeException("Error instantiating " + constructor.getType(), e);
}
}
+ @Override
+ public AnnotatedItem<T, Constructor<T>> getAnnotatedItem()
+ {
+ return constructor;
+ }
+
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
+
+public class SimpleInjectable<T> extends Injectable<T, Object>
+{
+
+ public SimpleInjectable(Class<? extends T> type, Annotation[] bindingTypes)
+ {
+ super(new SimpleAnnotatedItem<T, Object>(bindingTypes, type));
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -6,35 +6,37 @@
import javax.webbeans.manager.Manager;
-public abstract class Unit<T>
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+public abstract class Unit<T, S>
{
- private List<Element<Object>> parameters;
+ private List<InjectableParameter<?>> parameters;
public Unit(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
{
parameters = initParameters(parameterTypes, parameterAnnotations);
}
- public List<Element<Object>> getParameters()
+ public List<InjectableParameter<?>> getParameters()
{
return parameters;
}
@SuppressWarnings("unchecked")
- protected static List<Element<Object>> initParameters(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
+ protected static <T> List<InjectableParameter<?>> initParameters(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
{
- List<Element<Object>> injectedParameters = new ArrayList<Element<Object>>();
+ List<InjectableParameter<?>> injectedParameters = new ArrayList<InjectableParameter<?>>();
for (int i = 0; i < parameterTypes.length; i++)
{
if (parameterAnnotations[i].length > 0)
{
- Parameter<Object> parameter = new Parameter(parameterAnnotations[i], parameterTypes[i]);
+ InjectableParameter<Object> parameter = new InjectableParameter(parameterAnnotations[i], parameterTypes[i]);
injectedParameters.add(i, parameter);
}
else
{
- Parameter<Object> parameter = new Parameter(parameterTypes[i]);
+ InjectableParameter<Object> parameter = new InjectableParameter(parameterTypes[i]);
injectedParameters.add(i, parameter);
}
}
@@ -51,4 +53,6 @@
return parameterValues;
}
+ public abstract AnnotatedItem<T, S> getAnnotatedItem();
+
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -8,7 +8,9 @@
import java.util.Set;
import java.util.Map.Entry;
-public abstract class AbstractAnnotatedItem<E> implements AnnotatedItem<E>
+import org.jboss.webbeans.injectable.Injectable;
+
+public abstract class AbstractAnnotatedItem<T, S> implements AnnotatedItem<T, S>
{
private Map<Class<? extends Annotation>, Annotation> annotationMap;
@@ -26,8 +28,13 @@
protected static Map<Class<? extends Annotation>, Annotation> buildAnnotationMap(AnnotatedElement element)
{
+ return buildAnnotationMap(element.getAnnotations());
+ }
+
+ protected static Map<Class<? extends Annotation>, Annotation> buildAnnotationMap(Annotation[] annotations)
+ {
Map<Class<? extends Annotation>, Annotation> annotationMap = new HashMap<Class<? extends Annotation>, Annotation>();
- for (Annotation annotation : element.getAnnotations())
+ for (Annotation annotation : annotations)
{
annotationMap.put(annotation.annotationType(), annotation);
}
@@ -44,9 +51,9 @@
}
@SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<? extends T> annotationType)
+ public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
{
- return (T) annotationMap.get(annotationType);
+ return (A) annotationMap.get(annotationType);
}
public Set<Annotation> getAnnotations(Class<? extends Annotation> metaAnnotationType)
@@ -73,8 +80,10 @@
return annotationMap.containsKey(annotatedType);
}
- protected static <T extends Annotation> Map<Class<? extends Annotation>, Set<Annotation>> populateMetaAnnotationMap(
- Class<T> metaAnnotationType, Map<Class<? extends Annotation>, Set<Annotation>> metaAnnotations, Map<Class<? extends Annotation>, Annotation> annotationMap)
+ protected static <A extends Annotation> Map<Class<? extends Annotation>, Set<Annotation>> populateMetaAnnotationMap(
+ Class<A> metaAnnotationType, Map<Class<? extends Annotation>,
+ Set<Annotation>> metaAnnotations,
+ Map<Class<? extends Annotation>, Annotation> annotationMap)
{
if (!metaAnnotations.containsKey(metaAnnotationType))
{
@@ -95,5 +104,16 @@
{
return annotationMap;
}
+
+ @Override
+ public boolean equals(Object other)
+ {
+ if (other instanceof AnnotatedItem)
+ {
+ AnnotatedItem<?, ?> that = (AnnotatedItem<?, ?>) other;
+ return this.getAnnotations().equals(that.getAnnotations()) && this.getDelegate().equals(that.getDelegate());
+ }
+ return false;
+ }
}
\ No newline at end of file
Added: 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 (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Constructor;
+
+/**
+ * AnnotatedType provides a uniform access to the annotations on an annotated
+ * class defined either in Java or XML
+ *
+ * @author Pete Muir
+ *
+ */
+public interface AnnotatedConstructor<T> extends AnnotatedItem<T, Constructor<T>>
+{
+
+ public Constructor<T> getAnnotatedConstructor();
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: 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 (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Field;
+
+/**
+ * AnnotatedField provides a uniform access to the annotations on an annotated
+ * field
+ *
+ * @author Pete Muir
+ *
+ */
+public interface AnnotatedField<T> extends AnnotatedItem<T, Field>
+{
+
+ public Field getAnnotatedField();
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
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 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -11,7 +11,7 @@
* @author Pete Muir
*
*/
-public interface AnnotatedItem<E>
+public interface AnnotatedItem<T, S>
{
/**
@@ -45,6 +45,8 @@
public boolean isAnnotationPresent(
Class<? extends Annotation> annotationType);
- public E getDelegate();
+ public S getDelegate();
+
+ public Class<? extends T> getType();
}
\ No newline at end of file
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 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -9,7 +9,7 @@
* @author Pete Muir
*
*/
-public interface AnnotatedMethod extends AnnotatedItem<Method>
+public interface AnnotatedMethod<T> extends AnnotatedItem<T, Method>
{
public Method getAnnotatedMethod();
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 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,6 +1,9 @@
package org.jboss.webbeans.introspector;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
/**
* AnnotatedType provides a uniform access to the annotations on an annotated
* class defined either in Java or XML
@@ -8,7 +11,7 @@
* @author Pete Muir
*
*/
-public interface AnnotatedType<T> extends AnnotatedItem<Class<T>>
+public interface AnnotatedType<T> extends AnnotatedItem<T, Class<T>>
{
/**
@@ -17,4 +20,29 @@
*/
public Class<? extends T> getAnnotatedClass();
+ /**
+ * Get all fields on the type
+ * @return
+ */
+ public Set<AnnotatedField<?>> getFields();
+
+ /**
+ * Get all annotations which are annotated with the given annotation
+ * type
+ *
+ * If no annotations are present which are annotated with the given
+ * annotation an empty set is returned
+ */
+ public Set<AnnotatedField<?>> getAnnotatedField(Class<? extends Annotation> annotationType);
+
+ /**
+ * Get all fields which are annotated with the given meta annotation
+ * type
+ *
+ * If no annotations are present which are annotated with the given meta
+ * annotation an empty set is returned
+ */
+ public Set<AnnotatedField<?>> getMetaAnnotatedFields(
+ Class<? extends Annotation> metaAnnotationType);
+
}
\ No newline at end of file
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,38 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Constructor;
+
+public class SimpleAnnotatedConstructor<T> extends AbstractAnnotatedItem<T, Constructor<T>> implements AnnotatedConstructor<T>
+{
+
+ private Constructor<T> constructor;
+
+ public SimpleAnnotatedConstructor(Constructor<T> constructor)
+ {
+ super(buildAnnotationMap(constructor));
+ this.constructor = constructor;
+ }
+
+ public Constructor<T> getAnnotatedConstructor()
+ {
+ return constructor;
+ }
+
+ @Override
+ public String toString()
+ {
+ return constructor + " " + getAnnotatedConstructor().toString();
+ }
+
+ public Constructor<T> getDelegate()
+ {
+ return constructor;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class<? extends T> getType()
+ {
+ return constructor.getDeclaringClass();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,38 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Field;
+
+public class SimpleAnnotatedField<T> extends AbstractAnnotatedItem<T, Field> implements AnnotatedField<T>
+{
+
+ private Field field;
+
+ public SimpleAnnotatedField(Field field)
+ {
+ super(buildAnnotationMap(field));
+ this.field = field;
+ }
+
+ public Field getAnnotatedField()
+ {
+ return field;
+ }
+
+ @Override
+ public String toString()
+ {
+ return field + " " + getAnnotatedField().toString();
+ }
+
+ public Field getDelegate()
+ {
+ return field;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class<? extends T> getType()
+ {
+ return (Class<? extends T>) field.getType();
+ }
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -3,17 +3,39 @@
import java.lang.annotation.Annotation;
import java.util.Map;
-public class SimpleAnnotatedItem<E> extends AbstractAnnotatedItem<E>
+public class SimpleAnnotatedItem<T, S> extends AbstractAnnotatedItem<T, S>
{
+ private Class<? extends T> type;
+
public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap)
{
+ this(annotationMap, null);
+ }
+
+ public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, Class<? extends Object> type)
+ {
super(annotationMap);
}
+
+ public SimpleAnnotatedItem(Annotation[] annotations)
+ {
+ this(annotations, null);
+ }
+
+ public SimpleAnnotatedItem(Annotation[] annotations, Class<? extends Object> type)
+ {
+ this(buildAnnotationMap(annotations), type);
+ }
- public E getDelegate()
+ public S getDelegate()
{
return null;
}
+
+ public Class<? extends T> getType()
+ {
+ return type;
+ }
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -2,31 +2,37 @@
import java.lang.reflect.Method;
-public class SimpleAnnotatedMethod extends AbstractAnnotatedItem<Method> implements AnnotatedMethod
+public class SimpleAnnotatedMethod<T> extends AbstractAnnotatedItem<T, Method> implements AnnotatedMethod<T>
{
- private Method annotatedMethod;
+ private Method method;
public SimpleAnnotatedMethod(Method method)
{
super(buildAnnotationMap(method));
- this.annotatedMethod = method;
+ this.method = method;
}
public Method getAnnotatedMethod()
{
- return annotatedMethod;
+ return method;
}
@Override
public String toString()
{
- return annotatedMethod + " " + getAnnotatedMethod().toString();
+ return method + " " + getAnnotatedMethod().toString();
}
public Method getDelegate()
{
- return annotatedMethod;
+ return method;
}
+
+ @SuppressWarnings("unchecked")
+ public Class<? extends T> getType()
+ {
+ return (Class<? extends T>) method.getReturnType();
+ }
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,7 +1,11 @@
package org.jboss.webbeans.introspector;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
/**
* Base class for implementing AnnotatedItem. This implementation assumes
@@ -10,15 +14,18 @@
* @author pmuir
*
*/
-public class SimpleAnnotatedType<T> extends AbstractAnnotatedItem<Class<T>> implements AnnotatedType<T>
+public class SimpleAnnotatedType<T> extends AbstractAnnotatedItem<T, Class<T>> implements AnnotatedType<T>
{
- private Class<T> annotatedClass;
+ private Class<T> clazz;
+ private Set<AnnotatedField<?>> fields;
+ private Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> annotatedFields;
+ private Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> metaAnnotatedFields;
public SimpleAnnotatedType(Class<T> annotatedClass, Map<Class<? extends Annotation>, Annotation> annotationMap)
{
super(annotationMap);
- this.annotatedClass = annotatedClass;
+ this.clazz = annotatedClass;
}
public SimpleAnnotatedType(Class<T> annotatedClass)
@@ -28,18 +35,105 @@
public Class<? extends T> getAnnotatedClass()
{
- return annotatedClass;
+ return clazz;
}
@Override
public String toString()
{
- return annotatedClass + " " + super.getAnnotationMap().toString();
+ return clazz + " " + super.getAnnotationMap().toString();
}
public Class<T> getDelegate()
{
- return annotatedClass;
+ return clazz;
}
+
+ public Set<AnnotatedField<?>> getFields()
+ {
+ if (fields == null)
+ {
+ initFields();
+ }
+ return fields;
+ }
+
+ private void initFields()
+ {
+ this.fields = new HashSet<AnnotatedField<?>>();
+ for(Field field : clazz.getFields())
+ {
+ fields.add(new SimpleAnnotatedField<Object>(field));
+ }
+ }
+ public Set<AnnotatedField<?>> getMetaAnnotatedFields(
+ Class<? extends Annotation> metaAnnotationType)
+ {
+ if (metaAnnotatedFields == null)
+ {
+ metaAnnotatedFields = new HashMap<Class<? extends Annotation>, Set<AnnotatedField<?>>>();
+ }
+ if (annotatedFields == null)
+ {
+ initAnnoatedFields();
+ }
+ populateMetaAnnotatedFieldMap(metaAnnotationType, annotatedFields, metaAnnotatedFields);
+ return metaAnnotatedFields.get(metaAnnotationType);
+ }
+
+ protected static <T extends Annotation> Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> populateMetaAnnotatedFieldMap(
+ Class<T> metaAnnotationType,
+ Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> metaAnnotations,
+ Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> annotationMap)
+ {
+ if (!metaAnnotations.containsKey(metaAnnotationType))
+ {
+ Set<AnnotatedField<?>> s = new HashSet<AnnotatedField<?>>();
+ for (Class<? extends Annotation> annotationType: annotationMap.keySet())
+ {
+ if (annotationType.isAnnotationPresent(metaAnnotationType))
+ {
+ s.addAll(annotationMap.get(annotationType));
+ }
+ }
+ metaAnnotations.put(metaAnnotationType, s);
+ }
+ return metaAnnotations;
+ }
+
+ public Set<AnnotatedField<?>> getAnnotatedField(
+ Class<? extends Annotation> annotationType)
+ {
+ if (annotatedFields == null)
+ {
+ initAnnoatedFields();
+ }
+ return annotatedFields.get(annotationType);
+ }
+
+ private void initAnnoatedFields()
+ {
+ if (fields == null)
+ {
+ initFields();
+ }
+ for (AnnotatedField<?> field : fields)
+ {
+ for (Annotation annotation : field.getAnnotations())
+ {
+ if (!annotatedFields.containsKey(annotation))
+ {
+ annotatedFields.put(annotation.annotationType(), new HashSet<AnnotatedField<?>>());
+ }
+ annotatedFields.get(annotation.annotationType()).add(field);
+ }
+ }
+ }
+
+ public Class<? extends T> getType()
+ {
+ return clazz;
+ }
+
}
\ No newline at end of file
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -6,6 +6,7 @@
import java.util.HashSet;
import java.util.logging.Logger;
+import javax.webbeans.BindingType;
import javax.webbeans.Dependent;
import org.jboss.webbeans.ManagerImpl;
@@ -101,6 +102,13 @@
}
@Override
+ protected void initInjectionPoints()
+ {
+ super.initInjectionPoints();
+ annotatedItem.getMetaAnnotatedFields(BindingType.class);
+ }
+
+ @Override
protected String getDefaultName()
{
String name = Strings.decapitalize(getType().getSimpleName());
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -1,7 +1,6 @@
package org.jboss.webbeans.model;
import java.lang.annotation.Annotation;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -18,7 +17,9 @@
import org.jboss.webbeans.bindings.DependentAnnotationLiteral;
import org.jboss.webbeans.bindings.ProductionAnnotationLiteral;
import org.jboss.webbeans.injectable.ComponentConstructor;
+import org.jboss.webbeans.injectable.Injectable;
import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.introspector.AnnotatedItem;
import org.jboss.webbeans.util.LoggerUtil;
@@ -37,6 +38,7 @@
protected Class<T> type;
protected InjectableMethod<?> removeMethod;
private Set<Class> apiTypes;
+ protected Set<Injectable<?, ?>> injectionPoints;
protected void init(ManagerImpl container)
{
@@ -51,6 +53,17 @@
initApiTypes();
}
+ protected void initInjectionPoints()
+ {
+ if (removeMethod != null)
+ {
+ for (InjectableParameter<?> injectable : removeMethod.getParameters())
+ {
+ injectionPoints.add(injectable);
+ }
+ }
+ }
+
protected abstract void initType();
protected void initApiTypes()
@@ -73,9 +86,9 @@
return classes;
}
- protected abstract AnnotatedItem<E> getAnnotatedItem();
+ protected abstract AnnotatedItem<T, E> getAnnotatedItem();
- protected abstract AnnotatedItem<E> getXmlAnnotatedItem();
+ protected abstract AnnotatedItem<T, E> getXmlAnnotatedItem();
protected void initBindingTypes()
{
@@ -307,5 +320,10 @@
{
return removeMethod;
}
+
+ public Set<Injectable<?, ?>> getInjectionPoints()
+ {
+ return injectionPoints;
+ }
}
\ No newline at end of file
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -10,6 +10,7 @@
import org.jboss.webbeans.injectable.ComponentConstructor;
import org.jboss.webbeans.injectable.EnterpriseConstructor;
import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.introspector.AnnotatedType;
import org.jboss.webbeans.util.Reflections;
@@ -33,8 +34,22 @@
super.init(container);
this.constructor = new EnterpriseConstructor<T>(getEjbMetaData());
initRemoveMethod(container);
+ initInjectionPoints();
}
+ @Override
+ protected void initInjectionPoints()
+ {
+ super.initInjectionPoints();
+ if (removeMethod != null)
+ {
+ for (InjectableParameter<?> injectable : removeMethod.getParameters())
+ {
+ injectionPoints.add(injectable);
+ }
+ }
+ }
+
public ComponentConstructor<T> getConstructor()
{
return constructor;
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -17,10 +17,10 @@
public class EventComponentModel<T> extends AbstractComponentModel<T, Object>
{
private String location;
- private AnnotatedItem<Object> annotatedItem;
- private AnnotatedItem<Object> xmlAnnotatedItem;
+ private AnnotatedItem<T, Object> annotatedItem;
+ private AnnotatedItem<T, Object> xmlAnnotatedItem;
- public EventComponentModel(SimpleAnnotatedItem<Object> annotatedItem, SimpleAnnotatedItem<Object> xmlAnnotatedItem, ManagerImpl manager)
+ public EventComponentModel(SimpleAnnotatedItem<T, Object> annotatedItem, SimpleAnnotatedItem<T, Object> xmlAnnotatedItem, ManagerImpl manager)
{
this.annotatedItem = annotatedItem;
this.xmlAnnotatedItem = xmlAnnotatedItem;
@@ -61,7 +61,7 @@
}
@Override
- protected AnnotatedItem<Object> getAnnotatedItem()
+ protected AnnotatedItem<T, Object> getAnnotatedItem()
{
return this.annotatedItem;
}
@@ -74,7 +74,7 @@
}
@Override
- protected AnnotatedItem<Object> getXmlAnnotatedItem()
+ protected AnnotatedItem<T, Object> getXmlAnnotatedItem()
{
return this.xmlAnnotatedItem;
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -25,7 +25,7 @@
private Set<Class<?>> requiredTypes;
private Set<Class<? extends Annotation>> supportedScopes;
- public MergedStereotypesModel(AnnotatedItem<E> annotatedItem, AnnotatedItem<E> xmlAnnotatedItem, ManagerImpl container)
+ public MergedStereotypesModel(AnnotatedItem<T, E> annotatedItem, AnnotatedItem<T, E> xmlAnnotatedItem, ManagerImpl container)
{
possibleDeploymentTypes = new HashMap<Class<? extends Annotation>, Annotation>();
possibleScopeTypes = new HashSet<Annotation>();
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -15,11 +15,11 @@
public class ProducerExpressionComponent<T> extends AbstractProducerComponentModel<T>
{
- private AnnotatedItem<Method> xmlAnnotatedItem;
- private AnnotatedItem<Method> annotatedItem = new SimpleAnnotatedItem<Method>(new HashMap<Class<? extends Annotation>, Annotation>());
+ private AnnotatedItem<T, Method> xmlAnnotatedItem;
+ private AnnotatedItem<T, Method> annotatedItem = new SimpleAnnotatedItem<T, Method>(new HashMap<Class<? extends Annotation>, Annotation>());
private String location;
- public ProducerExpressionComponent(AnnotatedItem<Method> xmlAnnotatedMethod, ManagerImpl container)
+ public ProducerExpressionComponent(AnnotatedItem<T, Method> xmlAnnotatedMethod, ManagerImpl container)
{
this.xmlAnnotatedItem = xmlAnnotatedMethod;
init(container);
@@ -41,11 +41,12 @@
protected void init(ManagerImpl container)
{
super.init(container);
+ initInjectionPoints();
}
@Override
- protected AnnotatedItem<Method> getAnnotatedItem()
+ protected AnnotatedItem<T, Method> getAnnotatedItem()
{
return annotatedItem;
}
@@ -74,7 +75,7 @@
}
@Override
- protected AnnotatedItem<Method> getXmlAnnotatedItem()
+ protected AnnotatedItem<T, Method> getXmlAnnotatedItem()
{
return xmlAnnotatedItem;
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -13,6 +13,7 @@
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.injectable.ComponentConstructor;
import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.injectable.MethodConstructor;
import org.jboss.webbeans.introspector.AnnotatedItem;
import org.jboss.webbeans.introspector.AnnotatedMethod;
@@ -22,12 +23,12 @@
public class ProducerMethodComponentModel<T> extends AbstractProducerComponentModel<T>
{
- private ComponentConstructor<T> constructor;
+ private MethodConstructor<T> constructor;
- private AnnotatedItem<Method> xmlAnnotatedItem = new SimpleAnnotatedItem<Method>(new HashMap<Class<? extends Annotation>, Annotation>());
- private AnnotatedMethod annotatedMethod;
+ private AnnotatedItem<T, Method> xmlAnnotatedItem = new SimpleAnnotatedItem<T, Method>(new HashMap<Class<? extends Annotation>, Annotation>());
+ private AnnotatedMethod<T> annotatedMethod;
- private AbstractComponentModel<?, Class<?>> declaringComponent;
+ private AbstractComponentModel<?, ?> declaringComponent;
// Cached values
private String location;
@@ -41,15 +42,33 @@
}
@Override
- protected void init(ManagerImpl container)
+ protected void init(ManagerImpl manager)
{
- super.init(container);
+ super.init(manager);
checkProducerMethod();
this.constructor = new MethodConstructor<T>(getAnnotatedItem().getDelegate());
- initRemoveMethod(container);
+ initRemoveMethod(manager);
+ initInjectionPoints();
}
@Override
+ protected void initInjectionPoints()
+ {
+ super.initInjectionPoints();
+ for (InjectableParameter<?> injectable : constructor.getParameters())
+ {
+ injectionPoints.add(injectable);
+ }
+ if (removeMethod != null)
+ {
+ for (InjectableParameter<?> injectable : removeMethod.getParameters())
+ {
+ injectionPoints.add(injectable);
+ }
+ }
+ }
+
+ @Override
protected void initDeploymentType(ManagerImpl container)
{
super.initDeploymentType(container);
@@ -65,7 +84,7 @@
protected void initDeclaringComponent(ManagerImpl container)
{
- declaringComponent = (AbstractComponentModel<?, Class<?>>) container.getModelManager().getComponentModel(getAnnotatedItem().getDelegate().getDeclaringClass());
+ declaringComponent = container.getModelManager().getComponentModel(getAnnotatedItem().getDelegate().getDeclaringClass());
}
@Override
@@ -109,7 +128,7 @@
}
@Override
- protected AnnotatedItem<Method> getAnnotatedItem()
+ protected AnnotatedMethod<T> getAnnotatedItem()
{
return annotatedMethod;
}
@@ -129,7 +148,7 @@
}
@Override
- protected AnnotatedItem<Method> getXmlAnnotatedItem()
+ protected AnnotatedItem<T, Method> getXmlAnnotatedItem()
{
return xmlAnnotatedItem;
}
@@ -180,7 +199,7 @@
return removeMethod;
}
- public AbstractComponentModel<?, Class<?>> getDeclaringComponent()
+ public AbstractComponentModel<?, ?> getDeclaringComponent()
{
return declaringComponent;
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java 2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java 2008-10-19 22:31:44 UTC (rev 119)
@@ -8,6 +8,7 @@
import javax.webbeans.Initializer;
import org.jboss.webbeans.ManagerImpl;
+import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.injectable.SimpleConstructor;
import org.jboss.webbeans.introspector.AnnotatedType;
import org.jboss.webbeans.util.LoggerUtil;
@@ -41,9 +42,20 @@
super.init(container);
initConstructor();
checkType(getType());
+ initInjectionPoints();
// TODO Interceptors
}
+ @Override
+ protected void initInjectionPoints()
+ {
+ super.initInjectionPoints();
+ for (InjectableParameter<?> injectable : constructor.getParameters())
+ {
+ injectionPoints.add(injectable);
+ }
+ }
+
public static void checkType(Class<?> type)
{
if (type.isMemberClass())
More information about the weld-commits
mailing list