Newer
Older
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package tfm.graphbuilding;
import com.github.javaparser.ast.Node;
import tfm.graphs.CFGGraph;
import tfm.graphs.Graph;
import tfm.graphs.PDGGraph;
import tfm.graphs.SDGGraph;
import tfm.visitors.cfg.CFGBuilder;
import tfm.visitors.pdg.PDGBuilder;
import tfm.visitors.sdg.SDGBuilder;
public abstract class GraphOptions<G extends Graph> {
public abstract G empty();
public G fromASTNode(Node node) {
G emptyGraph = empty();
buildGraphWithSpecificVisitor(emptyGraph, node);
return emptyGraph;
}
protected abstract void buildGraphWithSpecificVisitor(G emptyGraph, Node node);
}
class CFGOptions extends GraphOptions<CFGGraph> {
@Override
public CFGGraph empty() {
return new CFGGraph();
}
@Override
protected void buildGraphWithSpecificVisitor(CFGGraph emptyGraph, Node node) {
node.accept(new CFGBuilder(emptyGraph), null);
}
}
class PDGOptions extends GraphOptions<PDGGraph> {
@Override
public PDGGraph empty() {
return new PDGGraph();
}
@Override
protected void buildGraphWithSpecificVisitor(PDGGraph emptyGraph, Node node) {
node.accept(new PDGBuilder(emptyGraph), emptyGraph.getRootNode());
}
}
class SDGOptions extends GraphOptions<SDGGraph> {
@Override
public SDGGraph empty() {
return new SDGGraph();
}
@Override
protected void buildGraphWithSpecificVisitor(SDGGraph emptyGraph, Node node) {
node.accept(new SDGBuilder(emptyGraph), null);
}
}