boolean change;
do {
change = false;
for (Iterator<CallGraphEdge> i = callGraph.edgeIterator(); i.hasNext();) {
CallGraphEdge edge = i.next();
CallSite callSite = edge.getCallSite();
// Ignore obviously locked edges
if (obviouslyLockedSites.contains(callSite)) {
continue;
}
// If the calling method is locked, ignore the edge
if (lockedMethodSet.contains(callSite.getMethod())) {
continue;
}
// Calling method is unlocked, so the called method
// is also unlocked.
CallGraphNode target = edge.getTarget();
if (lockedMethodSet.remove(target.getMethod())) {
change = true;
}
}
} while (change);