package tfm.arcs; import org.jgrapht.graph.DefaultEdge;; import tfm.nodes.GraphNode; import java.util.Objects; import java.util.Optional; public abstract class Arc extends DefaultEdge { private String variable; public Arc() { } public Arc(String variable) { this.variable = variable; } public abstract boolean isControlFlowArrow(); public abstract boolean isControlDependencyArrow(); public abstract boolean isDataDependencyArrow(); public Optional getVariable() { return Optional.ofNullable(this.variable); } @Override public String toString() { GraphNode from = (GraphNode) getSource(); GraphNode to = (GraphNode) getTarget(); return String.format("%s -> %s", from.getId(), to.getId() ); } public String toGraphvizRepresentation() { return toString(); } @Override public boolean equals(Object o) { if (this != o) { return false; } return Objects.equals(variable, ((Arc) o).variable); } @Override public int hashCode() { return Objects.hash(variable, getSource(), getTarget()); } }