Exemplo n.º 1
0
    public void configure(
        final DeploymentPhaseContext context,
        final ComponentConfiguration componentConfiguration,
        final ViewDescription description,
        final ViewConfiguration configuration)
        throws DeploymentUnitProcessingException {
      // Create method indexes
      final DeploymentReflectionIndex reflectionIndex =
          context.getDeploymentUnit().getAttachment(REFLECTION_INDEX);
      final List<Method> methods = configuration.getProxyFactory().getCachedMethods();
      for (final Method method : methods) {
        MethodIdentifier methodIdentifier = MethodIdentifier.getIdentifierForMethod(method);
        Method componentMethod =
            ClassReflectionIndexUtil.findMethod(
                reflectionIndex, componentConfiguration.getComponentClass(), methodIdentifier);

        if (componentMethod == null
            && method.getDeclaringClass().isInterface()
            && (method.getModifiers() & (ABSTRACT | PUBLIC | STATIC)) == PUBLIC) {
          // no component method and the interface method is defaulted, so we really do want to
          // invoke on the interface method
          componentMethod = method;
        }
        if (componentMethod != null) {

          if ((BRIDGE & componentMethod.getModifiers()) != 0) {
            Method other =
                findRealMethodForBridgeMethod(
                    componentMethod, componentConfiguration, reflectionIndex, methodIdentifier);
            // try and find the non-bridge method to delegate to
            if (other != null) {
              componentMethod = other;
            }
          }

          configuration.addViewInterceptor(
              method,
              new ImmediateInterceptorFactory(new ComponentDispatcherInterceptor(componentMethod)),
              InterceptorOrder.View.COMPONENT_DISPATCHER);
          configuration.addClientInterceptor(
              method,
              CLIENT_DISPATCHER_INTERCEPTOR_FACTORY,
              InterceptorOrder.Client.CLIENT_DISPATCHER);
        }
      }

      configuration.addClientPostConstructInterceptor(
          Interceptors.getTerminalInterceptorFactory(),
          InterceptorOrder.ClientPostConstruct.TERMINAL_INTERCEPTOR);
      configuration.addClientPreDestroyInterceptor(
          Interceptors.getTerminalInterceptorFactory(),
          InterceptorOrder.ClientPreDestroy.TERMINAL_INTERCEPTOR);
    }
Exemplo n.º 2
0
    public void configure(
        final DeploymentPhaseContext context,
        final ComponentConfiguration componentConfiguration,
        final ViewDescription description,
        final ViewConfiguration configuration)
        throws DeploymentUnitProcessingException {
      // Create method indexes
      final DeploymentReflectionIndex reflectionIndex =
          context.getDeploymentUnit().getAttachment(REFLECTION_INDEX);
      final List<Method> methods = configuration.getProxyFactory().getCachedMethods();
      for (final Method method : methods) {
        MethodIdentifier methodIdentifier = MethodIdentifier.getIdentifierForMethod(method);
        Method componentMethod =
            ClassReflectionIndexUtil.findMethod(
                reflectionIndex, componentConfiguration.getComponentClass(), methodIdentifier);

        if (componentMethod != null) {

          if ((BRIDGE & componentMethod.getModifiers()) != 0) {
            Collection<Method> otherMethods =
                ClassReflectionIndexUtil.findMethods(
                    reflectionIndex,
                    reflectionIndex.getClassIndex(componentConfiguration.getComponentClass()),
                    methodIdentifier.getName(),
                    methodIdentifier.getParameterTypes());
            // try and find the non-bridge method to delegate to
            for (final Method other : otherMethods) {
              if ((BRIDGE & other.getModifiers()) == 0) {
                componentMethod = other;
                break;
              }
            }
          }

          configuration.addViewInterceptor(
              method,
              new ImmediateInterceptorFactory(new ComponentDispatcherInterceptor(componentMethod)),
              InterceptorOrder.View.COMPONENT_DISPATCHER);
          configuration.addClientInterceptor(
              method,
              CLIENT_DISPATCHER_INTERCEPTOR_FACTORY,
              InterceptorOrder.Client.CLIENT_DISPATCHER);
        }
      }

      configuration.addClientPostConstructInterceptor(
          Interceptors.getTerminalInterceptorFactory(),
          InterceptorOrder.ClientPostConstruct.TERMINAL_INTERCEPTOR);
      configuration.addClientPreDestroyInterceptor(
          Interceptors.getTerminalInterceptorFactory(),
          InterceptorOrder.ClientPreDestroy.TERMINAL_INTERCEPTOR);
    }
Exemplo n.º 3
0
 ViewService(final ViewConfiguration viewConfiguration) {
   viewClass = viewConfiguration.getViewClass();
   final ProxyFactory<?> proxyFactory = viewConfiguration.getProxyFactory();
   this.proxyFactory = proxyFactory;
   final Method[] methods = proxyFactory.getCachedMethods();
   final int methodCount = methods.length;
   viewPostConstruct =
       Interceptors.getChainedInterceptorFactory(
           viewConfiguration.getViewPostConstructInterceptors());
   viewPreDestroy =
       Interceptors.getChainedInterceptorFactory(
           viewConfiguration.getViewPreDestroyInterceptors());
   clientPostConstruct =
       Interceptors.getChainedInterceptorFactory(
           viewConfiguration.getClientPostConstructInterceptors());
   clientPreDestroy =
       Interceptors.getChainedInterceptorFactory(
           viewConfiguration.getClientPreDestroyInterceptors());
   final IdentityHashMap<Method, InterceptorFactory> viewInterceptorFactories =
       new IdentityHashMap<Method, InterceptorFactory>(methodCount);
   final IdentityHashMap<Method, InterceptorFactory> clientInterceptorFactories =
       new IdentityHashMap<Method, InterceptorFactory>(methodCount);
   for (Method method : methods) {
     if (method.getName().equals("finalize") && method.getParameterTypes().length == 0) {
       viewInterceptorFactories.put(method, DESTROY_INTERCEPTOR);
     } else {
       viewInterceptorFactories.put(
           method,
           Interceptors.getChainedInterceptorFactory(
               viewConfiguration.getViewInterceptorDeque(method)));
       clientInterceptorFactories.put(
           method,
           Interceptors.getChainedInterceptorFactory(
               viewConfiguration.getClientInterceptorDeque(method)));
     }
   }
   this.viewInterceptorFactories = viewInterceptorFactories;
   this.clientInterceptorFactories = clientInterceptorFactories;
   allowedMethods = Collections.unmodifiableSet(viewInterceptorFactories.keySet());
 }