diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt index 02b7270f0ab..ea36a1d0d36 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt @@ -75,13 +75,18 @@ abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJpsTest() val sb = StringBuilder() val p = Printer(sb) val targets = projectDescriptor.allModuleTargets - val paths = projectDescriptor.dataManager.dataPaths + val dataManager = projectDescriptor.dataManager + val paths = dataManager.dataPaths val versions = CacheVersionProvider(paths) - dumpCachesForTarget(p, paths, KotlinDataContainerTarget, versions.dataContainerVersion()) + dumpCachesForTarget(p, paths, KotlinDataContainerTarget, versions.dataContainerVersion().formatVersionFile) for (target in targets.sortedBy { it.presentableName }) { - dumpCachesForTarget(p, paths, target, versions.normalVersion(target), versions.experimentalVersion(target), + val jvmMetaBuildInfo = jvmBuildMetaInfoFile(target, dataManager) + dumpCachesForTarget(p, paths, target, + versions.normalVersion(target).formatVersionFile, + versions.experimentalVersion(target).formatVersionFile, + jvmMetaBuildInfo, subdirectory = KOTLIN_CACHE_DIRECTORY_NAME) } @@ -92,16 +97,15 @@ abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJpsTest() p: Printer, paths: BuildDataPaths, target: BuildTarget<*>, - vararg cacheVersions: CacheVersion, + vararg cacheVersionsFiles: File, subdirectory: String? = null ) { p.println(target) p.pushIndent() val dataRoot = paths.getTargetDataRoot(target).let { if (subdirectory != null) File(it, subdirectory) else it } - cacheVersions - .map { it.formatVersionFile } - .filter { it.exists() } + cacheVersionsFiles + .filter(File::exists) .sortedBy { it.name } .forEach { p.println(it.name) } diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 1ffb30d7557..0dbb1f8837b 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -75,6 +75,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { @JvmField val KOTLIN_BUILDER_NAME: String = "Kotlin Builder" val LOG = Logger.getInstance("#org.jetbrains.kotlin.jps.build.KotlinBuilder") + const val JVM_BUILD_META_INFO_FILE_NAME = "jvm-build-meta-info.txt" } private val statisticsLogger = TeamcityStatisticsLogger() @@ -211,7 +212,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { return ABORT } - val commonArguments = JpsKotlinCompilerSettings.getCommonCompilerArguments(chunk.representativeTarget().module) + val commonArguments = compilerArgumentsForChunk(chunk) commonArguments.verbose = true // Make compiler report source to output files mapping val allCompiledFiles = getAllCompiledFilesContainer(context) @@ -241,7 +242,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { val generatedFiles = getGeneratedFiles(chunk, environment.outputItemsCollector) registerOutputItems(outputConsumer, generatedFiles) - saveVersions(context, chunk) + saveVersions(context, chunk, commonArguments) if (targets.any { hasKotlin[it] == null }) { fsOperations.markChunk(recursively = false, kotlinOnly = true, excludeFiles = filesToCompile.values().toSet()) @@ -356,13 +357,25 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { } } - private fun saveVersions(context: CompileContext, chunk: ModuleChunk) { + private fun saveVersions(context: CompileContext, chunk: ModuleChunk, commonArguments: CommonCompilerArguments) { val dataManager = context.projectDescriptor.dataManager val targets = chunk.targets val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths) cacheVersionsProvider.allVersions(targets).forEach { it.saveIfNeeded() } + + if (!JpsUtils.isJsKotlinModule(chunk.representativeTarget())) { + val jvmBuildMetaInfo = JvmBuildMetaInfo(commonArguments) + val serializedMetaInfo = JvmBuildMetaInfo.serializeToString(jvmBuildMetaInfo) + + for (target in chunk.targets) { + jvmBuildMetaInfoFile(target, dataManager).writeText(serializedMetaInfo) + } + } } + private fun compilerArgumentsForChunk(chunk: ModuleChunk): CommonCompilerArguments = + JpsKotlinCompilerSettings.getCommonCompilerArguments(chunk.representativeTarget().module) + private fun doCompileModuleChunk( allCompiledFiles: MutableSet, chunk: ModuleChunk, commonArguments: CommonCompilerArguments, context: CompileContext, dirtyFilesHolder: DirtyFilesHolder, environment: JpsCompilerEnvironment, @@ -902,3 +915,5 @@ private fun hasKotlinDirtyOrRemovedFiles( return chunk.targets.any { KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, it).isNotEmpty() } } +fun jvmBuildMetaInfoFile(target: ModuleBuildTarget, dataManager: BuildDataManager): File = + File(dataManager.dataPaths.getTargetDataRoot(target), KotlinBuilder.JVM_BUILD_META_INFO_FILE_NAME) diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOn/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOn/expected-kotlin-caches.txt index 286057c136b..d7c26b97102 100644 --- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOn/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOn/expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module1' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab proto.tab @@ -15,6 +16,7 @@ Module 'module1' tests Module 'module2' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab package-parts.tab @@ -26,6 +28,7 @@ Module 'module2' tests Module 'module3' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab proto.tab @@ -34,6 +37,7 @@ Module 'module3' tests Module 'module4' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaChanged/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaChanged/expected-kotlin-caches.txt index f5cb5275720..76e1b8e4274 100644 --- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaChanged/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaChanged/expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module1' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt internal-name-to-source.tab package-parts.tab proto.tab @@ -15,6 +16,7 @@ Module 'module1' tests Module 'module2' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt internal-name-to-source.tab package-parts.tab proto.tab @@ -23,6 +25,7 @@ Module 'module2' tests Module 'module3' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt internal-name-to-source.tab package-parts.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnOff/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnOff/expected-kotlin-caches.txt index 8d7665c25d0..daa914dfd19 100644 --- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnOff/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnOff/expected-kotlin-caches.txt @@ -1,22 +1,26 @@ kotlin-data-container Module 'module1' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module1' tests Module 'module2' production format-version.txt + jvm-build-meta-info.txt package-parts.tab proto.tab source-to-classes.tab Module 'module2' tests Module 'module3' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module3' tests Module 'module4' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module4' tests \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOff/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOff/expected-kotlin-caches.txt index e273e094704..6c3efb0caef 100644 --- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOff/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOff/expected-kotlin-caches.txt @@ -1,9 +1,13 @@ kotlin-data-container Module 'module1' production + jvm-build-meta-info.txt Module 'module1' tests Module 'module2' production + jvm-build-meta-info.txt Module 'module2' tests Module 'module3' production + jvm-build-meta-info.txt Module 'module3' tests Module 'module4' production + jvm-build-meta-info.txt Module 'module4' tests \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/expected-kotlin-caches.txt index 982cd0121bb..e8945afaacd 100644 --- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/expected-kotlin-caches.txt @@ -1,11 +1,13 @@ kotlin-data-container Module 'module1' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module1' tests Module 'module2' production format-version.txt + jvm-build-meta-info.txt inline-functions.tab inlined-to.tab package-parts.tab @@ -14,11 +16,13 @@ Module 'module2' production Module 'module2' tests Module 'module3' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module3' tests Module 'module4' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module4' tests \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt index cf4dcf7ea18..9c2ef5d4b0a 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module' tests \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/experimental-expected-kotlin-caches.txt index bf5b0abf716..a8e59355f1c 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/class/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/expected-kotlin-caches.txt index cf4dcf7ea18..9c2ef5d4b0a 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt proto.tab source-to-classes.tab Module 'module' tests \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/experimental-expected-kotlin-caches.txt index 076178b6fc5..15f2ab8c248 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/classInheritance/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt class-fq-name-to-source.tab internal-name-to-source.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt index 9a851b0cc46..4a57494858e 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt constants.tab package-parts.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/experimental-expected-kotlin-caches.txt index 093875fd5ed..7011a7065d5 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt constants.tab internal-name-to-source.tab package-parts.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt index 8d3d53a48a1..61716259d9e 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt package-parts.tab proto.tab source-to-classes.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/experimental-expected-kotlin-caches.txt index 14f66d6ef09..d44fd6c4253 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/function/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt internal-name-to-source.tab package-parts.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/expected-kotlin-caches.txt index 3449f76e358..3fb62147860 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt inline-functions.tab inlined-to.tab package-parts.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/experimental-expected-kotlin-caches.txt index a33c2237216..cc6f16e3ad5 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt inline-functions.tab internal-name-to-source.tab package-parts.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/expected-kotlin-caches.txt index ae521f0a275..3d63d407e3b 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt inline-functions.tab package-parts.tab proto.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/experimental-expected-kotlin-caches.txt index a33c2237216..cc6f16e3ad5 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithoutUsage/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt inline-functions.tab internal-name-to-source.tab package-parts.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/expected-kotlin-caches.txt index 8d3d53a48a1..61716259d9e 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/expected-kotlin-caches.txt @@ -1,6 +1,7 @@ kotlin-data-container Module 'module' production format-version.txt + jvm-build-meta-info.txt package-parts.tab proto.tab source-to-classes.tab diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/experimental-expected-kotlin-caches.txt b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/experimental-expected-kotlin-caches.txt index 14f66d6ef09..d44fd6c4253 100644 --- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/experimental-expected-kotlin-caches.txt +++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/topLevelPropertyAccess/experimental-expected-kotlin-caches.txt @@ -7,6 +7,7 @@ kotlin-data-container Module 'module' production experimental-format-version.txt format-version.txt + jvm-build-meta-info.txt internal-name-to-source.tab package-parts.tab proto.tab