private void tsort()

in processor/src/main/java/org/apache/commons/weaver/utils/Providers.java [83:106]


        private void tsort(final Class<? extends P> root,
            final Map<Class<? extends P>, Set<Class<? extends P>>> dependencyMap,
            final Map<Class<? extends P>, State> stateMap, final Deque<Class<? extends P>> visiting,
            final Collection<Class<? extends P>> target) {

            stateMap.put(root, State.VISITING);
            visiting.push(root);

            for (final Class<? extends P> dependency : dependencyMap.get(root)) {
                final State state = stateMap.get(dependency);
                if (state == State.VISITED) {
                    continue;
                }
                Validate.validState(state == null, "Circular dependency: %s of %s", dependency.getName(),
                    root.getName());
                tsort(dependency, dependencyMap, stateMap, visiting, target);
            }
            final Class<? extends P> top = visiting.pop();
            Validate.validState(top == root, "Stack out of balance: expected %s, found %s", root.getName(),
                top.getName());

            stateMap.put(root, State.VISITED);
            target.add(root);
        }