From 28567570ea62dcdb314fd8c32be8c1015b6d98d3 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 4 Oct 2017 22:00:43 +0300 Subject: [PATCH] Changes related to the 'expectedBy' Gradle configuration: * Remove the `extendsFrom` relation; * Refactor, reword warnings; * Add the new expectedBy name to `KotlinGradleModelBuilder.kt`. (cherry picked from commit de198f0) --- .../src/KotlinGradleModelBuilder.kt | 3 +- .../kotlin/gradle/KotlinGradlePluginIT.kt | 9 ++--- .../plugin/KotlinMultiplatformPlugin.kt | 38 +++++++++++-------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt index 102ac18ceed..7702187ec66 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.artifacts.ProjectDependency -import org.gradle.tooling.ModelBuilder import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder import org.jetbrains.plugins.gradle.tooling.ModelBuilderService import java.io.File @@ -92,7 +91,7 @@ class KotlinGradleModelBuilder : AbstractKotlinGradleModelBuilder() { override fun canBuild(modelName: String?): Boolean = modelName == KotlinGradleModel::class.java.name private fun getImplements(project: Project): Project? { - val implementsConfiguration = project.configurations.findByName("implement") ?: return null + val implementsConfiguration = project.configurations.run { findByName("expectedBy") ?: findByName("implement") } ?: return null val implementsProjectDependency = implementsConfiguration.dependencies.filterIsInstance().firstOrNull() return implementsProjectDependency?.dependencyProject } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index b8aa1cb9af4..00d79e167e9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -20,7 +20,7 @@ import org.gradle.api.logging.LogLevel import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.gradle.plugin.CopyClassesToJavaOutputStatus import org.jetbrains.kotlin.gradle.tasks.USING_INCREMENTAL_COMPILATION_MESSAGE -import org.jetbrains.kotlin.gradle.plugin.IMPLEMENT_CONFIG_WARNING +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.util.* import org.junit.Test import java.io.File @@ -410,20 +410,19 @@ class KotlinGradleIT: BaseGradleIT() { @Test fun testDeprecatedImplementWarning() { val project = Project("multiplatformProject", GRADLE_VERSION) - val warningText = IMPLEMENT_CONFIG_WARNING project.build("build") { assertSuccessful() - assertNotContains(warningText) + assertNotContains(IMPLEMENT_DEPRECATION_WARNING) } project.projectDir.walk().filter { it.name == "build.gradle" }.forEach { buildGradle -> - buildGradle.modify { it.replace("expectedBy", "implement") } + buildGradle.modify { it.replace(EXPECTED_BY_CONFIG_NAME, IMPLEMENT_CONFIG_NAME) } } project.build("build") { assertSuccessful() - assertContains(warningText) + assertContains(IMPLEMENT_DEPRECATION_WARNING) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt index 32fdd8ea7f4..7f85ca7c6df 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt @@ -35,7 +35,11 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } } -const val IMPLEMENT_CONFIG_WARNING = "The 'implement' configuration is deprecated and will be removed. Use 'expectedBy' instead." +const val EXPECTED_BY_CONFIG_NAME = "expectedBy" + +const val IMPLEMENT_CONFIG_NAME = "implement" +const val IMPLEMENT_DEPRECATION_WARNING = "The '$IMPLEMENT_CONFIG_NAME' configuration is deprecated and will be removed. " + + "Use '$EXPECTED_BY_CONFIG_NAME' instead." open class KotlinPlatformImplementationPluginBase(platformName: String) : KotlinPlatformPluginBase(platformName) { private val commonProjects = arrayListOf() @@ -48,9 +52,14 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin project.tasks.filterIsInstance>().associateByTo(platformKotlinTasksBySourceSetName) { it.sourceSetName } - val implementConfig = project.configurations.create("implement") - val expectedByConfig = project.configurations.create("expectedBy").apply { - extendsFrom(implementConfig) + val implementConfig = project.configurations.create(IMPLEMENT_CONFIG_NAME) + val expectedByConfig = project.configurations.create(EXPECTED_BY_CONFIG_NAME) + + implementConfig.dependencies.whenObjectAdded { + if (!implementConfigurationIsUsed) { + implementConfigurationIsUsed = true + project.logger.kotlinWarn(IMPLEMENT_DEPRECATION_WARNING) + } } listOf(implementConfig, expectedByConfig).forEach { config -> @@ -65,26 +74,25 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin } } } - - var implementDeprecationWarningShown = false - - implementConfig.dependencies.whenObjectAdded { - if (!implementDeprecationWarningShown) { - implementDeprecationWarningShown = true - project.logger.kotlinWarn(IMPLEMENT_CONFIG_WARNING) - } - } } + private var implementConfigurationIsUsed = false + private fun addCommonProject(commonProject: Project, platformProject: Project) { commonProjects.add(commonProject) if (commonProjects.size > 1) { - throw GradleException("Platform project $platformProject is expected by more than one common project: ${commonProjects.joinToString()}") + throw GradleException( + "Platform project $platformProject has more than one " + + "'$EXPECTED_BY_CONFIG_NAME'${if (implementConfigurationIsUsed) "/'$IMPLEMENT_CONFIG_NAME'" else ""} " + + "dependency: ${commonProjects.joinToString()}") } commonProject.whenEvaluated { if ((!commonProject.plugins.hasPlugin(KotlinPlatformCommonPlugin::class.java))) { - throw GradleException("Platform project $platformProject is expected by non-common project $commonProject (`apply plugin 'kotlin-platform-kotlin'`)") + throw GradleException( + "Platform project $platformProject has an " + + "'$EXPECTED_BY_CONFIG_NAME'${if (implementConfigurationIsUsed) "/'$IMPLEMENT_CONFIG_NAME'" else ""} " + + "dependency to non-common project $commonProject") } commonProject.sourceSets.all { commonSourceSet ->