From 59993b1441a725919e97fb557b77729d1f11c8ad Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Tue, 12 May 2020 10:50:18 +0300 Subject: [PATCH] JPS: ignore removed java files #KT-27458 Fixed Original commit: 800fcc511a46661633f3476551580613e280fc3f --- .../kotlin/jps/build/KotlinJpsBuildTest.kt | 23 +++++++++++++++++++ .../kotlin/jps/build/KotlinBuilder.kt | 8 ++++--- .../jps/build/KotlinDirtySourceFilesHolder.kt | 7 ++++-- .../kotlin/jps/build/TestingBuildLogger.kt | 15 ++++++------ .../general/PureJavaProject/kotlinProject.iml | 12 ++++++++++ .../general/PureJavaProject/kotlinProject.ipr | 14 +++++++++++ .../general/PureJavaProject/src/Test.java | 5 ++++ 7 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.iml create mode 100644 jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/general/PureJavaProject/src/Test.java diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 5262f188e42..66657f2bc1d 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -463,6 +463,29 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { buildAllModules().assertSuccessful() } + fun testPureJavaProject() { + initProject(JVM_FULL_RUNTIME) + + fun build() { + var someFilesCompiled = false + + buildCustom(CanceledStatus.NULL, TestProjectBuilderLogger(), BuildResult()) { + project.setTestingContext(TestingContext(LookupTracker.DO_NOTHING, object : TestingBuildLogger { + override fun compilingFiles(files: Collection, allRemovedFilesFiles: Collection) { + someFilesCompiled = true + } + })) + } + + assertFalse("Kotlin builder should return early if there are no Kotlin files", someFilesCompiled) + } + + build() + + rename("${workDir}/src/Test.java", "${workDir}/src/Test1.java") + build() + } + fun testKotlinJavaProject() { doTestWithRuntime() } 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 76d51459808..887425b0058 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 @@ -27,7 +27,6 @@ import org.jetbrains.jps.builders.storage.BuildDataCorruptedException import org.jetbrains.jps.incremental.* import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.* import org.jetbrains.jps.incremental.java.JavaBuilder -import org.jetbrains.jps.incremental.storage.BuildDataManager import org.jetbrains.jps.model.JpsProject import org.jetbrains.kotlin.build.GeneratedFile import org.jetbrains.kotlin.cli.common.ExitCode @@ -35,7 +34,6 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil -import org.jetbrains.kotlin.cli.common.toBooleanLenient import org.jetbrains.kotlin.compilerRunner.* import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.KotlinModuleKind @@ -55,7 +53,6 @@ import org.jetbrains.kotlin.preloading.ClassCondition import org.jetbrains.kotlin.utils.KotlinPaths import org.jetbrains.kotlin.utils.KotlinPathsFromHomeDir import org.jetbrains.kotlin.utils.PathUtil -import org.jetbrains.org.objectweb.asm.ClassReader import java.io.File import java.util.* import kotlin.collections.HashSet @@ -406,6 +403,11 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { messageCollector ) ?: return ABORT + context.testingContext?.buildLogger?.compilingFiles( + kotlinDirtyFilesHolder.allDirtyFiles, + kotlinDirtyFilesHolder.allRemovedFilesFiles + ) + if (LOG.isDebugEnabled) { LOG.debug("Compiling files: ${kotlinDirtyFilesHolder.allDirtyFiles}") } diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinDirtySourceFilesHolder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinDirtySourceFilesHolder.kt index 81a6d11c819..32aca9b2949 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinDirtySourceFilesHolder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinDirtySourceFilesHolder.kt @@ -73,13 +73,16 @@ class KotlinDirtySourceFilesHolder( val byTarget = mutableMapOf() chunk.targets.forEach { target -> - val removedFiles = delegate.getRemovedFiles(target).map { File(it) } + val removedFiles = delegate.getRemovedFiles(target) + .map { File(it) } + .filter { it.isKotlinSourceFile } + byTarget[target] = TargetFiles(target, removedFiles) } delegate.processDirtyFiles { target, file, root -> val targetInfo = byTarget[target] - ?: error("processDirtyFiles should callback only on chunk `$chunk` targets (`$target` is not)") + ?: error("processDirtyFiles should callback only on chunk `$chunk` targets (`$target` is not)") if (file.isKotlinSourceFile) { targetInfo._markDirty(file, root) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt index f7911aed25c..9beec30eec2 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt @@ -26,11 +26,12 @@ import java.io.File * Used for assertions in tests. */ interface TestingBuildLogger { - fun invalidOrUnusedCache(chunk: KotlinChunk?, target: KotlinModuleBuildTarget<*>?, attributesDiff: CacheAttributesDiff<*>) - fun chunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) - fun afterChunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) - fun addCustomMessage(message: String) - fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) - fun markedAsDirtyBeforeRound(files: Iterable) - fun markedAsDirtyAfterRound(files: Iterable) + fun invalidOrUnusedCache(chunk: KotlinChunk?, target: KotlinModuleBuildTarget<*>?, attributesDiff: CacheAttributesDiff<*>) = Unit + fun chunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) = Unit + fun afterChunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) = Unit + fun compilingFiles(files: Collection, allRemovedFilesFiles: Collection) = Unit + fun addCustomMessage(message: String) = Unit + fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) = Unit + fun markedAsDirtyBeforeRound(files: Iterable) = Unit + fun markedAsDirtyAfterRound(files: Iterable) = Unit } diff --git a/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.iml b/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.iml new file mode 100644 index 00000000000..d04ecd6e02e --- /dev/null +++ b/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.ipr b/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.ipr new file mode 100644 index 00000000000..90747786771 --- /dev/null +++ b/jps/jps-plugin/testData/general/PureJavaProject/kotlinProject.ipr @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/PureJavaProject/src/Test.java b/jps/jps-plugin/testData/general/PureJavaProject/src/Test.java new file mode 100644 index 00000000000..fc22b4f6f3b --- /dev/null +++ b/jps/jps-plugin/testData/general/PureJavaProject/src/Test.java @@ -0,0 +1,5 @@ +class A { + public static void main(String[] args) { + System.out.println("Hello"); + } +} \ No newline at end of file