Loading EDG/src/main/java/edg/graph/Edge.java +24 −62 Original line number Diff line number Diff line package edg.graph; import edg.constraint.AsteriskConstraint; import edg.constraint.Constraint; import edg.constraint.EdgeConstraint; import edg.constraint.EmptyConstraint; import org.jgrapht.graph.DefaultEdge; import java.util.Objects; import java.util.Random; public class Edge { public class Edge extends DefaultEdge { public enum Type { ControlFlow, NonExecControlFlow, Structural, Control, Loading @@ -20,116 +19,79 @@ public class Edge Class, CallReq } private boolean mark; private final Type type; private final EdgeConstraint constraint; private boolean mark; private EdgeConstraint visibleConstraint; protected boolean traversable = true; private final int hash; public Edge(Type type) { public Edge(Type type) { this(type, type == Type.Structural || type == Type.Control ? AsteriskConstraint.getConstraint() : EmptyConstraint.getConstraint()); } public Edge(Type type, EdgeConstraint constraint) { public Edge(Type type, EdgeConstraint constraint) { Objects.requireNonNull(type, "Edge type can't be null!"); Objects.requireNonNull(constraint, "Constraint can't be null, use 'EmptyConstraint#getConstraint()'"); this.type = type; this.constraint = constraint; this.visibleConstraint = constraint; this.hash = new Random().nextInt(); } public void mark() { public void mark() { mark = true; } public boolean isMarked() { public boolean isMarked() { return mark; } public Type getType() { public Type getType() { return type; } public void resetVisibleConstraint() { this.visibleConstraint = this.constraint; } public EdgeConstraint getConstraint() { public void resetVisibleConstraint() { this.visibleConstraint = this.constraint; } public EdgeConstraint getConstraint() { return visibleConstraint; } public void setVisibleConstraint(EdgeConstraint constraint) { visibleConstraint = constraint;} public boolean isStructuralEdge() { return false; public void setVisibleConstraint(EdgeConstraint constraint) { visibleConstraint = constraint; } public boolean isTraversable() { public boolean isTraversable() { return traversable; } public boolean isControlFlowEdge() { public boolean isControlFlowEdge() { return type == Type.ControlFlow || type == Type.NonExecControlFlow; } public boolean isAST() { public boolean isAST() { return this instanceof NonTraversable && type == Type.Structural; } @Override public String toString() { public String toString() { String str = "type=" + type; if (constraint != null) str += ",constraint=" + constraint; return getClass().getSimpleName() + "[" + str + "]"; } @Override public boolean equals(Object o) { return this == o; // if (this == o) return true; // if (o == null || getClass() != o.getClass()) // return false; // Edge edge = (Edge) o; // return mark == edge.mark && // type == edge.type && // constraint.equals(edge.constraint); } @Override public int hashCode() { return hash; } public static class NonTraversable extends Edge { public NonTraversable(Edge edge) { public static class NonTraversable extends Edge { public NonTraversable(Edge edge) { super(edge.getType(), edge.getConstraint()); mark(); traversable = false; } public NonTraversable(Type type) { public NonTraversable(Type type) { super(type); traversable = false; } @Override public boolean isStructuralEdge() { return true; } } } Loading
EDG/src/main/java/edg/graph/Edge.java +24 −62 Original line number Diff line number Diff line package edg.graph; import edg.constraint.AsteriskConstraint; import edg.constraint.Constraint; import edg.constraint.EdgeConstraint; import edg.constraint.EmptyConstraint; import org.jgrapht.graph.DefaultEdge; import java.util.Objects; import java.util.Random; public class Edge { public class Edge extends DefaultEdge { public enum Type { ControlFlow, NonExecControlFlow, Structural, Control, Loading @@ -20,116 +19,79 @@ public class Edge Class, CallReq } private boolean mark; private final Type type; private final EdgeConstraint constraint; private boolean mark; private EdgeConstraint visibleConstraint; protected boolean traversable = true; private final int hash; public Edge(Type type) { public Edge(Type type) { this(type, type == Type.Structural || type == Type.Control ? AsteriskConstraint.getConstraint() : EmptyConstraint.getConstraint()); } public Edge(Type type, EdgeConstraint constraint) { public Edge(Type type, EdgeConstraint constraint) { Objects.requireNonNull(type, "Edge type can't be null!"); Objects.requireNonNull(constraint, "Constraint can't be null, use 'EmptyConstraint#getConstraint()'"); this.type = type; this.constraint = constraint; this.visibleConstraint = constraint; this.hash = new Random().nextInt(); } public void mark() { public void mark() { mark = true; } public boolean isMarked() { public boolean isMarked() { return mark; } public Type getType() { public Type getType() { return type; } public void resetVisibleConstraint() { this.visibleConstraint = this.constraint; } public EdgeConstraint getConstraint() { public void resetVisibleConstraint() { this.visibleConstraint = this.constraint; } public EdgeConstraint getConstraint() { return visibleConstraint; } public void setVisibleConstraint(EdgeConstraint constraint) { visibleConstraint = constraint;} public boolean isStructuralEdge() { return false; public void setVisibleConstraint(EdgeConstraint constraint) { visibleConstraint = constraint; } public boolean isTraversable() { public boolean isTraversable() { return traversable; } public boolean isControlFlowEdge() { public boolean isControlFlowEdge() { return type == Type.ControlFlow || type == Type.NonExecControlFlow; } public boolean isAST() { public boolean isAST() { return this instanceof NonTraversable && type == Type.Structural; } @Override public String toString() { public String toString() { String str = "type=" + type; if (constraint != null) str += ",constraint=" + constraint; return getClass().getSimpleName() + "[" + str + "]"; } @Override public boolean equals(Object o) { return this == o; // if (this == o) return true; // if (o == null || getClass() != o.getClass()) // return false; // Edge edge = (Edge) o; // return mark == edge.mark && // type == edge.type && // constraint.equals(edge.constraint); } @Override public int hashCode() { return hash; } public static class NonTraversable extends Edge { public NonTraversable(Edge edge) { public static class NonTraversable extends Edge { public NonTraversable(Edge edge) { super(edge.getType(), edge.getConstraint()); mark(); traversable = false; } public NonTraversable(Type type) { public NonTraversable(Type type) { super(type); traversable = false; } @Override public boolean isStructuralEdge() { return true; } } }