-
Notifications
You must be signed in to change notification settings - Fork 92
Expand file tree
/
Copy pathInterfaceMatcher.java
More file actions
41 lines (32 loc) · 1.07 KB
/
InterfaceMatcher.java
File metadata and controls
41 lines (32 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package org.umlgraph.doclet;
import java.util.regex.Pattern;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.RootDoc;
/**
* Matches every class that implements (directly or indirectly) an
* interfaces matched by regular expression provided.
*/
public class InterfaceMatcher implements ClassMatcher {
protected RootDoc root;
protected Pattern pattern;
public InterfaceMatcher(RootDoc root, Pattern pattern) {
this.root = root;
this.pattern = pattern;
}
public boolean matches(ClassDoc cd) {
// if it's the interface we're looking for, match
if(cd.isInterface() && pattern.matcher(cd.toString()).matches())
return true;
// for each interface, recurse, since classes and interfaces
// are treated the same in the doclet API
for (ClassDoc iface : cd.interfaces())
if(matches(iface))
return true;
// recurse on supeclass, if available
return cd.superclass() == null ? false : matches(cd.superclass());
}
public boolean matches(String name) {
ClassDoc cd = root.classNamed(name);
return cd == null ? false : matches(cd);
}
}