JPS: exclude source roots from other targets
Previously `findJavaRootDescriptor` was return source root for random
module. This cause build errors for mpp (same file may appear in
multiple source roots of common and platform modules)
#KT-28988 Fixed
Original commit: 75e59fdc46
This commit is contained in:
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.jps.build
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.jps.ModuleChunk
|
||||
import org.jetbrains.jps.builders.BuildRootDescriptor
|
||||
import org.jetbrains.jps.builders.BuildTarget
|
||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
||||
import org.jetbrains.jps.builders.java.dependencyView.Mappings
|
||||
import org.jetbrains.jps.incremental.CompileContext
|
||||
import org.jetbrains.jps.incremental.FSOperations
|
||||
@@ -27,6 +29,7 @@ import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||
import org.jetbrains.jps.incremental.fs.CompilationRound
|
||||
import java.io.File
|
||||
import java.util.HashMap
|
||||
import kotlin.collections.*
|
||||
|
||||
/**
|
||||
* Entry point for safely marking files as dirty.
|
||||
@@ -76,10 +79,13 @@ class FSOperationsHelper(
|
||||
fun markFilesForCurrentRound(target: ModuleBuildTarget, files: Iterable<File>) {
|
||||
require(target in chunk.targets)
|
||||
|
||||
val targetDirtyFiles = dirtyFilesHolder.byTarget[target]!!
|
||||
files.forEach {
|
||||
val root = compileContext.projectDescriptor.buildRootIndex.findJavaRootDescriptor(compileContext, it)!!
|
||||
targetDirtyFiles._markDirty(it, root)
|
||||
val targetDirtyFiles = dirtyFilesHolder.byTarget.getValue(target)
|
||||
files.forEach { file ->
|
||||
val root = compileContext.projectDescriptor.buildRootIndex
|
||||
.findAllParentDescriptors<BuildRootDescriptor>(file, compileContext)
|
||||
.single { sourceRoot -> sourceRoot.target == target }
|
||||
|
||||
targetDirtyFiles._markDirty(file, root as JavaSourceRootDescriptor)
|
||||
}
|
||||
|
||||
markFilesImpl(files, currentRound = true) { it.exists() }
|
||||
|
||||
Reference in New Issue
Block a user