private int getDependencyOrder(ArchiveInfo ai) { if (ai == null) { return 0; } // reuse cached value, if any Integer cached = mOrders.get(ai); if (cached != null) { return cached.intValue(); } ArchiveInfo[] deps = ai.getDependsOn(); if (deps == null) { return 0; } // compute dependencies, recursively int n = deps.length; for (ArchiveInfo dep : deps) { n += getDependencyOrder(dep); } // cache it mOrders.put(ai, Integer.valueOf(n)); return n; }
private static void addDependencies( @NonNull List<ArchiveInfo> dependencies, @NonNull ArchiveInfo archive, @NonNull Set<ArchiveInfo> visited) { if (visited.contains(archive)) { return; } visited.add(archive); ArchiveInfo[] dependsOn = archive.getDependsOn(); if (dependsOn != null) { for (ArchiveInfo dependency : dependsOn) { if (!dependencies.contains(dependency)) { dependencies.add(dependency); addDependencies(dependencies, dependency, visited); } } } }