fix circular dependency checking

This commit is contained in:
dfsek 2021-11-18 21:45:12 -07:00
parent 84537e2f99
commit 7bf1ba13c8
4 changed files with 17 additions and 11 deletions

@ -1 +1 @@
Subproject commit 63f9078601657ce79cfd7a94c926ccbb63eed73a
Subproject commit 56bac927999a4a82f36ab2696885f2b35e1fc008

@ -1 +1 @@
Subproject commit 648e8a70060fed2d84bdcec17a9e9c742039a3f3
Subproject commit d2cd833fcfc06f5785bf74ac9fb0b104908604c3

@ -1 +1 @@
Subproject commit 9aca4dad904dc1e0b4a4e2e8cb89683e68890aa7
Subproject commit bf177a6c93a3757954a699ce0ef4aeb9e766bc8e

View File

@ -42,25 +42,31 @@ public class DependencySorter {
sortDependencies(dependency, sort);
if(sort.contains(dependency)) {
throw new CircularDependencyException(
"Addon " + addon.getID() + " has circular dependency beginning with " + dependency.getID());
}
sort.add(dependency); // add it to the list.
}
});
}
private void checkDependencies(BaseAddon base, BaseAddon current) {
current.getDependencies().forEach((id, range) -> {
BaseAddon dependency = addons.get(id);
if(dependency.getID().equals(base.getID())) {
throw new CircularDependencyException(
"Addon " + base.getID() + " has circular dependency beginning with " + dependency.getID());
}
checkDependencies(base, dependency);
});
}
public List<BaseAddon> sort() {
List<BaseAddon> sorted = new ArrayList<>();
for(int i = addonList.size() - 1; i >= 0; i--) {
BaseAddon addon = addonList.get(i);
checkDependencies(addon, addon);
addonList.remove(i);
System.out.println(addon.getID() + ": " + visited.get(addon.getID()));
if(!visited.get(addon.getID())) {
sortDependencies(addon, sorted);
}