|  | @@ -2,11 +2,9 @@ package info.hkzlab.dupal.analyzer.palanalisys.graph;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
		
			
				|  |  | -import java.util.HashSet;
 | 
	
		
			
				|  |  |  import java.util.LinkedList;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  |  import java.util.Queue;
 | 
	
		
			
				|  |  | -import java.util.Set;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  public class PathFinder {
 | 
	
		
			
				|  |  |     private PathFinder() {};
 | 
	
	
		
			
				|  | @@ -18,27 +16,27 @@ public class PathFinder {
 | 
	
		
			
				|  |  |         ArrayList<GraphLink> linkStack = null;
 | 
	
		
			
				|  |  |         GraphState currentState = start;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -       pathMap.put(start.hashCode(), new ArrayList<>());
 | 
	
		
			
				|  |  | +       pathMap.put(start.hashCode(), new ArrayList<>()); // Bootstrap the pathMap by adding an empty path to the start state
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |         while(currentState != null) {
 | 
	
		
			
				|  |  | -           linkStack = pathMap.get(currentState.hashCode());
 | 
	
		
			
				|  |  | +           linkStack = pathMap.get(currentState.hashCode()); // Get the map to the current state
 | 
	
		
			
				|  |  |             if(!currentState.isStateFull()) return linkStack; // Ok, we found a state where we need to map other links
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  | -           GraphLink[] stateLinks = currentState.getLinks();
 | 
	
		
			
				|  |  | +           GraphLink[] stateLinks = currentState.getLinks(); // Get links present in the current state
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            for(GraphLink l : stateLinks) {
 | 
	
		
			
				|  |  | -                if(!pathMap.containsKey(l.getDestinationState().hashCode())) {
 | 
	
		
			
				|  |  | -                    ArrayList<GraphLink> statePath = (ArrayList<GraphLink>)linkStack.clone();
 | 
	
		
			
				|  |  | -                    statePath.add(l);
 | 
	
		
			
				|  |  | +            for(GraphLink l : stateLinks) { // For evey link...
 | 
	
		
			
				|  |  | +                if(!pathMap.containsKey(l.getDestinationState().hashCode())) { // If it's not leading somewhere we've already visited or we've already put in our path map
 | 
	
		
			
				|  |  | +                    ArrayList<GraphLink> statePath = (ArrayList<GraphLink>)linkStack.clone(); // Copy the map to the current state
 | 
	
		
			
				|  |  | +                    statePath.add(l); // And append this link to it
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    pathMap.put(l.getDestinationState().hashCode(), statePath);
 | 
	
		
			
				|  |  | -                    statesQueue.add(l.getDestinationState());
 | 
	
		
			
				|  |  | +                    pathMap.put(l.getDestinationState().hashCode(), statePath); // Then put this new path into the map
 | 
	
		
			
				|  |  | +                    statesQueue.add(l.getDestinationState()); // And add the state to the queue, to examine later
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            currentState = statesQueue.poll();
 | 
	
		
			
				|  |  | +            currentState = statesQueue.poll(); // Pick the next state from the queue
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -       return null;
 | 
	
		
			
				|  |  | +       return null; // Found nothing...
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |  }
 |