Commit ce3b2661 authored by Carlos Galindo's avatar Carlos Galindo
Browse files

fix: make CondensedGraph#regionMap final.

parent 2276ed07
Loading
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -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;

/**
@@ -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;
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);