Concatenates Analysis objects naively, i.
Concatenates Analysis objects naively, i.e., doesn't internalize external deps on added files. See Analysis.merge.
Drops all analysis information for sources naively, i.
Drops all analysis information for sources naively, i.e., doesn't externalize internal deps on removed files.
Information about compiler runs accumulated since clean command has been run.
Information about compiler runs accumulated since clean command has been run.
The main use-case for using compilations field is to determine how
many iterations it took to compilen give code. The Compilation object
are also stored in Source objects so there's an indirect way to recover
information about files being recompiled in every iteration.
The incremental compilation algorithm doesn't use information stored in
compilations. It's safe to prune contents of that field without breaking
internal consistency of the entire Analysis object.
Partitions this Analysis using the discriminator function.
Partitions this Analysis using the discriminator function. Externalizes internal deps that cross partitions.
Mappings between sources, classes, and binaries.
(Since version 0.13.8) Register all products and dependencies in addSource.
(Since version 0.13.8) Register all products and dependencies in addSource.
(Since version 0.13.8) Register all products and dependencies in addSource.
(Since version 0.13.8) Register all products and dependencies in addSource.
The merge/groupBy functionality requires understanding of the concepts of internalizing/externalizing dependencies:
Say we have source files X, Y. And say we have some analysis A_X containing X as a source, and likewise for A_Y and Y. If X depends on Y then A_X contains an external dependency X -> Y.
However if we merge A_X and A_Y into a combined analysis A_XY, then A_XY contains X and Y as sources, and therefore X -> Y must be converted to an internal dependency in A_XY. We refer to this as "internalizing" the dependency.
The reverse transformation must occur if we group an analysis A_XY into A_X and A_Y, so that the dependency X->Y crosses the boundary. We refer to this as "externalizing" the dependency.
These transformations are complicated by the fact that internal dependencies are expressed as source file -> source file, but external dependencies are expressed as source file -> fully-qualified class name.