Skip to content

Commit 248dae1

Browse files
authored
Merge pull request #17 from sinha108/main
SDG with call-dep edges only
2 parents 1794971 + 64ee7e6 commit 248dae1

File tree

1 file changed

+50
-50
lines changed

1 file changed

+50
-50
lines changed

src/main/java/com/ibm/northstar/SystemDependencyGraph.java

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -104,58 +104,58 @@ private static org.jgrapht.Graph<Pair<String, Callable>, AbstractGraphEdge> buil
104104
// We'll use forward and backward search on the DFS to identify which CFG nodes
105105
// are dominant
106106
// This is a forward DFS search (or exit time first search)
107-
int dfsNumber = 0;
108-
Map<Statement, Integer> dfsFinish = HashMapFactory.make();
109-
Iterator<Statement> search = DFS.iterateFinishTime(sdg, entryPoints.get());
110-
111-
while (search.hasNext()) {
112-
dfsFinish.put(search.next(), dfsNumber++);
113-
}
114-
115-
// This is a reverse DFS search (or entry time first search)
116-
int reverseDfsNumber = 0;
117-
Map<Statement, Integer> dfsStart = HashMapFactory.make();
118-
Iterator<Statement> reverseSearch = DFS.iterateDiscoverTime(sdg, entryPoints.get());
119-
120-
while (reverseSearch.hasNext()) {
121-
dfsStart.put(reverseSearch.next(), reverseDfsNumber++);
122-
}
107+
// int dfsNumber = 0;
108+
// Map<Statement, Integer> dfsFinish = HashMapFactory.make();
109+
// Iterator<Statement> search = DFS.iterateFinishTime(sdg, entryPoints.get());
110+
//
111+
// while (search.hasNext()) {
112+
// dfsFinish.put(search.next(), dfsNumber++);
113+
// }
114+
//
115+
// // This is a reverse DFS search (or entry time first search)
116+
// int reverseDfsNumber = 0;
117+
// Map<Statement, Integer> dfsStart = HashMapFactory.make();
118+
// Iterator<Statement> reverseSearch = DFS.iterateDiscoverTime(sdg, entryPoints.get());
119+
//
120+
// while (reverseSearch.hasNext()) {
121+
// dfsStart.put(reverseSearch.next(), reverseDfsNumber++);
122+
// }
123123

124124
// Populate graph
125-
sdg.stream()
126-
.filter(dfsFinish::containsKey)
127-
.sorted(Comparator.comparingInt(dfsFinish::get))
128-
.forEach(p -> sdg.getSuccNodes(p).forEachRemaining(s -> {
129-
if (dfsFinish.containsKey(s)
130-
&& dfsStart.get(p) != null && dfsStart.get(s) != null
131-
&& !((dfsStart.get(p) >= dfsStart.get(s))
132-
&& (dfsFinish.get(p) <= dfsFinish.get(s)))
133-
&& !p.getNode().getMethod().equals(s.getNode().getMethod())) {
134-
135-
// Add the source nodes to the graph as vertices
136-
Pair<String, Callable> source = Optional.ofNullable(getCallableFromSymbolTable(p.getNode().getMethod())).orElseGet(() -> createAndPutNewCallableInSymbolTable(p.getNode().getMethod()));
137-
graph.addVertex(source);
138-
139-
// Add the target nodes to the graph as vertices
140-
Pair<String, Callable> target = Optional.ofNullable(getCallableFromSymbolTable(s.getNode().getMethod())).orElseGet(() -> createAndPutNewCallableInSymbolTable(s.getNode().getMethod()));
141-
graph.addVertex(target);
142-
143-
144-
String edgeType = edgeLabels.apply(p, s);
145-
SystemDepEdge graphEdge = new SystemDepEdge(p, s, edgeType);
146-
SystemDepEdge cgEdge = (SystemDepEdge) graph.getEdge(source, target);
147-
if (source.getRight() != null && target.getRight() != null) {
148-
if (cgEdge == null || !cgEdge.equals(graphEdge)) {
149-
graph.addEdge(
150-
source,
151-
target,
152-
graphEdge);
153-
} else {
154-
graphEdge.incrementWeight();
155-
}
156-
}
157-
}
158-
}));
125+
// sdg.stream()
126+
// .filter(dfsFinish::containsKey)
127+
// .sorted(Comparator.comparingInt(dfsFinish::get))
128+
// .forEach(p -> sdg.getSuccNodes(p).forEachRemaining(s -> {
129+
// if (dfsFinish.containsKey(s)
130+
// && dfsStart.get(p) != null && dfsStart.get(s) != null
131+
// && !((dfsStart.get(p) >= dfsStart.get(s))
132+
// && (dfsFinish.get(p) <= dfsFinish.get(s)))
133+
// && !p.getNode().getMethod().equals(s.getNode().getMethod())) {
134+
//
135+
// // Add the source nodes to the graph as vertices
136+
// Pair<String, Callable> source = Optional.ofNullable(getCallableFromSymbolTable(p.getNode().getMethod())).orElseGet(() -> createAndPutNewCallableInSymbolTable(p.getNode().getMethod()));
137+
// graph.addVertex(source);
138+
//
139+
// // Add the target nodes to the graph as vertices
140+
// Pair<String, Callable> target = Optional.ofNullable(getCallableFromSymbolTable(s.getNode().getMethod())).orElseGet(() -> createAndPutNewCallableInSymbolTable(s.getNode().getMethod()));
141+
// graph.addVertex(target);
142+
//
143+
//
144+
// String edgeType = edgeLabels.apply(p, s);
145+
// SystemDepEdge graphEdge = new SystemDepEdge(p, s, edgeType);
146+
// SystemDepEdge cgEdge = (SystemDepEdge) graph.getEdge(source, target);
147+
// if (source.getRight() != null && target.getRight() != null) {
148+
// if (cgEdge == null || !cgEdge.equals(graphEdge)) {
149+
// graph.addEdge(
150+
// source,
151+
// target,
152+
// graphEdge);
153+
// } else {
154+
// graphEdge.incrementWeight();
155+
// }
156+
// }
157+
// }
158+
// }));
159159

160160
callGraph.getEntrypointNodes()
161161
.forEach(p -> {

0 commit comments

Comments
 (0)