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); }
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); }
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()); }