From 44d796e850bdff25d641a2b0cee3ca3d4f1ed67d Mon Sep 17 00:00:00 2001 From: "Aleksei.Cherepanov" Date: Wed, 19 Jan 2022 15:05:26 +0300 Subject: [PATCH] Fix JPS tests after JPS module moved to Kotlin repo Fix testdata of new compiler tests for JPS, as it is build-log-sensitive: ClassHierarchyAffected.testWithIntermediateBodiesChanged PureKotlin.testSerializedSubClassAndChangedInterfaces WithJava.JavaUsedInKotlin.testRawErrorTypeDuringSerialization Mute JavaUsedInKotlin.SamConversions tests, as it was fixed in 212 idea Add missed part of commit 5f4be072 [JPS] Fix JS incremental compilation Part of commit, located in JPS module, was missed during JPS relocation Fix test MixedInheritance for non-JPS builds Depends on commit [CHERRY PICKED FROM IJ] [testdata] Replace test IncrementalJvmJpsTest... --- .../kotlin/jps/build/KotlinBuilder.kt | 39 ++++++ .../jps/targets/KotlinJsModuleBuildTarget.kt | 13 ++ .../withIntermediateBodiesChanged/build.log | 9 +- .../build.log | 5 +- .../mixedInheritance/gradle-build.log | 127 ++++++++++++++++++ .../rawErrorTypeDuringSerialization/build.log | 10 +- tests/mute-common.csv | 1 + 7 files changed, 198 insertions(+), 6 deletions(-) create mode 100644 jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/mixedInheritance/gradle-build.log 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 3c3e8399041..8e7e2a7c37e 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 @@ -432,6 +432,8 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { kotlinDirtyFilesHolder.allRemovedFilesFiles ) + cleanJsOutputs(context, kotlinChunk, incrementalCaches, kotlinDirtyFilesHolder) + if (LOG.isDebugEnabled) { LOG.debug("Compiling files: ${kotlinDirtyFilesHolder.allDirtyFiles}") } @@ -532,6 +534,43 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { return OK } + private fun cleanJsOutputs( + context: CompileContext, + kotlinChunk: KotlinChunk, + incrementalCaches: Map, JpsIncrementalCache>, + kotlinDirtyFilesHolder: KotlinDirtySourceFilesHolder + ) { + for (target in kotlinChunk.targets) { + val cache = incrementalCaches[target] ?: continue + + if (cache is IncrementalJsCache) { + val filesToDelete = mutableListOf() + val dirtyFiles = kotlinDirtyFilesHolder.getDirtyFiles(target.jpsModuleBuildTarget).keys + val removedFiles = kotlinDirtyFilesHolder.getRemovedFiles(target.jpsModuleBuildTarget) + + for (file: File in dirtyFiles + removedFiles) { + filesToDelete.addAll(cache.getOutputsBySource(file).filter { it !in filesToDelete }) + } + + if (filesToDelete.isNotEmpty()) { + val deletedForThisSource = mutableSetOf() + val parentDirs = mutableSetOf() + + for (kjsmFile in filesToDelete) { + BuildOperations.deleteRecursively(kjsmFile.path, deletedForThisSource, parentDirs) + } + + FSOperations.pruneEmptyDirs(context, parentDirs) + + val logger = context.loggingManager.projectBuilderLogger + if (logger.isEnabled && deletedForThisSource.isNotEmpty()) { + logger.logDeletedFiles(deletedForThisSource) + } + } + } + } + } + // todo(1.2.80): got rid of ModuleChunk (replace with KotlinChunk) // todo(1.2.80): introduce KotlinRoundCompileContext, move dirtyFilesHolder, fsOperations, environment to it private fun doCompileModuleChunk( diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt index 10fa782b535..3d9bf3b9bc6 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.jps.targets import org.jetbrains.jps.builders.storage.BuildDataPaths import org.jetbrains.jps.incremental.ModuleBuildTarget +import org.jetbrains.jps.incremental.ModuleLevelBuilder import org.jetbrains.jps.model.library.JpsOrderRootType import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil @@ -227,7 +228,19 @@ class KotlinJsModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleBu val jsCache = jpsIncrementalCache as IncrementalJsCache jsCache.header = incrementalResults.headerMetadata + jsCache.updateSourceToOutputMap(files) jsCache.compareAndUpdate(incrementalResults, changesCollector) jsCache.clearCacheForRemovedClasses(changesCollector) } + override fun registerOutputItems(outputConsumer: ModuleLevelBuilder.OutputConsumer, outputItems: List) { + if (isIncrementalCompilationEnabled) { + for (output in outputItems) { + for (source in output.sourceFiles) { + outputConsumer.registerOutputFile(jpsModuleBuildTarget, File("${source.path.hashCode()}"), listOf(source.path)) + } + } + } else { + super.registerOutputItems(outputConsumer, outputItems) + } + } } \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/withIntermediateBodiesChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/withIntermediateBodiesChanged/build.log index 5ca66e7128b..a5a8f8c3e1e 100644 --- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/withIntermediateBodiesChanged/build.log +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/withIntermediateBodiesChanged/build.log @@ -1,18 +1,25 @@ ================ Step #1 ================= Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/foo/DirectBase.class + out/production/module/foo/DirectChild.class End of files Compiling files: src/direct.kt End of files Exit code: OK +------------------------------------------ ================ Step #2 ================= Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/foo/ReverseBase.class + out/production/module/foo/ReverseChild.class End of files Compiling files: src/reverse.kt End of files Exit code: OK ------------------------------------------- +------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/serializedSubClassAndChangedInterfaces/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/serializedSubClassAndChangedInterfaces/build.log index c59c5d8c561..60a3fe3528f 100644 --- a/jps/jps-plugin/testData/incremental/pureKotlin/serializedSubClassAndChangedInterfaces/build.log +++ b/jps/jps-plugin/testData/incremental/pureKotlin/serializedSubClassAndChangedInterfaces/build.log @@ -2,8 +2,9 @@ Cleaning output files: out/production/module/META-INF/module.kotlin_module - out/production/module/test/BKt.class - out/production/module/test/UsageKt.class + out/production/module/test/B.class + out/production/module/test/I1.class + out/production/module/test/I2.class End of files Compiling files: src/b.kt diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/mixedInheritance/gradle-build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/mixedInheritance/gradle-build.log new file mode 100644 index 00000000000..4e59772018a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/mixedInheritance/gradle-build.log @@ -0,0 +1,127 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/BaseClass.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/BaseClass.java +End of files +Cleaning output files: + out/production/module/DerivedClass1.class + out/production/module/META-INF/module.kotlin_module +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +Class 'DerivedClass1' is not abstract and does not implement abstract base class member public/*package*/ abstract fun myAbs(): Unit defined in BaseClass + +================ Step #2 ================= + +Cleaning output files: + out/production/module/BaseClass.class +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: OK +------------------------------------------ +Compiling files: + src/BaseClass.java +End of files + +================ Step #3 ================= + +Cleaning output files: + out/production/module/BaseClass.class + out/production/module/DerivedClass1.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/BaseClass.java + src/DerivedClass1.kt +End of files + +================ Step #4 ================= + +Cleaning output files: + out/production/module/BaseClass.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/BaseClass.java +End of files +Cleaning output files: + out/production/module/DerivedClass1.class + out/production/module/META-INF/module.kotlin_module +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +'doSmth' hides member of supertype 'BaseClass' and needs 'override' modifier + +================ Step #5 ================= + +Cleaning output files: + out/production/module/BaseClass.class +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: OK +------------------------------------------ +Compiling files: + src/BaseClass.java +End of files +Cleaning output files: + out/production/module/DerivedClass1.class + out/production/module/META-INF/module.kotlin_module +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: OK +------------------------------------------ + +================ Step #6 ================= + +Cleaning output files: + out/production/module/DerivedClass1.class + out/production/module/META-INF/module.kotlin_module +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: OK +------------------------------------------ + +================ Step #7 ================= + +Cleaning output files: + out/production/module/BaseClass.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/BaseClass.java +End of files +Cleaning output files: + out/production/module/DerivedClass1.class + out/production/module/META-INF/module.kotlin_module +End of files +Compiling files: + src/DerivedClass1.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +Return type of 'doSmthAnother' is not a subtype of the return type of the overridden member 'public/*package*/ open fun doSmthAnother(): String! defined in BaseClass' diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/rawErrorTypeDuringSerialization/build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/rawErrorTypeDuringSerialization/build.log index c2381f800c9..1a9efb8eeac 100644 --- a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/rawErrorTypeDuringSerialization/build.log +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/rawErrorTypeDuringSerialization/build.log @@ -1,6 +1,10 @@ ================ Step #1 ================= -Compiling files: +Cleaning output files: + out/production/module/Foo.class End of files -Exit code: OK - +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/Foo.java +End of files \ No newline at end of file diff --git a/tests/mute-common.csv b/tests/mute-common.csv index b0cf2b6eb57..95a488173f8 100644 --- a/tests/mute-common.csv +++ b/tests/mute-common.csv @@ -83,3 +83,4 @@ org.jetbrains.kotlin.checkers.FirKotlinHighlightingPassTestGenerated.Checker.tes org.jetbrains.kotlin.idea.caches.resolve.MultiModuleHighlightingTest.testLanguageVersionsViaFacets,,, FLAKY org.jetbrains.kotlin.jps.build.IncrementalJvmJpsTestGenerated.WithJava.JavaUsedInKotlin.SamConversions.testMethodAdded, KT-44844 fixed in IDEA 212,, org.jetbrains.kotlin.jps.build.IncrementalJvmJpsTestGenerated.WithJava.JavaUsedInKotlin.SamConversions.testMethodAddedSamAdapter, KT-44844 fixed in IDEA 212,, +org.jetbrains.kotlin.jps.build.IncrementalJvmJpsTestGenerated.WithJava.JavaUsedInKotlin.SamConversions.testMethodAddDefault, KT-44844 fixed in IDEA 212,,