Class JSChunkGraph

  • All Implemented Interfaces:
    java.io.Serializable

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

      • JSChunkGraph

        public JSChunkGraph​(JSChunk[] chunksInDepOrder)
        Creates a chunk graph from a list of chunks in dependency order.
      • JSChunkGraph

        public JSChunkGraph​(java.util.List<JSChunk> chunksInDepOrder)
        Creates a chunk graph from a list of chunks in dependency order.
    • Method Detail

      • dependsOn

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

        public JSChunk getSmallestCoveringSubtree​(JSChunk parentTree,
                                                  java.util.BitSet dependentChunks)
        Finds the chunk with the fewest transitive dependents on which all of the given chunks depend and that is a subtree of the given parent chunk tree.

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

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

        Parameters:
        parentTree - chunk on which the result must depend
        dependentChunks - indices of chunks to consider
        Returns:
        A chunk on which all of the argument chunks depend
      • getDeepestCommonDependencyInclusive

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

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