diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt index 3f44d519d23..785bb9464f9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt @@ -196,8 +196,7 @@ open class A { // that is not JavaCompile or KotlinCompile @Test fun testCompileLibWithGroovy() { - val gradleVersion = GradleVersionRequired.Exact("3.5") // With newer versions, Groovy uses separate classes dirs - val project = Project("incrementalMultiproject", gradleVersion) + val project = Project("incrementalMultiproject") project.setupWorkingDir() val lib = File(project.projectDir, "lib") val libBuildGradle = File(lib, "build.gradle") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 4eb5939ccc6..757f9f6551f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.gradle.tasks +import com.intellij.openapi.util.io.FileUtil import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.logging.Logger @@ -23,6 +24,7 @@ import org.gradle.api.plugins.BasePluginConvention import org.gradle.api.tasks.* import org.gradle.api.tasks.Optional import org.gradle.api.tasks.compile.AbstractCompile +import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.incremental.IncrementalTaskInputs import org.jetbrains.kotlin.annotation.AnnotationFileUpdater import org.jetbrains.kotlin.annotation.AnnotationFileUpdaterImpl @@ -229,6 +231,9 @@ abstract class AbstractKotlinCompile() : AbstractKo compilerCalled = true callCompiler(args, sourceRoots, ChangedFiles(inputs)) + + + } @Internal @@ -381,6 +386,7 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl args, environment) + disableMultiModuleICIfNeeded() processCompilerExitCode(exitCode) } catch (e: Throwable) { @@ -390,6 +396,26 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl anyClassesCompiled = true } + private fun disableMultiModuleICIfNeeded() { + if (!incremental || javaOutputDir == null) return + + val illegalTask = project.tasks.firstOrNull { + it is AbstractCompile && + it !is JavaCompile && + it !is AbstractKotlinCompile<*> && + FileUtil.isAncestor(javaOutputDir!!, it.destinationDir, /* strict = */ false) + } as? AbstractCompile + + if (illegalTask != null) { + project.logger.info( + "Kotlin inter-project IC is disabled: " + + "unknown task '$illegalTask' destination dir ${illegalTask.destinationDir} " + + "intersects with java destination dir $javaOutputDir" + ) + buildHistoryFile.delete() + } + } + private fun cleanupOnError() { logger.kotlinInfo("deleting $destinationDir on error") destinationDir.deleteRecursively()