From 209a5d8464e5673c72f9b36847b47f7a8b860008 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 15 May 2019 19:01:52 +0300 Subject: [PATCH] Do not expose paths with placeholders in JS IC caches #KT-31310 Fixed --- .../kotlin/incremental/IncrementalJsCache.kt | 7 +++---- .../kotlin/jps/build/KotlinJpsBuildTest.kt | 2 +- .../jps/build/KotlinJpsBuildTestIncremental.kt | 17 +++++++++++++++++ .../expected-output.txt | 9 +++++++++ .../kotlinProject.iml | 12 ++++++++++++ .../kotlinProject.ipr | 14 ++++++++++++++ .../KotlinJavaScriptChangePackage/src/Class1.kt | 3 +++ .../KotlinJavaScriptChangePackage/src/Class2.kt | 3 +++ 8 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 jps-plugin/testData/general/KotlinJavaScriptChangePackage/expected-output.txt create mode 100644 jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.iml create mode 100644 jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.ipr create mode 100644 jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class1.kt create mode 100644 jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class2.kt diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt index 0ea6a68b0ab..daac22e4956 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt @@ -114,8 +114,7 @@ open class IncrementalJsCache( fun nonDirtyPackageParts(): Map = hashMapOf().apply { - for (path in translationResults.keys()) { - val file = File(path) + for (file in translationResults.keys()) { if (file !in dirtySources) { put(file, translationResults[file]!!) } @@ -167,8 +166,8 @@ private class TranslationResultMap( operator fun get(sourceFile: File): TranslationResultValue? = storage[pathConverter.toPath(sourceFile)] - fun keys(): Collection = - storage.keys + fun keys(): Collection = + storage.keys.map { pathConverter.toFile(it) } fun remove(sourceFile: File, changesCollector: ChangesCollector) { val path = pathConverter.toPath(sourceFile) diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 1bcda00d3a0..2c033ca0503 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -752,7 +752,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } - private fun checkOutputFilesList(outputDir: File = productionOutputDir) { + protected fun checkOutputFilesList(outputDir: File = productionOutputDir) { if (!expectedOutputFile.exists()) { expectedOutputFile.writeText("") throw IllegalStateException("$expectedOutputFile did not exist. Created empty file.") diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt index 85166819553..63d4bbf0036 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt @@ -36,18 +36,35 @@ import java.io.File class KotlinJpsBuildTestIncremental : KotlinJpsBuildTest() { var isICEnabledBackup: Boolean = false + var isICEnabledForJsBackup: Boolean = false override fun setUp() { super.setUp() isICEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabledForJvm(true) + + isICEnabledForJsBackup = IncrementalCompilation.isEnabledForJs() + IncrementalCompilation.setIsEnabledForJs(true) } override fun tearDown() { IncrementalCompilation.setIsEnabledForJvm(isICEnabledBackup) + IncrementalCompilation.setIsEnabledForJs(isICEnabledForJsBackup) + super.tearDown() } + fun testKotlinJavaScriptChangePackage() { + initProject(LibraryDependency.JS_STDLIB) + buildAllModules().assertSuccessful() + + val class2Kt = File(workDir, "src/Class2.kt") + val newClass2KtContent = class2Kt.readText().replace("package2", "package1") + JpsBuildTestCase.change(class2Kt.path, newClass2KtContent) + buildAllModules().assertSuccessful() + checkOutputFilesList(File(workDir, "out/production")) + } + fun testRelocatableCaches() { fun buildAndGetMappings(): String { workDir.deleteRecursively() diff --git a/jps-plugin/testData/general/KotlinJavaScriptChangePackage/expected-output.txt b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/expected-output.txt new file mode 100644 index 00000000000..ab908429b52 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/expected-output.txt @@ -0,0 +1,9 @@ +kotlinProject/ + kotlinProject/ + package1/ + package1.kjsm + kotlinProject.js + kotlinProject.meta.js + lib/ + kotlin.js + kotlin.meta.js \ No newline at end of file diff --git a/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.iml b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.iml new file mode 100644 index 00000000000..a0cbe548242 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.ipr b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.ipr new file mode 100644 index 00000000000..90747786771 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/kotlinProject.ipr @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class1.kt b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class1.kt new file mode 100644 index 00000000000..0e406383c52 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class1.kt @@ -0,0 +1,3 @@ +package package1 + +class Class1 \ No newline at end of file diff --git a/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class2.kt b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class2.kt new file mode 100644 index 00000000000..7df6ade3cc8 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptChangePackage/src/Class2.kt @@ -0,0 +1,3 @@ +package package2 + +class Class2 \ No newline at end of file