Class JSModuleGraph

  • All Implemented Interfaces:
    java.io.Serializable

    public final class JSModuleGraph
    extends java.lang.Object
    implements java.io.Serializable
    A JSModule dependency graph that assigns a depth to each module and can answer depth-related queries about them. For the purposes of this class, a module's depth is defined as the number of hops in the longest (non cyclic) path from the module to a module with no dependencies.
    See Also:
    Serialized Form
    • Constructor Detail

      • JSModuleGraph

        public JSModuleGraph​(JSModule[] modulesInDepOrder)
        Creates a module graph from a list of modules in dependency order.
      • JSModuleGraph

        public JSModuleGraph​(java.util.List<JSModule> modulesInDepOrder)
        Creates a module graph from a list of modules in dependency order.
    • Method Detail

      • dependsOn

        public boolean dependsOn​(JSModule src,
                                 JSModule m)
        Determines whether this module depends on a given module. Note that a module never depends on itself, as that dependency would be cyclic.
      • getSmallestCoveringSubtree

        public JSModule getSmallestCoveringSubtree​(JSModule parentTree,
                                                   java.util.BitSet dependentModules)
        Finds the module with the fewest transitive dependents on which all of the given modules depend and that is a subtree of the given parent module tree.

        If no such subtree can be found, the parent module is returned.

        If multiple candidates have the same number of dependents, the module farthest down in the total ordering of modules will be chosen.

        Parameters:
        parentTree - module on which the result must depend
        dependentModules - indices of modules to consider
        Returns:
        A module on which all of the argument modules depend
      • getDeepestCommonDependencyInclusive

        public JSModule getDeepestCommonDependencyInclusive​(JSModule m1,
                                                            JSModule m2)
        Finds the deepest common dependency of two modules, including the modules themselves.
        Parameters:
        m1 - A module in this graph
        m2 - A module in this graph
        Returns:
        The deepest common dep of m1 and m2, or null if they have no common dependencies
      • getDeepestCommonDependencyInclusive

        public JSModule getDeepestCommonDependencyInclusive​(java.util.Collection<JSModule> modules)
        Returns the deepest common dependency of the given modules.