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:
+18
@@ -594,6 +594,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
|
||||
runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/commonSourcesCompilerArg/");
|
||||
}
|
||||
|
||||
@TestMetadata("complementaryFiles")
|
||||
public void testComplementaryFiles() throws Exception {
|
||||
runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/");
|
||||
}
|
||||
|
||||
@TestMetadata("notSameCompiler")
|
||||
public void testNotSameCompiler() throws Exception {
|
||||
runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler/");
|
||||
@@ -638,6 +643,19 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class ComplementaryFiles extends AbstractIncrementalJpsTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInComplementaryFiles() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, true);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
@@ -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() }
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
c [sourceSetHolder]
|
||||
|
||||
pJvm [compilationAndSourceSetHolder, jvm]
|
||||
pJvm -> c [include]
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
================ Step #1 =================
|
||||
|
||||
Building c
|
||||
Building pJvm
|
||||
Cleaning output files:
|
||||
out/production/pJvm/FJvmKt.class
|
||||
out/production/pJvm/META-INF/pJvm.kotlin_module
|
||||
End of files
|
||||
Compiling files:
|
||||
c/src/f.kt
|
||||
pJvm/src/fJvm.kt
|
||||
End of files
|
||||
Exit code: OK
|
||||
------------------------------------------
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
expect fun f()
|
||||
|
||||
@ExperimentalMultiplatform
|
||||
@OptionalExpectation
|
||||
internal expect annotation class SharedImmutable()
|
||||
|
||||
@ExperimentalMultiplatform
|
||||
@SharedImmutable
|
||||
val UNDEFINED = 1
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
actual fun f() = Unit
|
||||
|
||||
fun x() = 1
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
actual fun f() = Unit
|
||||
|
||||
fun x() = 2
|
||||
Reference in New Issue
Block a user