public <X> ProducerFactory<X> getProducerFactory(AnnotatedField<? super X> field, Bean<X> bean) { return new FieldProducerFactory<>(field, bean, webBeansContext); }
private Class<?> findClass(ProducerFactory<?> factory, Class<?> type) { if (MethodProducerFactory.class.isInstance(factory)) { return MethodProducerFactory.class.cast(factory).getReturnType(); } if (FieldProducerFactory.class.isInstance(factory)) { return FieldProducerFactory.class.cast(factory).getReturnType(); } return type; }
public FieldProducerFactory(AnnotatedField<? super P> producerField, Bean<P> parent, WebBeansContext webBeansContext) { super(parent, webBeansContext); Asserts.assertNotNull(producerField, "producer method"); if (producerField.isAnnotationPresent(Inject.class)) { throw new IllegalArgumentException("producer field has @Inject annotation: " + producerField); } Type type = producerField.getJavaMember().getGenericType(); if (ParameterizedType.class.isInstance(type)) { for (Type arg : ParameterizedType.class.cast(type).getActualTypeArguments()) { if (ClassUtil.isWildCardType(arg)) { throw new IllegalArgumentException("Wildcard are forbidden: " + type); } } } this.producerField = producerField; defineDisposalMethod(); }
@Override public <T> Producer<T> createProducer(Bean<T> bean) { Set<InjectionPoint> disposalIPs = getInjectionPoints(bean); Producer<T> producer = new ProducerFieldProducer<>(parent, producerField, disposalMethod, disposalIPs, webBeansContext); return webBeansContext.getWebBeansUtil().fireProcessProducerEvent(producer, producerField); }
@Override protected <X> P createBean(InjectionTargetBean<X> owner, Class<T> beanClass) { return (P) new ProducerFieldBean<T>(owner, beanAttributes, beanClass, new FieldProducerFactory(annotatedMember, owner, owner.getWebBeansContext())); }