From 4800cff87f69836078a076a7dad7711e04ef0df3 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 1 Dec 2015 22:06:00 +0300 Subject: [PATCH] Do not recompile files compiled in current round --- .../kotlin/jps/build/KotlinBuilder.kt | 23 ++++++++----------- .../jps/incremental/IncrementalCacheImpl.kt | 1 - ...perimentalIncrementalJpsTestGenerated.java | 12 ++++++++++ .../build/IncrementalJpsTestGenerated.java | 12 ++++++++++ .../pureKotlin/functionBecameInline/build.log | 4 +--- .../inlineModifiedWithUsage/build.log | 9 ++++++++ .../inlineModifiedWithUsage/inline.kt | 3 +++ .../inlineModifiedWithUsage/inline.kt.new | 3 +++ .../inlineModifiedWithUsage/usage.kt | 5 ++++ .../inlineModifiedWithUsage/usage.kt.new | 6 +++++ .../inlineUsedWhereDeclared/build.log | 16 +++++++++++++ .../inlineUsedWhereDeclared/inline.kt | 7 ++++++ .../inlineUsedWhereDeclared/inline.kt.new.1 | 7 ++++++ .../inlineUsedWhereDeclared/inline.kt.new.2 | 9 ++++++++ 14 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt.new create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt.new create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.1 create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.2 diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index fe2d5aea5c3..45e21ec3187 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -242,13 +242,14 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR } val caches = filesToCompile.keySet().map { incrementalCaches[it]!! } - processChanges(filesToCompile.values(), allCompiledFiles, dataManager, caches, changesInfo, fsOperations) + processChanges(filesToCompile.values().toSet(), allCompiledFiles, dataManager, caches, changesInfo, fsOperations) + caches.forEach { it.cleanDirtyInlineFunctions() } return ADDITIONAL_PASS_REQUIRED } private fun processChanges( - compiledFiles: Collection, + compiledFiles: Set, allCompiledFiles: MutableSet, dataManager: BuildDataManager, caches: List, @@ -261,7 +262,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR when { inlineAdded -> { allCompiledFiles.clear() - fsOperations.markChunk(recursively = true) + fsOperations.markChunk(recursively = true, excludeFiles = compiledFiles) return } constantsChanged -> { @@ -275,7 +276,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR if (inlineChanged) { for (cache in caches) { - fsOperations.markFiles(cache.getFilesToReinline()) + fsOperations.markFiles(cache.getFilesToReinline(), excludeFiles = compiledFiles) } } } @@ -291,20 +292,14 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR if (change !is ChangeInfo.MembersChanged) continue - val files = change.names - .flatMap { lookupStorage.get(LookupSymbol(it, change.fqName.asString())) } - .asSequence() - .map { File(it) } - .filter { it !in compiledFiles && it.exists() } - .toList() + val files = change.names.asSequence() + .flatMap { lookupStorage.get(LookupSymbol(it, change.fqName.asString())).asSequence() } + .map(::File) - LOG.debug("Mark dirty files: $files") - fsOperations.markFiles(files) + fsOperations.markFiles(files.asIterable(), excludeFiles = compiledFiles) } LOG.debug("End of processing changes") - - caches.forEach { it.cleanDirtyInlineFunctions() } } if (IncrementalCompilation.isExperimental()) { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index e5bc9a750a6..3245982971d 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -131,7 +131,6 @@ public class IncrementalCacheImpl( dependents.forEach(::addFilesAffectedByChangedInlineFuns) } - cleanDirtyInlineFunctions() return result.map { File(it) } } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java index a1d22faca06..6fbe156fd5d 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java @@ -377,12 +377,24 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("inlineModifiedWithUsage") + public void testInlineModifiedWithUsage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/"); + doTest(fileName); + } + @TestMetadata("inlineTwoFunctionsOneChanged") public void testInlineTwoFunctionsOneChanged() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/"); doTest(fileName); } + @TestMetadata("inlineUsedWhereDeclared") + public void testInlineUsedWhereDeclared() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/"); + doTest(fileName); + } + @TestMetadata("internalClassChanged") public void testInternalClassChanged() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalClassChanged/"); diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index b7379d4f0f1..007a6cb0e49 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -377,12 +377,24 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("inlineModifiedWithUsage") + public void testInlineModifiedWithUsage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/"); + doTest(fileName); + } + @TestMetadata("inlineTwoFunctionsOneChanged") public void testInlineTwoFunctionsOneChanged() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/"); doTest(fileName); } + @TestMetadata("inlineUsedWhereDeclared") + public void testInlineUsedWhereDeclared() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/"); + doTest(fileName); + } + @TestMetadata("internalClassChanged") public void testInternalClassChanged() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalClassChanged/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log b/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log index 2692bd03c99..5e5f0f49f14 100644 --- a/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log +++ b/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log @@ -7,9 +7,7 @@ End of files Cleaning output files: out/production/module/X$main$1.class out/production/module/X.class -out/production/module/Y.class End of files Compiling files: -src/fun.kt src/usage.kt -End of files +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/build.log b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/build.log new file mode 100644 index 00000000000..330be2e1a29 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/build.log @@ -0,0 +1,9 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/foo/InlineKt.class +out/production/module/foo/UsageKt.class +End of files +Compiling files: +src/inline.kt +src/usage.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt new file mode 100644 index 00000000000..0e41c31e1ef --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt @@ -0,0 +1,3 @@ +package foo + +inline fun f(): Int = 0 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt.new b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt.new new file mode 100644 index 00000000000..891f70481be --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/inline.kt.new @@ -0,0 +1,3 @@ +package foo + +inline fun f(): Int = 1 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt new file mode 100644 index 00000000000..2a8b034f986 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt @@ -0,0 +1,5 @@ +package foo + +fun useF() { + println(f()) +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt.new b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt.new new file mode 100644 index 00000000000..6f5f66b9773 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineModifiedWithUsage/usage.kt.new @@ -0,0 +1,6 @@ +package foo + +fun useF() { + println(f()) + println(f()) +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/build.log b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/build.log new file mode 100644 index 00000000000..6bcaff906d6 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/build.log @@ -0,0 +1,16 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/foo/InlineKt.class +End of files +Compiling files: +src/inline.kt +End of files + + +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/foo/InlineKt.class +End of files +Compiling files: +src/inline.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt new file mode 100644 index 00000000000..5e0e29b4db7 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt @@ -0,0 +1,7 @@ +package foo + +fun test() { + println(f()) +} + +inline fun f(): Int = 0 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.1 b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.1 new file mode 100644 index 00000000000..e50b3e84df8 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.1 @@ -0,0 +1,7 @@ +package foo + +fun test() { + println(f()) +} + +inline fun f(): Int = 1 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.2 b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.2 new file mode 100644 index 00000000000..71ccb6d1fbd --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineUsedWhereDeclared/inline.kt.new.2 @@ -0,0 +1,9 @@ +package foo + +fun test() { + println(f()) + println(g()) +} + +inline fun f(): Int = 1 +inline fun g(): Int = 1 \ No newline at end of file