package de.gaalop.tba.cfgImport; import de.gaalop.cfg.AssignmentNode; import de.gaalop.cfg.ControlFlowGraph; import de.gaalop.cfg.EmptyControlFlowVisitor; import de.gaalop.dfg.Variable; import java.util.HashSet; /** * Visitor for getting a variable, which has multiple assignments in a ControlFlowGraph * @author Christian Steinmetz */ public class GetMultipleAssignments extends EmptyControlFlowVisitor { private Variable multipleAssignmentsVariable = null; private HashSet<Variable> assigned = new HashSet<Variable>(); public Variable getMultipleAssignmentsVariable() { return multipleAssignmentsVariable; } /** * Returns a variable, which has multiple assignments in a given ControlFlowGraph * @param graph The ControlFlowGraph * @return The variable, which has multiple assignments in a given ControlFlowGraph, null if there are no multiple assignments */ public static Variable getMulipleAssignments(ControlFlowGraph graph) { GetMultipleAssignments g = new GetMultipleAssignments(); graph.accept(g); return g.getMultipleAssignmentsVariable(); } @Override public void visit(AssignmentNode node) { Variable curVariable = node.getVariable(); if (assigned.contains(curVariable)) { multipleAssignmentsVariable = curVariable; return; } else { assigned.add(curVariable); } super.visit(node); } }