this.rootDeclaredStatements = ImmutableList.copyOf(rootDeclaredStatements);
this.rootEffectiveStatements = ImmutableList.copyOf(rootEffectiveStatements);
- Set<Module> modulesInit = new HashSet<>();
+ final Set<Module> modulesInit = new HashSet<>();
for (EffectiveStatement<?, ?> rootEffectiveStatement : rootEffectiveStatements) {
if (rootEffectiveStatement instanceof ModuleEffectiveStatementImpl) {
Module module = (Module) rootEffectiveStatement;
modulesInit.add(module);
}
}
+ this.modules = ImmutableSet.copyOf(ModuleDependencySort.sort(modulesInit));
- Module[] moduleArray = new Module[modulesInit.size()];
- List<Module> sortedModuleList = ModuleDependencySort.sort(modulesInit.toArray(moduleArray));
- this.modules = ImmutableSet.copyOf(sortedModuleList);
-
- final SetMultimap<URI, Module> nsMap = Multimaps.newSetMultimap(
- new TreeMap<>(), MODULE_SET_SUPPLIER);
- final SetMultimap<String, Module> nameMap = Multimaps.newSetMultimap(
- new TreeMap<>(), MODULE_SET_SUPPLIER);
- Set<ModuleIdentifier> modIdBuilder = new HashSet<>();
+ final SetMultimap<URI, Module> nsMap = Multimaps.newSetMultimap(new TreeMap<>(), MODULE_SET_SUPPLIER);
+ final SetMultimap<String, Module> nameMap = Multimaps.newSetMultimap(new TreeMap<>(), MODULE_SET_SUPPLIER);
+ final Set<ModuleIdentifier> modIdBuilder = new HashSet<>();
for (Module m : modulesInit) {
nameMap.put(m.getName(), m);
nsMap.put(m.getNamespace(), m);
* returned order.
*/
public static List<Module> sort(final Module... modules) {
- List<TopologicalSort.Node> sorted = sortInternal(Arrays.asList(modules));
+ return sort(Arrays.asList(modules));
+ }
+
+ /**
+ * Topological sort of module dependency graph.
+ *
+ * @param modules YANG modules
+ * @return Sorted list of Modules. Modules can be further processed in
+ * returned order.
+ */
+ public static List<Module> sort(final Iterable<Module> modules) {
+ final List<TopologicalSort.Node> sorted = sortInternal(modules);
// Cast to Module from Node and return
return Lists.transform(sorted, TOPOLOGY_FUNCTION);
}
// check for existence of module with same namespace
if (allNS.containsKey(ns)) {
- Module mod = allNS.get(ns);
- String name = mod.getName();
- Date revision = mod.getRevision();
- if (!(fromName.equals(name))) {
+ final Module mod = allNS.get(ns);
+ final String name = mod.getName();
+ final Date revision = mod.getRevision();
+ if (!fromName.equals(name)) {
LOGGER.warn(
"Error while sorting module [{}, {}]: module with same namespace ({}) already loaded: [{}, {}]",
fromName, fromRevision, ns, name, revision);