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/");
|
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")
|
@TestMetadata("notSameCompiler")
|
||||||
public void testNotSameCompiler() throws Exception {
|
public void testNotSameCompiler() throws Exception {
|
||||||
runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler/");
|
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")
|
@TestMetadata("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.jps.build
|
|||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.util.containers.ContainerUtil
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import org.jetbrains.jps.ModuleChunk
|
import org.jetbrains.jps.ModuleChunk
|
||||||
|
import org.jetbrains.jps.builders.BuildRootDescriptor
|
||||||
import org.jetbrains.jps.builders.BuildTarget
|
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.builders.java.dependencyView.Mappings
|
||||||
import org.jetbrains.jps.incremental.CompileContext
|
import org.jetbrains.jps.incremental.CompileContext
|
||||||
import org.jetbrains.jps.incremental.FSOperations
|
import org.jetbrains.jps.incremental.FSOperations
|
||||||
@@ -27,6 +29,7 @@ import org.jetbrains.jps.incremental.ModuleBuildTarget
|
|||||||
import org.jetbrains.jps.incremental.fs.CompilationRound
|
import org.jetbrains.jps.incremental.fs.CompilationRound
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.HashMap
|
import java.util.HashMap
|
||||||
|
import kotlin.collections.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entry point for safely marking files as dirty.
|
* Entry point for safely marking files as dirty.
|
||||||
@@ -76,10 +79,13 @@ class FSOperationsHelper(
|
|||||||
fun markFilesForCurrentRound(target: ModuleBuildTarget, files: Iterable<File>) {
|
fun markFilesForCurrentRound(target: ModuleBuildTarget, files: Iterable<File>) {
|
||||||
require(target in chunk.targets)
|
require(target in chunk.targets)
|
||||||
|
|
||||||
val targetDirtyFiles = dirtyFilesHolder.byTarget[target]!!
|
val targetDirtyFiles = dirtyFilesHolder.byTarget.getValue(target)
|
||||||
files.forEach {
|
files.forEach { file ->
|
||||||
val root = compileContext.projectDescriptor.buildRootIndex.findJavaRootDescriptor(compileContext, it)!!
|
val root = compileContext.projectDescriptor.buildRootIndex
|
||||||
targetDirtyFiles._markDirty(it, root)
|
.findAllParentDescriptors<BuildRootDescriptor>(file, compileContext)
|
||||||
|
.single { sourceRoot -> sourceRoot.target == target }
|
||||||
|
|
||||||
|
targetDirtyFiles._markDirty(file, root as JavaSourceRootDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
markFilesImpl(files, currentRound = true) { it.exists() }
|
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