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...
This commit is contained in:
Aleksei.Cherepanov
2022-01-19 15:05:26 +03:00
committed by Space
parent 411a0ecc38
commit 44d796e850
7 changed files with 198 additions and 6 deletions
@@ -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<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
kotlinDirtyFilesHolder: KotlinDirtySourceFilesHolder
) {
for (target in kotlinChunk.targets) {
val cache = incrementalCaches[target] ?: continue
if (cache is IncrementalJsCache) {
val filesToDelete = mutableListOf<File>()
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<String>()
val parentDirs = mutableSetOf<File>()
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(
@@ -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<GeneratedFile>) {
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)
}
}
}