use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.
the class ControlDependenceGraph method retrieveControlDependencies.
private Set<ControlDependency> retrieveControlDependencies(BasicBlock insBlock, Set<ControlFlowEdge> handled) {
Set<ControlDependency> r = new LinkedHashSet<>();
for (ControlFlowEdge e : incomingEdgesOf(insBlock)) {
if (handled.contains(e))
continue;
handled.add(e);
ControlDependency cd = e.getControlDependency();
if (cd != null)
r.add(cd);
else {
BasicBlock in = getEdgeSource(e);
if (!in.equals(insBlock))
r.addAll(retrieveControlDependencies(in, handled));
}
}
return r;
}
use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.
the class PrimePathInstrumentation method analyze.
/* (non-Javadoc)
* @see org.evosuite.cfg.MethodInstrumentation#analyze(org.objectweb.asm.tree.MethodNode, org.jgrapht.Graph, java.lang.String, java.lang.String, int)
*/
/**
* {@inheritDoc}
*/
@Override
public void analyze(ClassLoader classLoader, MethodNode mn, String className, String methodName, int access) {
RawControlFlowGraph graph = GraphPool.getInstance(classLoader).getRawCFG(className, methodName);
Queue<PrimePath> path_queue = new LinkedList<PrimePath>();
for (BytecodeInstruction vertex : graph.vertexSet()) {
if (graph.inDegreeOf(vertex) == 0) {
PrimePath initial = new PrimePath(className, methodName);
initial.append(vertex);
path_queue.add(initial);
}
}
while (!path_queue.isEmpty()) {
PrimePath current = path_queue.poll();
for (ControlFlowEdge edge : graph.outgoingEdgesOf(current.getLast())) {
if (!current.contains(graph.getEdgeTarget(edge))) {
PrimePath next = current.getAppended(graph.getEdgeTarget(edge));
path_queue.add(next);
}
}
if (current.getLast().isReturn() || current.getLast().isThrow()) {
logger.warn("New path:");
for (int i = 0; i < current.getSize(); i++) {
if (current.get(i).isBranch() || current.get(i).isLabel())
logger.warn(" -> " + current.get(i));
}
logger.warn(current.toString());
PrimePathPool.add(current);
}
}
logger.info("Found " + PrimePathPool.getSize() + " prime paths");
}
use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.
the class LCSAJGraph method generate.
/**
* <p>
* generate
* </p>
*
* @param file
* a {@link java.io.File} object.
*/
public void generate(File file) {
if (fitnessGraph)
System.out.println("Generating Graph for uncoverd LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
else
System.out.println("Generating Graph for LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
Graph lcsaj_graph = new Graph();
ArrayList<Node> allNodes = new ArrayList<Node>();
for (BytecodeInstruction b : graph.vertexSet()) {
Node n = new Node().attr("label", b.toString());
lcsaj_graph = lcsaj_graph.node(n);
allNodes.add(n);
}
for (ControlFlowEdge edge : graph.edgeSet()) for (Node source : allNodes) for (Node target : allNodes) {
BytecodeInstruction b1 = graph.getEdgeSource(edge);
BytecodeInstruction b2 = graph.getEdgeTarget(edge);
if (source.attr("label").equals(b1.toString()) && target.attr("label").equals(b2.toString())) {
if (b1.isBranch()) {
Edge newEdge = new Edge(source, target).attr("label", edge.toString());
lcsaj_graph.edge(newEdge);
} else
lcsaj_graph.edge(source, target);
}
}
BytecodeInstruction l1 = lcsaj.getStartBranch().getInstruction();
BytecodeInstruction l2 = lcsaj.getLastBranch().getInstruction();
if (fitnessGraph)
l2 = lcsaj.getBranch(lcsaj.getdPositionReached()).getInstruction();
for (Node source : allNodes) for (Node target : allNodes) {
if (source.attr("label").equals(l1.toString()) && target.attr("label").equals(l2.toString())) {
if (!fitnessGraph || lcsaj.getdPositionReached() == lcsaj.length() - 1) {
Edge newEdge = new Edge(source, target).attr("color", "green").attr("label", "LCSAJ No." + lcsaj.getID());
lcsaj_graph.edge(newEdge);
} else {
Edge newEdge = new Edge(source, target).attr("color", "red").attr("label", " LCSAJ No." + lcsaj.getID() + ". Covered till:");
lcsaj_graph.edge(newEdge);
}
}
}
ArrayList<String> commandos = new ArrayList<String>();
commandos.add("dot");
try {
lcsaj_graph.generateTo(commandos, file);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Aggregations