Ejemplo n.º 1
0
  /*
   * Utility methods for field InjectionPoints
   */
  public List<Set<FieldInjectionPoint<?, ?>>> getFieldInjectionPoints(
      Bean<?> declaringBean, EnhancedAnnotatedType<?> type, BeanManagerImpl manager) {
    List<Set<FieldInjectionPoint<?, ?>>> injectableFieldsList =
        new ArrayList<Set<FieldInjectionPoint<?, ?>>>();

    if (type.slim() instanceof UnbackedAnnotatedType<?>) {
      // external AnnotatedTypes require special treatment
      Collection<EnhancedAnnotatedField<?, ?>> allFields = type.getEnhancedFields(Inject.class);

      for (Class<?> clazz = type.getJavaClass();
          clazz != null && clazz != Object.class;
          clazz = clazz.getSuperclass()) {
        ImmutableSet.Builder<FieldInjectionPoint<?, ?>> fields = ImmutableSet.builder();
        for (EnhancedAnnotatedField<?, ?> field : allFields) {
          if (!field.isStatic() && field.getJavaMember().getDeclaringClass().equals(clazz)) {
            addFieldInjectionPoint(field, fields, declaringBean, type.getJavaClass(), manager);
          }
        }
        injectableFieldsList.add(0, fields.build());
      }
    } else {
      for (EnhancedAnnotatedType<?> t = type;
          t != null && !t.getJavaClass().equals(Object.class);
          t = t.getEnhancedSuperclass()) {
        ImmutableSet.Builder<FieldInjectionPoint<?, ?>> fields = ImmutableSet.builder();
        for (EnhancedAnnotatedField<?, ?> annotatedField :
            t.getDeclaredEnhancedFields(Inject.class)) {
          if (!annotatedField.isStatic()) {
            addFieldInjectionPoint(
                annotatedField, fields, declaringBean, t.getJavaClass(), manager);
          }
        }
        injectableFieldsList.add(0, fields.build());
      }
    }
    return ImmutableList.copyOf(injectableFieldsList);
  }