From b5491177c90402ac6bfab0bf0854b44e1795b35c Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Thu, 4 Aug 2022 23:40:53 +0200 Subject: [PATCH] [Gradle] Add Gradle 7.5+ variant --- buildSrc/src/main/kotlin/GradleCommon.kt | 1 + ...dle-plugin-common-configuration.gradle.kts | 7 + ...plugin-dependency-configuration.gradle.kts | 7 + gradle/verification-metadata.xml | 12 ++ .../kotlin/gradle/SimpleKotlinGradleIT.kt | 7 +- .../kotlin/gradle/plugin/PluginWrappers.kt | 143 ++++++++++++++++++ .../internal/JavaSourceSetsAccessorG6.kt | 2 +- 7 files changed, 175 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt diff --git a/buildSrc/src/main/kotlin/GradleCommon.kt b/buildSrc/src/main/kotlin/GradleCommon.kt index 49b4f03b483..ded21a057ba 100644 --- a/buildSrc/src/main/kotlin/GradleCommon.kt +++ b/buildSrc/src/main/kotlin/GradleCommon.kt @@ -49,6 +49,7 @@ enum class GradlePluginVariant( GRADLE_MIN("main", "6.7", "6.9"), GRADLE_70("gradle70", "7.0", "7.0"), GRADLE_71("gradle71", "7.1", "7.1"), + GRADLE_75("gradle75", "7.5", "7.5"), } /** diff --git a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts index f5d65975deb..1f0c7e51f00 100644 --- a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts @@ -73,4 +73,11 @@ if (!kotlinBuildProperties.isInJpsBuildIdeaSync) { commonSourceSet = commonSourceSet ) publishShadowedJar(gradle71SourceSet, commonSourceSet) + + // Used for Gradle 7.5+ versions + val gradle75SourceSet = createGradlePluginVariant( + GradlePluginVariant.GRADLE_75, + commonSourceSet = commonSourceSet + ) + publishShadowedJar(gradle75SourceSet, commonSourceSet) } diff --git a/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts index 90fae9a67b4..0a174b81acc 100644 --- a/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts @@ -34,6 +34,13 @@ createGradlePluginVariant( isGradlePlugin = false ) +// Used for Gradle 7.5+ versions +createGradlePluginVariant( + GradlePluginVariant.GRADLE_75, + commonSourceSet = commonSourceSet, + isGradlePlugin = false +) + publishing { publications { register(DEFAULT_MAIN_PUBLICATION_NAME) { diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 1b1cb777a28..e91f0671180 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -3432,6 +3432,12 @@ + + + + + + @@ -6787,6 +6793,12 @@ + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt index 648d01c3eaa..1b373d92931 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt @@ -212,15 +212,16 @@ class SimpleKotlinGradleIT : KGPBaseTest() { @DisplayName("Proper Gradle plugin variant is used") @GradleTestVersions( - additionalVersions = [TestVersions.Gradle.G_7_0], - maxVersion = TestVersions.Gradle.G_7_1 + additionalVersions = [TestVersions.Gradle.G_7_0, TestVersions.Gradle.G_7_1, TestVersions.Gradle.G_7_4], + maxVersion = TestVersions.Gradle.G_7_5 ) @GradleTest internal fun pluginVariantIsUsed(gradleVersion: GradleVersion) { project("kotlinProject", gradleVersion) { build("tasks") { val expectedVariant = when (gradleVersion) { - GradleVersion.version(TestVersions.Gradle.G_7_1) -> "gradle71" + GradleVersion.version(TestVersions.Gradle.G_7_5) -> "gradle75" + in GradleVersion.version(TestVersions.Gradle.G_7_1)..GradleVersion.version(TestVersions.Gradle.G_7_4) -> "gradle71" GradleVersion.version(TestVersions.Gradle.G_7_0) -> "gradle70" else -> "main" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt new file mode 100644 index 00000000000..946ad93cbf9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -0,0 +1,143 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin + +import com.android.build.gradle.BaseExtension +import org.gradle.api.Named +import org.gradle.api.NamedDomainObjectContainer +import org.gradle.api.Project +import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.model.ObjectFactory +import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import javax.inject.Inject + +private const val PLUGIN_VARIANT_NAME = "gradle75" + +open class KotlinPluginWrapper @Inject constructor( + registry: ToolingModelBuilderRegistry +) : AbstractKotlinPluginWrapper(registry) { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinCommonPluginWrapper @Inject constructor( + registry: ToolingModelBuilderRegistry +) : AbstractKotlinCommonPluginWrapper(registry) { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinAndroidPluginWrapper @Inject constructor( + registry: ToolingModelBuilderRegistry +) : AbstractKotlinAndroidPluginWrapper(registry) { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +@Suppress("DEPRECATION_ERROR") +open class Kotlin2JsPluginWrapper @Inject constructor( + registry: ToolingModelBuilderRegistry +) : AbstractKotlin2JsPluginWrapper(registry) { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinMultiplatformPluginWrapper : AbstractKotlinMultiplatformPluginWrapper() { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinJsPluginWrapper : AbstractKotlinJsPluginWrapper() { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinPm20PluginWrapper @Inject constructor( + objectFactory: ObjectFactory +) : AbstractKotlinPm20PluginWrapper(objectFactory) { + + override val pluginVariant: String = PLUGIN_VARIANT_NAME + + override fun apply(project: Project) { + project.registerVariantImplementations() + super.apply(project) + } +} + +open class KotlinPlatformJvmPlugin : KotlinPlatformImplementationPluginBase("jvm") { + override fun apply(project: Project) { + project.applyPlugin() + super.apply(project) + } +} + +open class KotlinPlatformJsPlugin : KotlinPlatformImplementationPluginBase("js") { + override fun apply(project: Project) { + @Suppress("DEPRECATION_ERROR") + project.applyPlugin() + super.apply(project) + } +} + +open class KotlinPlatformAndroidPlugin : KotlinPlatformImplementationPluginBase("android") { + override fun apply(project: Project) { + project.applyPlugin() + super.apply(project) + } + + override fun namedSourceSetsContainer(project: Project): NamedDomainObjectContainer<*> = + (project.extensions.getByName("android") as BaseExtension).sourceSets + + override fun addCommonSourceSetToPlatformSourceSet(commonSourceSet: Named, platformProject: Project) { + val androidExtension = platformProject.extensions.getByName("android") as BaseExtension + val androidSourceSet = androidExtension.sourceSets.findByName(commonSourceSet.name) ?: return + val kotlinSourceSet = androidSourceSet.getExtension(KOTLIN_DSL_NAME) + ?: return + kotlinSourceSet.source(getKotlinSourceDirectorySetSafe(commonSourceSet)!!) + } +} + +open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { + override fun apply(project: Project) { + warnAboutKotlin12xMppDeprecation(project) + project.applyPlugin() + } +} + +@Suppress("UnusedReceiverParameter") +private fun Project.registerVariantImplementations() { + +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/JavaSourceSetsAccessorG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/JavaSourceSetsAccessorG6.kt index 2fc13cc0567..c05fe7ef3aa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/JavaSourceSetsAccessorG6.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/JavaSourceSetsAccessorG6.kt @@ -19,7 +19,7 @@ internal class JavaSourceSetsAccessorG6( override val sourceSetsIfAvailable: SourceSetContainer? get() = convention.findPlugin(JavaPluginConvention::class.java)?.sourceSets - internal class JavaSourceSetAccessorVariantFactoryG70 : JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory { + internal class JavaSourceSetAccessorVariantFactoryG6 : JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory { override fun getInstance(project: Project): JavaSourceSetsAccessor = JavaSourceSetsAccessorG6(project.convention) } }