Type Members

If we recompile a source file that contains a macro definition then we always assume that it's
api has changed.

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.

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.

This is required because Scala compiler arguments change depending on
the Scala version, e.g. the jars for the Scala library and the Scala
compiler have to be present in the classpath and match the Scala version
of the current Scala compiler.

The Scala home property (scala.home) must be unset because Scala puts
jars in that directory and pass it in as bootclasspath. Therefore, the
contents of this property are managed by this implementation and it's
strictly forbidden that the client manages this property.

Defines a reporter that forwards every reported problem to a wrapped logger.

Defines a reporter that forwards every reported problem to a wrapped logger.

This is the most common use of a reporter, where users pass in whichever logger
they want. If they are depending on loggers from other libraries, they can
create a logger that extends the xsbti logging interface.

This functionality can be use by anyone that wants to get support for event
logging and use an underlying, controlled logger under the hood.

The ManagedLoggedReporter exists for those users that do not want to set
up the passed logger. Event logging requires registration of codects to
serialize and deserialize Problems. This reporter makes sure to initialize
the managed logger so that users do not need to take care of this cumbersome process.

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.

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.

Define helpers to create a wrapper around a Scala incremental compiler
xsbti.compile.ScalaCompiler and a Java incremental compiler
xsbti.compile.JavaCompiler. Note that the wrapper delegates to the
implementation of both compilers and only instructs how to run a cycle
of cross Java-Scala compilation.