Loading iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/AbstractSCRAlgorithm.java +4 −10 Original line number Diff line number Diff line Loading @@ -4,9 +4,7 @@ import org.jgrapht.Graph; import org.jgrapht.alg.connectivity.KosarajuStrongConnectivityInspector; import org.jgrapht.graph.DefaultEdge; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** Loading Loading @@ -37,32 +35,28 @@ public abstract class AbstractSCRAlgorithm<V, E, R extends AbstractSCR<V, E>> ex * * @return A map, connecting each vertex in the original map to its location (region) in the condensation. */ public Map<V, R> copySCRs(Graph<R, DefaultEdge> condensation) { public void copySCRs(CondensedGraph<V, E, R> condensation) { List<Set<V>> sets = stronglyConnectedSets(); Map<V, R> vertexToComponent = new HashMap<>(); for (Set<V> set : sets) { R component = newSCR(graph, set, null); condensation.addVertex(component); for (V v : set) { vertexToComponent.put(v, component); condensation.regionMap.put(v, component); } } for (E e : graph.edgeSet()) { V s = graph.getEdgeSource(e); R sComponent = vertexToComponent.get(s); R sComponent = condensation.regionMap.get(s); V t = graph.getEdgeTarget(e); R tComponent = vertexToComponent.get(t); R tComponent = condensation.regionMap.get(t); if (sComponent != tComponent) { // reference equal on purpose // TODO: instead of DefaultEdges, use a grouping class to hold multiple data edges (Arc, CallGraph.Edge) condensation.addEdge(sComponent, tComponent); } } return vertexToComponent; } } iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/CallSCRGraph.java +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ import java.util.Set; public class CallSCRGraph extends CondensedGraph<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR> { public CallSCRGraph(Graph<CallGraph.Vertex, CallGraph.Edge<?>> graph) { super(DefaultEdge.class); regionMap = new AbstractSCRAlgorithm<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR>(graph) { new AbstractSCRAlgorithm<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR>(graph) { @Override public CallSCR newSCR(Graph<CallGraph.Vertex, CallGraph.Edge<?>> graph, Set<CallGraph.Vertex> nodeSet, Set<CallGraph.Edge<?>> edgeSet) { return new CallSCR(graph, nodeSet, edgeSet); Loading iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/CondensedGraph.java +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package es.upv.mist.slicing.graphs.scrs; import org.jgrapht.graph.DefaultEdge; import org.jgrapht.graph.SimpleDirectedGraph; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; Loading @@ -14,7 +15,7 @@ import java.util.function.Supplier; * @see AbstractSCRAlgorithm */ public abstract class CondensedGraph<V, E, R extends AbstractSCR<V, E>> extends SimpleDirectedGraph<R, DefaultEdge> { protected Map<V, R> regionMap; protected final Map<V, R> regionMap = new HashMap<>(); public CondensedGraph(Class<? extends DefaultEdge> edgeClass) { super(edgeClass); Loading iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/IntraSCRGraph.java +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ import java.util.Set; public class IntraSCRGraph extends CondensedGraph<GraphNode<?>, Arc, IntraSCR> { public IntraSCRGraph(Graph<GraphNode<?>, Arc> graph) { super(DefaultEdge.class); this.regionMap = new AbstractSCRAlgorithm<GraphNode<?>, Arc, IntraSCR>(graph) { new AbstractSCRAlgorithm<GraphNode<?>, Arc, IntraSCR>(graph) { @Override public IntraSCR newSCR(Graph<GraphNode<?>, Arc> graph, Set<GraphNode<?>> nodeSet, Set<Arc> edgeSet) { return new IntraSCR(graph, nodeSet, edgeSet); Loading Loading
iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/AbstractSCRAlgorithm.java +4 −10 Original line number Diff line number Diff line Loading @@ -4,9 +4,7 @@ import org.jgrapht.Graph; import org.jgrapht.alg.connectivity.KosarajuStrongConnectivityInspector; import org.jgrapht.graph.DefaultEdge; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** Loading Loading @@ -37,32 +35,28 @@ public abstract class AbstractSCRAlgorithm<V, E, R extends AbstractSCR<V, E>> ex * * @return A map, connecting each vertex in the original map to its location (region) in the condensation. */ public Map<V, R> copySCRs(Graph<R, DefaultEdge> condensation) { public void copySCRs(CondensedGraph<V, E, R> condensation) { List<Set<V>> sets = stronglyConnectedSets(); Map<V, R> vertexToComponent = new HashMap<>(); for (Set<V> set : sets) { R component = newSCR(graph, set, null); condensation.addVertex(component); for (V v : set) { vertexToComponent.put(v, component); condensation.regionMap.put(v, component); } } for (E e : graph.edgeSet()) { V s = graph.getEdgeSource(e); R sComponent = vertexToComponent.get(s); R sComponent = condensation.regionMap.get(s); V t = graph.getEdgeTarget(e); R tComponent = vertexToComponent.get(t); R tComponent = condensation.regionMap.get(t); if (sComponent != tComponent) { // reference equal on purpose // TODO: instead of DefaultEdges, use a grouping class to hold multiple data edges (Arc, CallGraph.Edge) condensation.addEdge(sComponent, tComponent); } } return vertexToComponent; } }
iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/CallSCRGraph.java +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ import java.util.Set; public class CallSCRGraph extends CondensedGraph<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR> { public CallSCRGraph(Graph<CallGraph.Vertex, CallGraph.Edge<?>> graph) { super(DefaultEdge.class); regionMap = new AbstractSCRAlgorithm<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR>(graph) { new AbstractSCRAlgorithm<CallGraph.Vertex, CallGraph.Edge<?>, CallSCR>(graph) { @Override public CallSCR newSCR(Graph<CallGraph.Vertex, CallGraph.Edge<?>> graph, Set<CallGraph.Vertex> nodeSet, Set<CallGraph.Edge<?>> edgeSet) { return new CallSCR(graph, nodeSet, edgeSet); Loading
iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/CondensedGraph.java +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package es.upv.mist.slicing.graphs.scrs; import org.jgrapht.graph.DefaultEdge; import org.jgrapht.graph.SimpleDirectedGraph; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; Loading @@ -14,7 +15,7 @@ import java.util.function.Supplier; * @see AbstractSCRAlgorithm */ public abstract class CondensedGraph<V, E, R extends AbstractSCR<V, E>> extends SimpleDirectedGraph<R, DefaultEdge> { protected Map<V, R> regionMap; protected final Map<V, R> regionMap = new HashMap<>(); public CondensedGraph(Class<? extends DefaultEdge> edgeClass) { super(edgeClass); Loading
iacfg/src/main/java/es/upv/mist/slicing/graphs/scrs/IntraSCRGraph.java +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ import java.util.Set; public class IntraSCRGraph extends CondensedGraph<GraphNode<?>, Arc, IntraSCR> { public IntraSCRGraph(Graph<GraphNode<?>, Arc> graph) { super(DefaultEdge.class); this.regionMap = new AbstractSCRAlgorithm<GraphNode<?>, Arc, IntraSCR>(graph) { new AbstractSCRAlgorithm<GraphNode<?>, Arc, IntraSCR>(graph) { @Override public IntraSCR newSCR(Graph<GraphNode<?>, Arc> graph, Set<GraphNode<?>> nodeSet, Set<Arc> edgeSet) { return new IntraSCR(graph, nodeSet, edgeSet); Loading