If we recompile a source file that contains a macro definition then we always assume that it's api has changed.
Maps class-based dependencies to source dependencies using classes
relation.
Maps class-based dependencies to source dependencies using classes
relation.
The mapping is performed using two relations that track declared classes before and after recompilation of sources. This way, we can properly map dependencies on classes that have been moved between source files. In such case, a single class can be mapped to two different source files.
<invalid inheritdoc annotation>
<invalid inheritdoc annotation>
Note that this implementation of the interface is part of the public Zinc Scala API.
Information about compiler runs accumulated since clean
command has been run.
Define the hash of the file contents.
Define the hash of the file contents. It's a typical stamp for compilation sources.
Define the last modified time of the file.
Define the last modified time of the file. It's a typical stamp for class files and products.
A trait that encapsulates looking up elements on a classpath and looking up an external (for another subproject) Analysis instance.
ModifiedNames are determined by comparing name hashes in two versions of an API representation.
ModifiedNames are determined by comparing name hashes in two versions of an API representation.
Note that we distinguish between sets of regular (non-implicit) and implicit modified names. This distinction is needed because the name hashing algorithm makes different decisions based on whether modified name is implicit or not. Implicit names are much more difficult to handle due to difficulty of reasoning about the implicit scope.
An APIChange that carries information about modified names.
An APIChange that carries information about modified names.
This class is used only when name hashing algorithm is enabled.
Provides mappings between source files, generated classes (products), and binaries.
Provides mappings between source files, generated classes (products), and binaries. Dependencies that are tracked include internal: a dependency on a source in the same compilation group (project), external: a dependency on a source in another compilation group (tracked as the name of the class), library: a dependency on a class or jar file not generated by a source file in any tracked compilation group, inherited: a dependency that resulted from a public template inheriting, direct: any type of dependency, including inheritance.
Provides a richer interface to read and write stamps associated with files.
Provides a richer interface to read and write stamps associated with files.
This interface is meant for internal use and is Scala idiomatic. It implements the Java interface ReadStamps that is exposed in the xsbti.compile.CompileAnalysis.
Define helpers to run incremental compilation algorithm with name hashing.
Helper methods for running incremental compilation.
Helper methods for running incremental compilation. All this is responsible for is adapting any xsbti.AnalysisCallback into one compatible with the sbt.internal.inc.Incremental class.
Define all the implicit instances that are used in the Scala implementation of the incremental compiler to check the mathematical equivalence relation between two given classes.
Define all the implicit instances that are used in the Scala implementation of the incremental compiler to check the mathematical equivalence relation between two given classes.
scala.math.Equiv for more information on this kind of equivalence.
If we recompile a source file that contains a macro definition then we always assume that it's api has changed. The reason is that there's no way to determine if changes to macros implementation are affecting its users or not. Therefore we err on the side of caution.