Skip to content

Commit

Permalink
scan for producer fields
Browse files Browse the repository at this point in the history
git-svn-id: http://anonsvn.jboss.org/repos/weld/ri/trunk@441 1c488680-804c-0410-94cd-c6b725194a0e
  • Loading branch information
Gavin King authored and gavin.king@gmail.com committed Dec 7, 2008
1 parent b6a23c1 commit d45e4fe
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
Expand Up @@ -103,6 +103,17 @@ public Set<AnnotatedMethod<Object>> getProducerMethods()
return getAnnotatedItem().getAnnotatedMethods(Produces.class);
}

/**
* Returns the producer fields
*
* @return A set of producer fields. An empty set is returned if there are
* none present
*/
public Set<AnnotatedField<Object>> getProducerFields()
{
return getAnnotatedItem().getAnnotatedFields(Produces.class);
}

/**
* Returns @Observer annotated fields.
*
Expand Down
Expand Up @@ -20,6 +20,7 @@
import static org.jboss.webbeans.util.BeanFactory.createEnterpriseBean;
import static org.jboss.webbeans.util.BeanFactory.createEventBean;
import static org.jboss.webbeans.util.BeanFactory.createObserver;
import static org.jboss.webbeans.util.BeanFactory.createProducerFieldBean;
import static org.jboss.webbeans.util.BeanFactory.createProducerMethodBean;
import static org.jboss.webbeans.util.BeanFactory.createSimpleBean;

Expand All @@ -38,6 +39,7 @@
import org.jboss.webbeans.bean.AbstractBean;
import org.jboss.webbeans.bean.AbstractClassBean;
import org.jboss.webbeans.bean.EventBean;
import org.jboss.webbeans.bean.ProducerFieldBean;
import org.jboss.webbeans.bean.ProducerMethodBean;
import org.jboss.webbeans.bindings.InitializedBinding;
import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
Expand Down Expand Up @@ -141,6 +143,12 @@ public void registerBeans(Iterable<Class<?>> classes)
CurrentManager.rootManager().getResolver().addInjectionPoints(producerMethodBean.getInjectionPoints());
log.info("Web Bean: " + producerMethodBean);
}
for (AnnotatedField<Object> producerField : bean.getProducerFields())
{
ProducerFieldBean<?> producerFieldBean = createProducerFieldBean(producerField, bean);
beans.add(producerFieldBean);
log.info("Web Bean: " + producerFieldBean);
}
for (AnnotatedField<Object> eventField : bean.getEventFields())
{
EventBean<?> eventBean = createEventBean(eventField);
Expand Down
28 changes: 28 additions & 0 deletions webbeans-ri/src/main/java/org/jboss/webbeans/util/BeanFactory.java
Expand Up @@ -17,12 +17,14 @@

package org.jboss.webbeans.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.jboss.webbeans.CurrentManager;
import org.jboss.webbeans.bean.AbstractClassBean;
import org.jboss.webbeans.bean.EnterpriseBean;
import org.jboss.webbeans.bean.EventBean;
import org.jboss.webbeans.bean.ProducerFieldBean;
import org.jboss.webbeans.bean.ProducerMethodBean;
import org.jboss.webbeans.bean.SimpleBean;
import org.jboss.webbeans.event.ObserverImpl;
Expand Down Expand Up @@ -74,6 +76,32 @@ public static <T> ProducerMethodBean<T> createProducerMethodBean(Class<T> type,
return new ProducerMethodBean<T>(method, declaringBean, CurrentManager.rootManager());
}

/**
* Creates a producer field Web Bean
*
* @param <T> The type
* @param type The class
* @param field The underlying field
* @param declaringBean The declaring bean abstraction
* @return A producer Web Bean
*/
public static <T> ProducerFieldBean<T> createProducerFieldBean(Class<T> type, Field field, AbstractClassBean<?> declaringBean)
{
return new ProducerFieldBean<T>(field, declaringBean, CurrentManager.rootManager());
}

/**
* Creates a producer field Web Bean
*
* @param field The underlying method abstraction
* @param declaringBean The declaring bean abstraction
* @return A producer Web Bean
*/
public static <T> ProducerFieldBean<T> createProducerFieldBean(AnnotatedField<T> field, AbstractClassBean<?> declaringBean)
{
return new ProducerFieldBean<T>(field, declaringBean, CurrentManager.rootManager());
}

/**
* Creates a producer method Web Bean
*
Expand Down

0 comments on commit d45e4fe

Please sign in to comment.