[KPM] Only provide access to KotlinExternalModelContainer through ExternalVariantApi
KT-51262 KT-51220
This commit is contained in:
committed by
Space
parent
f1655e5f4e
commit
ee6957c9a0
-4
@@ -8,10 +8,6 @@ package org.jetbrains.kotlin.gradle.kpm
|
|||||||
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
interface KotlinHasExternalModel {
|
|
||||||
val external: KotlinExternalModelContainer
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class KotlinExternalModelContainer internal constructor() : Serializable {
|
abstract class KotlinExternalModelContainer internal constructor() : Serializable {
|
||||||
abstract operator fun <T : Any> contains(key: KotlinExternalModelKey<T>): Boolean
|
abstract operator fun <T : Any> contains(key: KotlinExternalModelKey<T>): Boolean
|
||||||
abstract operator fun <T : Any> get(key: KotlinExternalModelKey<T>): T?
|
abstract operator fun <T : Any> get(key: KotlinExternalModelKey<T>): T?
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ plugins {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(gradleKotlinDsl())
|
implementation(gradleKotlinDsl())
|
||||||
|
compileOnly("com.android.tools.build:gradle:7.0.0")
|
||||||
compileOnly(project(":kotlin-gradle-plugin"))
|
compileOnly(project(":kotlin-gradle-plugin"))
|
||||||
compileOnly(project(":kotlin-gradle-plugin-idea"))
|
compileOnly(project(":kotlin-gradle-plugin-idea"))
|
||||||
compileOnly("com.android.tools.build:gradle:7.0.0")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gradlePlugin {
|
gradlePlugin {
|
||||||
|
|||||||
+2
-1
@@ -8,12 +8,13 @@
|
|||||||
package org.jetbrains.kotlin.gradle.android
|
package org.jetbrains.kotlin.gradle.android
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelKey
|
import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelKey
|
||||||
|
import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelSerializer
|
||||||
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
|
|
||||||
internal val androidDslKey = KotlinExternalModelKey<AndroidDsl>()
|
internal val androidDslKey = KotlinExternalModelKey<AndroidDsl>(KotlinExternalModelSerializer.serializable())
|
||||||
|
|
||||||
class AndroidDsl : Serializable {
|
class AndroidDsl : Serializable {
|
||||||
var compileSdk = 0
|
var compileSdk = 0
|
||||||
|
|||||||
+2
-2
@@ -11,8 +11,8 @@ package org.jetbrains.kotlin.gradle.android
|
|||||||
import com.android.build.gradle.AppExtension
|
import com.android.build.gradle.AppExtension
|
||||||
import com.android.build.gradle.LibraryExtension
|
import com.android.build.gradle.LibraryExtension
|
||||||
import org.gradle.kotlin.dsl.findByType
|
import org.gradle.kotlin.dsl.findByType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi
|
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.project
|
import org.jetbrains.kotlin.gradle.kpm.external.project
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||||
|
|
||||||
fun KotlinPm20ProjectExtension.android() {
|
fun KotlinPm20ProjectExtension.android() {
|
||||||
|
|||||||
+3
-2
@@ -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
|
||||||
import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE
|
import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE
|
||||||
import org.gradle.kotlin.dsl.named
|
import org.gradle.kotlin.dsl.named
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi
|
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.external.createExternalJvmVariant
|
import org.jetbrains.kotlin.gradle.kpm.external.createExternalJvmVariant
|
||||||
|
import org.jetbrains.kotlin.gradle.kpm.external.external
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||||
|
|
||||||
fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ pill {
|
|||||||
kotlin.sourceSets.all {
|
kotlin.sourceSets.all {
|
||||||
languageSettings.optIn("kotlin.RequiresOptIn")
|
languageSettings.optIn("kotlin.RequiresOptIn")
|
||||||
languageSettings.optIn("org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalVariantApi")
|
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")
|
languageSettings.optIn("org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,6 +37,7 @@ dependencies {
|
|||||||
compileOnly(gradleKotlinDsl())
|
compileOnly(gradleKotlinDsl())
|
||||||
api(project(":kotlin-gradle-plugin-api"))
|
api(project(":kotlin-gradle-plugin-api"))
|
||||||
api(project(":kotlin-gradle-plugin-model"))
|
api(project(":kotlin-gradle-plugin-model"))
|
||||||
|
implementation(project(":kotlin-gradle-plugin-idea"))
|
||||||
compileOnly(project(":compiler"))
|
compileOnly(project(":compiler"))
|
||||||
compileOnly(project(":compiler:incremental-compilation-impl"))
|
compileOnly(project(":compiler:incremental-compilation-impl"))
|
||||||
compileOnly(project(":daemon-common"))
|
compileOnly(project(":daemon-common"))
|
||||||
@@ -57,7 +58,6 @@ dependencies {
|
|||||||
embedded(project(":kotlin-gradle-statistics"))
|
embedded(project(":kotlin-gradle-statistics"))
|
||||||
compileOnly(project(":kotlin-gradle-build-metrics"))
|
compileOnly(project(":kotlin-gradle-build-metrics"))
|
||||||
embedded(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.code.gson:gson"))
|
||||||
implementation(commonDependency("com.google.guava:guava"))
|
implementation(commonDependency("com.google.guava:guava"))
|
||||||
|
|||||||
+6
-5
@@ -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.
|
* 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.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.kpm.KotlinMutableExternalModelContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||||
import kotlin.annotation.AnnotationTarget.*
|
|
||||||
|
|
||||||
@RequiresOptIn("API is intended to build external Kotlin Targets.")
|
@RequiresOptIn("API is intended to build external Kotlin Targets.")
|
||||||
annotation class ExternalVariantApi
|
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
|
@ExternalVariantApi
|
||||||
val KotlinTopLevelExtension.project: Project
|
val KotlinTopLevelExtension.project: Project
|
||||||
get() = this.project
|
get() = this.project
|
||||||
@@ -33,3 +30,7 @@ fun KotlinGradleModule.createExternalJvmVariant(
|
|||||||
@ExternalVariantApi
|
@ExternalVariantApi
|
||||||
val KotlinGradleVariantInternal.compilationData
|
val KotlinGradleVariantInternal.compilationData
|
||||||
get() = this.compilationData
|
get() = this.compilationData
|
||||||
|
|
||||||
|
@ExternalVariantApi
|
||||||
|
val KotlinGradleFragment.external: KotlinMutableExternalModelContainer
|
||||||
|
get() = (this as KotlinGradleFragmentInternal).external
|
||||||
+2
-2
@@ -6,8 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer
|
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.KotlinGradleFragment
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentInternal
|
||||||
|
|
||||||
internal fun KotlinGradleFragment.toIdeaKotlinFragment(
|
internal fun KotlinGradleFragment.toIdeaKotlinFragment(
|
||||||
cache: MutableMap<KotlinGradleFragment, IdeaKotlinFragment> = mutableMapOf()
|
cache: MutableMap<KotlinGradleFragment, IdeaKotlinFragment> = mutableMapOf()
|
||||||
@@ -24,7 +24,7 @@ internal fun KotlinGradleFragment.toIdeaKotlinFragment(
|
|||||||
IdeaKotlinSourceDirectoryImpl(file)
|
IdeaKotlinSourceDirectoryImpl(file)
|
||||||
},
|
},
|
||||||
resourceDirectories = emptyList(),
|
resourceDirectories = emptyList(),
|
||||||
external = (this as? KotlinHasExternalModel)?.external ?: KotlinExternalModelContainer.Empty
|
external = (this as? KotlinGradleFragmentInternal)?.external ?: KotlinExternalModelContainer.Empty
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-11
@@ -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.
|
* 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
|
@RequiresOptIn("API is marked as advanced. Consultation with the Kotlin Team advised.")
|
||||||
|
annotation class AdvancedKotlinGradlePluginApi
|
||||||
|
|
||||||
interface ExternalModelContainer {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
interface MutableExternalModelContainer {
|
|
||||||
|
|
||||||
}
|
|
||||||
+2
-4
@@ -13,7 +13,6 @@ import org.gradle.api.provider.Provider
|
|||||||
import org.gradle.util.ConfigureUtil
|
import org.gradle.util.ConfigureUtil
|
||||||
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
|
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
|
||||||
import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer
|
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.kpm.KotlinMutableExternalModelContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
|
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
|
||||||
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
||||||
@@ -35,8 +34,7 @@ open class KotlinGradleFragmentInternal @Inject constructor(
|
|||||||
final override val fragmentName: String,
|
final override val fragmentName: String,
|
||||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations
|
dependencyConfigurations: KotlinFragmentDependencyConfigurations
|
||||||
) : KotlinGradleFragment,
|
) : KotlinGradleFragment,
|
||||||
KotlinFragmentDependencyConfigurations by dependencyConfigurations,
|
KotlinFragmentDependencyConfigurations by dependencyConfigurations {
|
||||||
KotlinHasExternalModel {
|
|
||||||
|
|
||||||
final override fun getName(): String = fragmentName
|
final override fun getName(): String = fragmentName
|
||||||
|
|
||||||
@@ -48,7 +46,7 @@ open class KotlinGradleFragmentInternal @Inject constructor(
|
|||||||
// FIXME check for consistency
|
// FIXME check for consistency
|
||||||
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
|
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
|
||||||
|
|
||||||
override val external: KotlinMutableExternalModelContainer = KotlinExternalModelContainer.mutable()
|
internal val external: KotlinMutableExternalModelContainer = KotlinExternalModelContainer.mutable()
|
||||||
|
|
||||||
override fun refines(other: KotlinGradleFragment) {
|
override fun refines(other: KotlinGradleFragment) {
|
||||||
checkCanRefine(other)
|
checkCanRefine(other)
|
||||||
|
|||||||
+2
-3
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Configuration
|
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
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
|
||||||
|
|
||||||
/* Internal abbreviation */
|
/* Internal abbreviation */
|
||||||
@@ -18,7 +17,7 @@ data class KotlinGradleFragmentConfigurationDefinition<in T : KotlinGradleFragme
|
|||||||
val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None,
|
val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None,
|
||||||
val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None,
|
val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None,
|
||||||
val relations: KotlinGradleFragmentConfigurationRelation = KotlinGradleFragmentConfigurationRelation.None,
|
val relations: KotlinGradleFragmentConfigurationRelation = KotlinGradleFragmentConfigurationRelation.None,
|
||||||
@property:AdvancedExternalVariantApi
|
@property:AdvancedKotlinGradlePluginApi
|
||||||
val capabilities: KotlinGradleFragmentConfigurationCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities.None,
|
val capabilities: KotlinGradleFragmentConfigurationCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities.None,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -50,6 +49,6 @@ operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinit
|
|||||||
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
|
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
|
||||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other)
|
KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other)
|
||||||
|
|
||||||
@AdvancedExternalVariantApi
|
@AdvancedKotlinGradlePluginApi
|
||||||
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentCapabilities<T>):
|
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentCapabilities<T>):
|
||||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(capabilities = capabilities + other)
|
KotlinGradleFragmentConfigurationDefinition<T> = copy(capabilities = capabilities + other)
|
||||||
|
|||||||
Reference in New Issue
Block a user