@SuppressWarnings({ "rawtypes", "unchecked" }) private static void createAnnotatedTypeForExistingBeanClass(BeanManagerImpl beanManager, InjectionTargetBean bean) { WebBeansContext wbc = beanManager.getWebBeansContext(); AnnotatedElementFactory annotatedElementFactory = wbc.getAnnotatedElementFactory(); // Clear AnnotatedElementFactory caches annotatedElementFactory.clear(); AnnotatedType annotatedType = annotatedElementFactory.newAnnotatedType(bean.getBeanClass()); ReflectionHelper.set(bean, InjectionTargetBean.class, "annotatedType", annotatedType); // Updated members that were set by bean attributes BeanAttributesImpl attributes = BeanAttributesBuilder.forContext(wbc).newBeanAttibutes(annotatedType).build(); ReflectionHelper.set(bean, BeanAttributesImpl.class, "types", attributes.getTypes()); ReflectionHelper.set(bean, BeanAttributesImpl.class, "qualifiers", attributes.getQualifiers()); ReflectionHelper.set(bean, BeanAttributesImpl.class, "scope", attributes.getScope()); ReflectionHelper.set(bean, BeanAttributesImpl.class, "name", attributes.getName()); ReflectionHelper.set(bean, BeanAttributesImpl.class, "stereotypes", attributes.getStereotypes()); ReflectionHelper.set(bean, BeanAttributesImpl.class, "alternative", attributes.isAlternative()); InjectionTargetFactory factory = new InjectionTargetFactoryImpl(annotatedType, bean.getWebBeansContext()); InjectionTarget injectionTarget = factory.createInjectionTarget(bean); ReflectionHelper.set(bean, InjectionTargetBean.class, "injectionTarget", injectionTarget); LOGGER.debug("New annotated type created for bean '{}'", bean.getBeanClass()); }
protected AnnotatedType<?> getSuperType() { Class<?> superclass = annotatedMember.getDeclaringType().getJavaClass().getSuperclass(); if (superclass == null) { return null; } return parent.getWebBeansContext().getAnnotatedElementFactory().getAnnotatedType(superclass); }
@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())); }
@Override protected <P> ProducerMethodBean<T> createBean(InjectionTargetBean<P> parent, Class<T> beanClass) { AnnotatedMethod<P> annotatedMethod = (AnnotatedMethod<P>) annotatedMember; ProducerMethodBean<T> producerMethodBean = new ProducerMethodBean<>(parent, beanAttributes, beanClass, new MethodProducerFactory<>(annotatedMethod, parent, parent.getWebBeansContext())); return producerMethodBean; }
@Override protected <X> ResourceBean<T, R> createBean(InjectionTargetBean<X> owner, Class<T> beanClass) { return new ResourceBean<T, R>( owner, resourceRef, beanAttributes, beanClass, new ResourceProducerFactory( !Dependent.class.equals(beanAttributes.getScope()), owner, new ResourceProvider<>(resourceRef, owner.getWebBeansContext()), beanClass, owner.getWebBeansContext(), annotatedMember, resourceRef)); } }
WebBeansContext wbc = bean.getWebBeansContext(); Set<ProducerFieldBean<?>> producerFields = new ProducerFieldBeansBuilder(wbc, beanAnnotatedType).defineProducerFields(bean); Set<ProducerMethodBean<?>> producerMethods = new ProducerMethodBeansBuilder(wbc, beanAnnotatedType).defineProducerMethods(bean, producerFields);