From ee6957c9a078a347bea3f4b980aab39d4d17d3f2 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Sun, 13 Feb 2022 20:11:55 +0100 Subject: [PATCH] [KPM] Only provide access to KotlinExternalModelContainer through `ExternalVariantApi` KT-51262 KT-51220 --- .../gradle/kpm/KotlinExternalModelContainer.kt | 4 ---- .../build.gradle.kts | 2 +- .../jetbrains/kotlin/gradle/android/AndroidDsl.kt | 3 ++- .../gradle/android/AndroidTargetExtension.kt | 4 ++-- .../gradle/android/KotlinAndroidVariantFactory.kt | 5 +++-- .../tools/kotlin-gradle-plugin/build.gradle.kts | 4 ++-- .../mpp => kpm}/external/ExternalVariantApi.kt | 11 ++++++----- .../gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt | 4 ++-- .../AdvancedKotlinGradlePluginApi.kt} | 14 +++----------- .../gradle/plugin/mpp/pm20/KotlinGradleFragment.kt | 6 ++---- .../KotlinGradleFragmentConfigurationDefinition.kt | 5 ++--- 11 files changed, 25 insertions(+), 37 deletions(-) rename libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/{plugin/mpp => kpm}/external/ExternalVariantApi.kt (76%) rename libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/{external/ExternalModelContainer.kt => pm20/AdvancedKotlinGradlePluginApi.kt} (53%) diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt index 5ea6a28131f..03ca4cd9d42 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt @@ -8,10 +8,6 @@ package org.jetbrains.kotlin.gradle.kpm import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi import java.io.Serializable -interface KotlinHasExternalModel { - val external: KotlinExternalModelContainer -} - abstract class KotlinExternalModelContainer internal constructor() : Serializable { abstract operator fun contains(key: KotlinExternalModelKey): Boolean abstract operator fun get(key: KotlinExternalModelKey): T? diff --git a/libraries/tools/kotlin-gradle-plugin-kpm-android/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-kpm-android/build.gradle.kts index b88351dd96b..a82edc9969a 100644 --- a/libraries/tools/kotlin-gradle-plugin-kpm-android/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-kpm-android/build.gradle.kts @@ -6,9 +6,9 @@ plugins { dependencies { implementation(gradleKotlinDsl()) + compileOnly("com.android.tools.build:gradle:7.0.0") compileOnly(project(":kotlin-gradle-plugin")) compileOnly(project(":kotlin-gradle-plugin-idea")) - compileOnly("com.android.tools.build:gradle:7.0.0") } gradlePlugin { diff --git a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidDsl.kt b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidDsl.kt index bcbf6fc7059..1b316f79ce2 100644 --- a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidDsl.kt @@ -8,12 +8,13 @@ package org.jetbrains.kotlin.gradle.android import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelKey +import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelSerializer import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi import java.io.File import java.io.Serializable -internal val androidDslKey = KotlinExternalModelKey() +internal val androidDslKey = KotlinExternalModelKey(KotlinExternalModelSerializer.serializable()) class AndroidDsl : Serializable { var compileSdk = 0 diff --git a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetExtension.kt b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetExtension.kt index c094a95a618..c9f25cf9125 100644 --- a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/AndroidTargetExtension.kt @@ -11,8 +11,8 @@ package org.jetbrains.kotlin.gradle.android import com.android.build.gradle.AppExtension import com.android.build.gradle.LibraryExtension import org.gradle.kotlin.dsl.findByType -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi -import org.jetbrains.kotlin.gradle.plugin.mpp.external.project +import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi +import org.jetbrains.kotlin.gradle.kpm.external.project import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension fun KotlinPm20ProjectExtension.android() { diff --git a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt index adf18f39b70..2c46a8f1b27 100644 --- a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt @@ -15,8 +15,9 @@ import com.android.build.gradle.internal.publishing.AndroidArtifacts import org.gradle.api.attributes.java.TargetJvmEnvironment import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE import org.gradle.kotlin.dsl.named -import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi -import org.jetbrains.kotlin.gradle.plugin.mpp.external.createExternalJvmVariant +import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi +import org.jetbrains.kotlin.gradle.kpm.external.createExternalJvmVariant +import org.jetbrains.kotlin.gradle.kpm.external.external import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) { diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 3bdc3c657ff..881a2a547e6 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -29,7 +29,7 @@ pill { kotlin.sourceSets.all { languageSettings.optIn("kotlin.RequiresOptIn") languageSettings.optIn("org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi") - languageSettings.optIn("org.jetbrains.kotlin.gradle.plugin.mpp.external.AdvancedExternalVariantApi") + languageSettings.optIn("org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AdvancedKotlinGradlePluginApi") languageSettings.optIn("org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi") } @@ -37,6 +37,7 @@ dependencies { compileOnly(gradleKotlinDsl()) api(project(":kotlin-gradle-plugin-api")) api(project(":kotlin-gradle-plugin-model")) + implementation(project(":kotlin-gradle-plugin-idea")) compileOnly(project(":compiler")) compileOnly(project(":compiler:incremental-compilation-impl")) compileOnly(project(":daemon-common")) @@ -57,7 +58,6 @@ dependencies { embedded(project(":kotlin-gradle-statistics")) compileOnly(project(":kotlin-gradle-build-metrics")) embedded(project(":kotlin-gradle-build-metrics")) - implementation(project(":kotlin-gradle-plugin-idea")) implementation(commonDependency("com.google.code.gson:gson")) implementation(commonDependency("com.google.guava:guava")) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalVariantApi.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/external/ExternalVariantApi.kt similarity index 76% rename from libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalVariantApi.kt rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/external/ExternalVariantApi.kt index 5a674d31cb0..80ada0fe5d5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalVariantApi.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/external/ExternalVariantApi.kt @@ -3,19 +3,16 @@ * 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.mpp.external +package org.jetbrains.kotlin.gradle.kpm.external import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension +import org.jetbrains.kotlin.gradle.kpm.KotlinMutableExternalModelContainer import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* -import kotlin.annotation.AnnotationTarget.* @RequiresOptIn("API is intended to build external Kotlin Targets.") annotation class ExternalVariantApi -@RequiresOptIn("API is intended to build external Kotlin Targets *and* is marked as advanced. Consultation with the Kotlin Team advised.") -annotation class AdvancedExternalVariantApi - @ExternalVariantApi val KotlinTopLevelExtension.project: Project get() = this.project @@ -33,3 +30,7 @@ fun KotlinGradleModule.createExternalJvmVariant( @ExternalVariantApi val KotlinGradleVariantInternal.compilationData get() = this.compilationData + +@ExternalVariantApi +val KotlinGradleFragment.external: KotlinMutableExternalModelContainer + get() = (this as KotlinGradleFragmentInternal).external diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt index 2e1272520dd..65109b679d2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer -import org.jetbrains.kotlin.gradle.kpm.KotlinHasExternalModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentInternal internal fun KotlinGradleFragment.toIdeaKotlinFragment( cache: MutableMap = mutableMapOf() @@ -24,7 +24,7 @@ internal fun KotlinGradleFragment.toIdeaKotlinFragment( IdeaKotlinSourceDirectoryImpl(file) }, resourceDirectories = emptyList(), - external = (this as? KotlinHasExternalModel)?.external ?: KotlinExternalModelContainer.Empty + external = (this as? KotlinGradleFragmentInternal)?.external ?: KotlinExternalModelContainer.Empty ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalModelContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/AdvancedKotlinGradlePluginApi.kt similarity index 53% rename from libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalModelContainer.kt rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/AdvancedKotlinGradlePluginApi.kt index d2504cec74c..0c7b09e1e4d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalModelContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/AdvancedKotlinGradlePluginApi.kt @@ -3,15 +3,7 @@ * 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.mpp.external +package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 -import kotlin.reflect.KType - - -interface ExternalModelContainer { - -} - -interface MutableExternalModelContainer { - -} +@RequiresOptIn("API is marked as advanced. Consultation with the Kotlin Team advised.") +annotation class AdvancedKotlinGradlePluginApi diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragment.kt index c1da76de502..4ac2b06a6eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragment.kt @@ -13,7 +13,6 @@ import org.gradle.api.provider.Provider import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer -import org.jetbrains.kotlin.gradle.kpm.KotlinHasExternalModel import org.jetbrains.kotlin.gradle.kpm.KotlinMutableExternalModelContainer import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder @@ -35,8 +34,7 @@ open class KotlinGradleFragmentInternal @Inject constructor( final override val fragmentName: String, dependencyConfigurations: KotlinFragmentDependencyConfigurations ) : KotlinGradleFragment, - KotlinFragmentDependencyConfigurations by dependencyConfigurations, - KotlinHasExternalModel { + KotlinFragmentDependencyConfigurations by dependencyConfigurations { final override fun getName(): String = fragmentName @@ -48,7 +46,7 @@ open class KotlinGradleFragmentInternal @Inject constructor( // FIXME check for consistency override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder() - override val external: KotlinMutableExternalModelContainer = KotlinExternalModelContainer.mutable() + internal val external: KotlinMutableExternalModelContainer = KotlinExternalModelContainer.mutable() override fun refines(other: KotlinGradleFragment) { checkCanRefine(other) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt index 67954231a51..4e8f7a36314 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 import org.gradle.api.Project import org.gradle.api.artifacts.Configuration -import org.jetbrains.kotlin.gradle.plugin.mpp.external.AdvancedExternalVariantApi import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation /* Internal abbreviation */ @@ -18,7 +17,7 @@ data class KotlinGradleFragmentConfigurationDefinition = KotlinGradleFragmentConfigurationAttributes.None, val artifacts: KotlinGradleFragmentConfigurationArtifacts = KotlinGradleFragmentConfigurationArtifacts.None, val relations: KotlinGradleFragmentConfigurationRelation = KotlinGradleFragmentConfigurationRelation.None, - @property:AdvancedExternalVariantApi + @property:AdvancedKotlinGradlePluginApi val capabilities: KotlinGradleFragmentConfigurationCapabilities = KotlinGradleFragmentConfigurationCapabilities.None, ) @@ -50,6 +49,6 @@ operator fun KotlinGradleFragmentConfigurationDefinit operator fun KotlinGradleFragmentConfigurationDefinition.plus(other: FragmentConfigurationRelation): KotlinGradleFragmentConfigurationDefinition = copy(relations = relations + other) -@AdvancedExternalVariantApi +@AdvancedKotlinGradlePluginApi operator fun KotlinGradleFragmentConfigurationDefinition.plus(other: FragmentCapabilities): KotlinGradleFragmentConfigurationDefinition = copy(capabilities = capabilities + other)