edu.umd.cs.findbugs.graph.SearchTreeBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spotbugs Show documentation
Show all versions of spotbugs Show documentation
SpotBugs: Because it's easy!
/*
* Generic graph library
* Copyright (C) 2004, University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs.graph;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
/**
* A search tree callback implementation that builds a list of SearchTrees
* recording a graph search.
*
* @see SearchTreeCallback
* @author David Hovemeyer
*/
public class SearchTreeBuilder> implements SearchTreeCallback {
private final HashMap> searchTreeMap = new HashMap<>();
private final LinkedList> searchTreeList = new LinkedList<>();
@Override
public void startSearchTree(VertexType vertex) {
searchTreeList.add(createSearchTree(vertex));
}
@Override
public void addToSearchTree(VertexType parent, VertexType child) {
SearchTree parentTree = searchTreeMap.get(parent);
if (parentTree == null) {
throw new IllegalStateException();
}
SearchTree childTree = createSearchTree(child);
parentTree.addChild(childTree);
}
/**
* Get an Iterator over the recorded SearchTrees.
*/
public Iterator> searchTreeIterator() {
return searchTreeList.iterator();
}
private SearchTree createSearchTree(VertexType vertex) {
SearchTree searchTree = new SearchTree<>(vertex);
searchTreeMap.put(vertex, searchTree);
return searchTree;
}
}