Incremental KAPT - analyze classpath changes

Use artifact transforms to capture structure and
dependencies of classpath entries. In the KAPT task
this information is used to compare previous classpath
structure with the current one. Once changed classes are
detected, all classes that transitively depend on those
are identified, and that set is passed to KAPT invocation.

In order to avoid unrelated classpath changes, we record an
ABI snapshot of the classpath entry. This snapshot ignores
all private members, and @Metadata annotation.

 #KT-23880
This commit is contained in:
Ivan Gavrilovic
2019-03-21 16:55:56 +00:00
committed by Alexey Tsvetkov
parent c85e21d43b
commit 7c78644eb9
17 changed files with 1535 additions and 31 deletions
@@ -171,6 +171,6 @@ fun KaptOptions.logString(additionalInfo: String = "") = buildString {
appendln("[incremental apt] Changed files: $changedFiles")
appendln("[incremental apt] Compiled sources directories: ${compiledSources.joinToString()}")
appendln("[incremental apt] Cache directory for incremental compilation: $incrementalCache")
appendln("[incremental apt] Changes classpath names: ${classpathChanges.joinToString()}")
appendln("[incremental apt] Changed classpath names: ${classpathChanges.joinToString()}")
appendln("[incremental apt] If processing incrementally: $processIncrementally")
}