示例#1
0
 private void validateWsEndpointAnnotatedType(AnnotatedType<TranslatorEndpoint> annotatedType) {
   assertEquals(annotatedType.getBaseType(), TranslatorEndpoint.class);
   // translate()
   assertEquals(annotatedType.getMethods().size(), 1);
   Set<Type> typeClosure = annotatedType.getTypeClosure();
   // Translator, TranslatorEndpoint, Object
   assertTrue(
       typeSetMatches(typeClosure, Translator.class, TranslatorEndpoint.class, Object.class));
 }
  private void generateClassHeader(JavaWriter out) throws IOException {
    out.println();
    out.println("public class " + getClassName() + "<T>");

    if (hasNoInterfaceView()) out.println("  extends " + getBeanType().getJavaClass().getName());

    out.print("  implements SessionProxyFactory<T>");
    out.print(",\n    " + CandiEnhancedBean.class.getName());

    for (AnnotatedType<? super X> apiType : getLocalApi()) {
      out.print(",\n    ");
      out.printType(apiType.getBaseType());
    }

    for (AnnotatedType<? super X> apiType : getRemoteApi()) {
      out.print(",\n    ");
      out.printType(apiType.getBaseType());
    }

    out.println();
  }
 @Test
 @SpecAssertion(section = PAT, id = "ba")
 public void testGetAnnotatedType() {
   AnnotatedType<Dog> annotatedType = ProcessAnnotatedTypeObserver.getDogAnnotatedType();
   assertEquals(annotatedType.getBaseType(), Dog.class);
   Set<AnnotatedMethod<? super Dog>> annotatedMethods = annotatedType.getMethods();
   assertEquals(annotatedMethods.size(), 3);
   for (AnnotatedMethod<? super Dog> annotatedMethod : annotatedMethods) {
     Set<String> validMethodNames =
         new HashSet<String>(Arrays.asList("bite", "live", "drinkMilk"));
     if (!validMethodNames.contains(annotatedMethod.getJavaMember().getName())) {
       fail("Invalid method name found" + annotatedMethod.getJavaMember().getName());
     }
   }
 }
  private void introspectInject(AnnotatedType<X> type, ArrayList<ConfigProgram> injectProgramList) {
    Class<?> rawType = (Class<?>) type.getBaseType();

    if (rawType == null || Object.class.equals(rawType)) return;

    // Class<?> parentClass = rawType.getSuperclass();

    // configureClassResources(injectList, type);

    introspectInjectClass(type, injectProgramList);
    introspectInjectField(type, injectProgramList);
    introspectInjectMethod(type, injectProgramList);

    ResourceProgramManager resourceManager = _cdiManager.getResourceManager();

    resourceManager.buildInject(rawType, injectProgramList);
  }
 private UnbackedAnnotatedType(
     AnnotatedType<X> source, AnnotatedTypeIdentifier identifier, SharedObjectCache cache) {
   super(source.getBaseType(), source.getTypeClosure(), source.getAnnotations());
   this.javaClass = source.getJavaClass();
   ImmutableSet.Builder<AnnotatedConstructor<X>> constructors = ImmutableSet.builder();
   for (AnnotatedConstructor<X> constructor : source.getConstructors()) {
     constructors.add(UnbackedAnnotatedConstructor.of(constructor, this, cache));
   }
   this.constructors = constructors.build();
   ImmutableSet.Builder<AnnotatedMethod<? super X>> methods = ImmutableSet.builder();
   for (AnnotatedMethod<? super X> originalMethod : source.getMethods()) {
     methods.add(UnbackedAnnotatedMethod.of(originalMethod, this, cache));
   }
   this.methods = methods.build();
   ImmutableSet.Builder<AnnotatedField<? super X>> fields = ImmutableSet.builder();
   for (AnnotatedField<? super X> originalField : source.getFields()) {
     fields.add(UnbackedAnnotatedField.of(originalField, this, cache));
   }
   this.fields = fields.build();
   this.identifier = identifier;
 }
  private void validatePassivating(Bean<?> bean) {
    Type baseType = _annotatedType.getBaseType();

    Class<?> cl = getBeanManager().createTargetBaseType(baseType).getRawClass();
    boolean isStateful = _annotatedType.isAnnotationPresent(Stateful.class);

    if (!Serializable.class.isAssignableFrom(cl) && !isStateful) {
      throw new ConfigException(
          L.l(
              "'{0}' is an invalid @{1} bean because it's not serializable for {2}.",
              cl.getSimpleName(), bean.getScope().getSimpleName(), bean));
    }

    for (InjectionPoint ip : bean.getInjectionPoints()) {
      if (ip.isTransient()) continue;

      Type type = ip.getType();

      if (ip.getBean() instanceof CdiStatefulBean) continue;

      if (type instanceof Class<?>) {
        Class<?> ipClass = (Class<?>) type;

        if (!ipClass.isInterface()
            && !Serializable.class.isAssignableFrom(ipClass)
            && !getBeanManager().isNormalScope(ip.getBean().getScope())) {
          throw new ConfigException(
              L.l(
                  "'{0}' is an invalid @{1} bean because '{2}' value {3} is not serializable for {4}.",
                  cl.getSimpleName(),
                  bean.getScope().getSimpleName(),
                  ip.getType(),
                  ip.getMember().getName(),
                  bean));
        }
      }
    }
  }
  /** Called for implicit introspection. */
  private void introspect(AnnotatedType<X> beanType) {
    Class<X> cl = (Class<X>) beanType.getBaseType();

    introspectConstructor(beanType);
  }
  /** Binds parameters */
  private CandiProducer<X> build() {
    Thread thread = Thread.currentThread();
    ClassLoader oldLoader = thread.getContextClassLoader();

    try {
      thread.setContextClassLoader(getBeanManager().getClassLoader());

      introspect();

      Class<X> cl = (Class<X>) _annotatedType.getBaseType();

      if (_beanCtor == null) {
        // XXX:
        AnnotatedType<X> beanType = _annotatedType;

        if (beanType == null) beanType = ReflectionAnnotatedFactory.introspectType(cl);

        introspectConstructor(beanType);
      }

      Class<X> instanceClass = null;

      if (_isGenerateInterception) {
        if (!_annotatedType.isAnnotationPresent(javax.interceptor.Interceptor.class)
            && !_annotatedType.isAnnotationPresent(javax.decorator.Decorator.class)) {
          CandiBeanGenerator<X> bean = new CandiBeanGenerator<X>(getBeanManager(), _annotatedType);
          bean.introspect();

          instanceClass = (Class<X>) bean.generateClass();
        }

        if (instanceClass == cl && isSerializeHandle()) {
          instanceClass = SerializationAdapter.gen(instanceClass);
        }
      }

      if (instanceClass != null && instanceClass != _instanceClass) {
        try {
          if (_javaCtor != null) {
            _javaCtor =
                (Constructor<X>) getConstructor(instanceClass, _javaCtor.getParameterTypes());
            _javaCtor.setAccessible(true);
          }
        } catch (Exception e) {
          // server/2423
          log.log(Level.FINE, e.toString(), e);
          // throw ConfigException.create(e);
        }
      }

      ConfigProgram[] injectProgram = introspectInject(_annotatedType);
      ConfigProgram[] initProgram = introspectPostConstruct(_annotatedType);

      ArrayList<ConfigProgram> destroyList = new ArrayList<ConfigProgram>();
      introspectDestroy(destroyList, _annotatedType);
      ConfigProgram[] destroyProgram = new ConfigProgram[destroyList.size()];
      destroyList.toArray(destroyProgram);

      Arg[] args = null;

      if (_beanCtor != null) args = introspectArguments(_beanCtor, _beanCtor.getParameters());

      CandiProducer<X> producer =
          new CandiProducer<X>(
              _bean,
              instanceClass,
              _javaCtor,
              args,
              injectProgram,
              initProgram,
              destroyProgram,
              _injectionPointSet);

      return producer;
    } finally {
      thread.setContextClassLoader(oldLoader);
    }
  }