Commit 2bcf7cdf authored by Sebastian Sellmair's avatar Sebastian Sellmair Committed by intellij-monorepo-bot
Browse files

[KTIJ-24368] PrepareKotlinIdeaImportTaskModelBuilder: Support composite builds

^KTIJ-24368 Verification Pending

(cherry picked from commit 80007aab31f05a18b8b606b5266b5434c6ed5e1e)

GitOrigin-RevId: b94af3886a90ce375e22eb22838c948f896b4186
parent 35f4c844
Showing with 83 additions and 2 deletions
+83 -2
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.newTests.testServices.GradleProjectLinkingService.linkGradleProject
import org.jetbrains.kotlin.idea.codeInsight.gradle.KotlinGradlePluginVersions
import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase
import org.jetbrains.kotlin.idea.gradleTooling.PrepareKotlinIdeImportTaskModel
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
import org.jetbrains.plugins.gradle.tooling.annotation.PluginTargetVersions
import org.junit.Assume.assumeTrue
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
......@@ -15,7 +18,6 @@ class PrepareKotlinIdeaImportTest : MultiplePluginVersionGradleImportingTestCase
private val KotlinToolingVersion.isPrepareKotlinIdeaImportSupportExpected: Boolean
get() = this >= KotlinToolingVersion("1.6.255-SNAPSHOT")
@Test
@PluginTargetVersions(pluginVersion = "1.5+")
fun testPrepareKotlinIdeaImport() {
......@@ -112,4 +114,20 @@ class PrepareKotlinIdeaImportTest : MultiplePluginVersionGradleImportingTestCase
}
}
}
@Test
@PluginTargetVersions
fun `testPrepareKotlinIdeaImport-compositeBuild`() {
/* Only run against a single configuration */
assumeTrue(kotlinPluginVersion == KotlinGradlePluginVersions.latest)
configureByFiles()
linkGradleProject("consumerBuild", myProjectRoot.toNioPath(), myProject)
val consumerStateFile = myProjectRoot.toNioPath().resolve("consumerBuild/consumerA/prepareKotlinIdeaImport.executed").toFile()
if(!consumerStateFile.exists()) fail("consumerA: prepareKotlinIdeaImport not executed")
if(consumerStateFile.readText() != "OK") fail("Unexpected content in consumerStateFile: ${consumerStateFile.readText()}")
val producerStateFile = myProjectRoot.toNioPath().resolve("producerBuild/producerA/prepareKotlinIdeaImport.executed").toFile()
if(!producerStateFile.exists()) fail("producerA: prepareKotlinIdeaImport not executed")
if(producerStateFile.readText() != "OK") fail("Unexpected content in producerStateFile: ${consumerStateFile.readText()}")
}
}
......@@ -2,8 +2,10 @@
package org.jetbrains.kotlin.idea.gradleTooling
import org.gradle.api.Project
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.gradle.internal.build.BuildState
import org.jetbrains.plugins.gradle.tooling.AbstractModelBuilderService
import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder
import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext
......@@ -78,7 +80,17 @@ class PrepareKotlinIdeaImportTaskModelBuilder : AbstractModelBuilderService() {
}
private fun Project.addTasksToStartParameter(taskNames: Iterable<String>) {
project.gradle.startParameter.setTaskNames(project.gradle.startParameter.taskNames.toSet() + taskNames)
if (project.gradle.parent == null) {
/* Root of composite build: We can just add the task name */
project.gradle.startParameter.setTaskNames(project.gradle.startParameter.taskNames.toSet() + taskNames)
} else {
/* This is an included build. Referencing the task path explicitly */
val rootBuild = generateSequence(project.gradle) { it.parent }.last()
val buildId = (project as ProjectInternal).services.get(BuildState::class.java).buildIdentifier
val projectPathPart = if (rootProject != project) project.path else ""
val absoluteTaskPaths = taskNames.map { taskName -> ":${buildId.name}$projectPathPart:$taskName" }
rootBuild.startParameter.setTaskNames(rootBuild.startParameter.taskNames.toSet() + absoluteTaskPaths)
}
}
override fun getErrorMessageBuilder(project: Project, e: Exception): ErrorMessageBuilder {
......
allprojects {
repositories {
{ { kts_kotlin_plugin_repositories } }
}
}
plugins {
kotlin("jvm")
}
tasks.register("prepareKotlinIdeaImport") {
doLast {
file("prepareKotlinIdeaImport.executed").writeText("OK")
}
}
\ No newline at end of file
pluginManagement {
repositories {
{ { kts_kotlin_plugin_repositories } }
}
plugins {
kotlin("jvm") version "{{kotlin_plugin_version}}"
}
}
include(":consumerA")
includeBuild("../producerBuild")
\ No newline at end of file
allprojects {
repositories {
{ { kts_kotlin_plugin_repositories } }
}
}
plugins {
kotlin("jvm")
}
tasks.register("prepareKotlinIdeaImport") {
doLast {
file("prepareKotlinIdeaImport.executed").writeText("OK")
}
}
\ No newline at end of file
pluginManagement {
repositories {
{ { kts_kotlin_plugin_repositories } }
}
plugins {
kotlin("jvm") version "{{kotlin_plugin_version}}"
}
}
include(":producerA")
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment