1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jadira.scanner.classpath.filter;
17
18 import java.util.Collection;
19 import java.util.HashSet;
20 import java.util.Set;
21
22 import org.jadira.scanner.classpath.types.JClass;
23 import org.jadira.scanner.classpath.types.JInterface;
24 import org.jadira.scanner.core.filter.AbstractFilter;
25
26 public class JClassImplementsFilter extends AbstractFilter<JClass> {
27
28 private Set<Class<?>> types = new HashSet<Class<?>>();
29
30 public JClassImplementsFilter() {
31 }
32
33 public JClassImplementsFilter(Class<?> type) {
34 if (type != null) {
35 types.add(type);
36 }
37 }
38
39 public JClassImplementsFilter(Collection<Class<?>> types) {
40 for (Class<?> next : types) {
41 types.add(next);
42 }
43 }
44
45 @Override
46 public boolean accept(JClass clazz) {
47
48 while (true) {
49 JClass superType = clazz.getSuperType();
50 if (superType == null) {
51 return false;
52 }
53 for (JInterface iface : superType.getImplementedInterfaces()) {
54 if (types.contains(iface.getActualClass())) {
55 return true;
56 }
57 }
58 }
59 }
60 }