Fix updating complementary files map in case of compilation errors
#KT-27868 Fixed
Previously given dirtyFiles was removed from complementaryFilesMap
exactly on call of clearComplementaryFilesMapping. This causes fail
of next build in case of compilation error of previous build on JPS
(since complementary files not known on second build). The right way
to do it is removing (replacing) them only after successful
build.
This was working on Gradle since Gradle rebuilds whole module (project)
in case of build error.
Original commit: f70d01f657
This commit is contained in:
@@ -468,7 +468,13 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
|
||||
for ((target, files) in generatedFiles) {
|
||||
val kotlinModuleBuilderTarget = kotlinContext.targetsBinding[target]!!
|
||||
kotlinModuleBuilderTarget.updateCaches(incrementalCaches[kotlinModuleBuilderTarget]!!, files, changesCollector, environment)
|
||||
kotlinModuleBuilderTarget.updateCaches(
|
||||
kotlinDirtyFilesHolder,
|
||||
incrementalCaches[kotlinModuleBuilderTarget]!!,
|
||||
files,
|
||||
changesCollector,
|
||||
environment
|
||||
)
|
||||
}
|
||||
|
||||
updateLookupStorage(lookupTracker, dataManager, kotlinDirtyFilesHolder)
|
||||
@@ -512,7 +518,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
val targetDirtyFiles = dirtyFilesHolder.byTarget[jpsTarget]
|
||||
|
||||
if (cache != null && targetDirtyFiles != null) {
|
||||
val complementaryFiles = cache.clearComplementaryFilesMapping(
|
||||
val complementaryFiles = cache.getComplementaryFilesRecursive(
|
||||
targetDirtyFiles.dirty.keys + targetDirtyFiles.removed
|
||||
)
|
||||
|
||||
|
||||
@@ -211,12 +211,13 @@ class KotlinJsModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleBu
|
||||
JpsIncrementalJsCache(jpsModuleBuildTarget, paths)
|
||||
|
||||
override fun updateCaches(
|
||||
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
||||
jpsIncrementalCache: JpsIncrementalCache,
|
||||
files: List<GeneratedFile>,
|
||||
changesCollector: ChangesCollector,
|
||||
environment: JpsCompilerEnvironment
|
||||
) {
|
||||
super.updateCaches(jpsIncrementalCache, files, changesCollector, environment)
|
||||
super.updateCaches(dirtyFilesHolder, jpsIncrementalCache, files, changesCollector, environment)
|
||||
|
||||
val incrementalResults = environment.services[IncrementalResultsConsumer::class.java] as IncrementalResultsConsumerImpl
|
||||
|
||||
|
||||
@@ -254,12 +254,13 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
||||
}
|
||||
|
||||
override fun updateCaches(
|
||||
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
||||
jpsIncrementalCache: JpsIncrementalCache,
|
||||
files: List<GeneratedFile>,
|
||||
changesCollector: ChangesCollector,
|
||||
environment: JpsCompilerEnvironment
|
||||
) {
|
||||
super.updateCaches(jpsIncrementalCache, files, changesCollector, environment)
|
||||
super.updateCaches(dirtyFilesHolder, jpsIncrementalCache, files, changesCollector, environment)
|
||||
|
||||
updateIncrementalCache(files, jpsIncrementalCache as IncrementalJvmCache, changesCollector, null)
|
||||
}
|
||||
|
||||
@@ -27,11 +27,11 @@ import org.jetbrains.kotlin.incremental.ChangesCollector
|
||||
import org.jetbrains.kotlin.incremental.ExpectActualTrackerImpl
|
||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.jps.build.*
|
||||
import org.jetbrains.kotlin.jps.incremental.CacheAttributesDiff
|
||||
import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache
|
||||
import org.jetbrains.kotlin.jps.incremental.loadDiff
|
||||
import org.jetbrains.kotlin.jps.incremental.localCacheVersionManager
|
||||
import org.jetbrains.kotlin.jps.build.*
|
||||
import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache
|
||||
import org.jetbrains.kotlin.jps.model.productionOutputFilePath
|
||||
import org.jetbrains.kotlin.jps.model.testOutputFilePath
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
@@ -246,13 +246,17 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
|
||||
}
|
||||
|
||||
open fun updateCaches(
|
||||
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
||||
jpsIncrementalCache: JpsIncrementalCache,
|
||||
files: List<GeneratedFile>,
|
||||
changesCollector: ChangesCollector,
|
||||
environment: JpsCompilerEnvironment
|
||||
) {
|
||||
val changedAndRemovedFiles = dirtyFilesHolder.getDirtyFiles(jpsModuleBuildTarget).keys +
|
||||
dirtyFilesHolder.getRemovedFiles(jpsModuleBuildTarget)
|
||||
val expectActualTracker = environment.services[ExpectActualTracker::class.java] as ExpectActualTrackerImpl
|
||||
jpsIncrementalCache.registerComplementaryFiles(expectActualTracker)
|
||||
|
||||
jpsIncrementalCache.updateComplementaryFiles(changedAndRemovedFiles,expectActualTracker)
|
||||
}
|
||||
|
||||
open fun makeServices(
|
||||
|
||||
Reference in New Issue
Block a user