private boolean hasFilter(Class<?> clazz, Class<? extends Predicate> filter) { if (clazz == null || clazz == Object.class) return false; TestSelector annotation = clazz.getAnnotation(TestSelector.class); if (annotation != null) { for (Class<? extends Predicate<IMethodInstance>> f : annotation.filters()) { if (f == filter) return true; } } return hasFilter(clazz.getSuperclass(), filter); }
Set<Class<? extends Predicate<IMethodInstance>>> filters = new HashSet<>(); for (IMethodInstance method : methods) { findInterceptors(method.getInstance().getClass(), interceptorSet, interceptorList, filters); for (IMethodInstance m : methods) { for (Predicate<IMethodInstance> filter : filterInstances) { if (hasFilter(m.getInstance().getClass(), filter.getClass()) && !filter.test(m)) continue METHODS;
private void findInterceptors(Class<?> clazz, Set<Class<? extends IMethodInterceptor>> interceptorSet, List<Class<? extends IMethodInterceptor>> interceptorList, Set<Class<? extends Predicate<IMethodInstance>>> filters) { if (clazz == null || clazz.equals(Object.class)) return; findInterceptors(clazz.getSuperclass(), interceptorSet, interceptorList, filters); TestSelector annotation = clazz.getAnnotation(TestSelector.class); if (annotation != null) { for (Class<? extends IMethodInterceptor> interceptor : annotation.interceptors()) { if (interceptorSet.add(interceptor)) { interceptorList.add(interceptor); } } for (Class<? extends Predicate<IMethodInstance>> filter : annotation.filters()) { filters.add(filter); } } }