Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<Item> dfResolve(final Map<String, Item> allItems) {
- int itemCount = allItems.size();
- final List<Item> resolved = new ArrayList<Item>(itemCount);
- final Set<Item> visited = new HashSet<Item>();
- for(Item item : allItems.values()) {
- resolve(item, allItems, visited, resolved);
- }
- if(resolved.size() < itemCount)
- throw new RuntimeException("Unresolved dependencies");
- return resolved;
- }
- public void resolve(final Item item, final Map<String, Item> allItems, final Set<Item> visited, final List<Item> resolved) {
- if(visited.contains(item))
- throw new RuntimeException("Circular dependency discovered: " + visited);
- visited.add(item);
- if(!item.isVisited()) {
- item.setVisited(true);
- for(String dep : item.getDependencies()) {
- Item depItem = allItems.get(dep);
- if(depItem == null)
- throw new RuntimeException("Unresolved dependency: " + item.getName() + " depends on " + dep + " which can not be found");
- resolve(depItem, allItems, visited, resolved);
- }
- //System.out.println("Resolved: " + item);
- resolved.add(item);
- }
- visited.remove(item);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement