1. CLASS_LEVEL: allows tracking whether a .class file has changed
without tracking what specific parts of the .class file (e.g.,
fields or methods) have changed.
2. CLASS_MEMBER_LEVEL: allows tracking not only whether a .class file
has changed but also what specific parts of the .class file (e.g.,
fields or methods) have changed.
The idea is that for better performance we will use CLASS_LEVEL for
classpath entries that are usually unchanged, and CLASS_MEMBER_LEVEL
for classpath entries that are frequently changed. We'll work out the
specifics in a following commit after some measurements.
Support running kotlinc on Windows in ClasspathSnapshotTestCommon
Also add tests for different Kotlin class kinds.
Add unit tests for CLASS_LEVEL snapshotting and diffing
Test: Updated ClasspathSnapshotterTest + ClasspathChangesComputerTest
Add ClasspathChangesComputerTest.testMixedClassSnapshotGranularities
- Cache signature readers and deserializers
- Cache inline function hashes
- IC refactoring
- [gradle] Use hash of module path for cache dir; Fix KT-51238
^KT-51238 Fixed
This property will allow customizing Kotlin/Native compiler download
url. For example, useful when company does not allow contacting internet
directly and requires using proxy.
^KT-47746 Fixed
For Kotlin/Native compilations, apply generic (backend-agnostic)
compiler plugin artifacts instead of Native-specific ones by default.
`kotlin.native.useEmbeddableCompilerJar=false` project property allows
switching to the previous legacy behaviour. This flag will be removed
in a future release.
^KT-48595 Fixed
Make sure that:
- Compilation with -Pkotlin.incremental.useClasspathSnapshot=true or
-Dkotlin.incremental.classpath.snapshot.enabled=true is incremental
after cache hit.
- Default compilation (using build history files) is non-incremental
after cache hit.
Also unify the related tests into
BuildCacheRelocationIT.testKotlinIncrementalCompilation*. We don't need
corresponding tests in BuildCacheIT because BuildCacheRelocationIT
already covers it.
When a fragment is represented as a source set in the mapped model, the
source set name may differ from <fragmentName><moduleName>. For example,
some source set names don't end with *Main or *Test. In case we can
detect the source set that represents the fragment, use the
source set name for the fragment's sources directory.
Those dependsOn edges were not used in any way, and not assertion
checked for them. They are illegal according to KPM design, and
we generally consider such a setup unsupported with the stable MPP
plugin, too.
Adjust the names of:
* dependency configurations
* elements configurations
* platform JAR tasks
* metadata JAR tasks
All of them omit the module name if it's `main
Add new testKpmModelMapping task that will inject
`kotlin.kpm.experimentalModelMapping=true` property for all
testSuites that implements `BaseGradleIT`.
BasePluginConvention was deprecated in favor of BasePluginExtension
which was introduced in 7.1. So it should be supported until 8.0
where it will be removed.