[kpm] Replace KotlinExternalModelContainer with new Extras implementation

This newly introduced `Extras` shall present a more generic mechanism
of attaching data of a given type to any entity.
This commit is contained in:
sebastian.sellmair
2022-05-18 14:03:46 +02:00
committed by Space
parent c777ecd470
commit 4f4f749c08
33 changed files with 1098 additions and 614 deletions
@@ -3,17 +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.
*/
@file:OptIn(InternalKotlinGradlePluginApi::class)
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 org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.tooling.core.extrasKeyOf
import java.io.File
import java.io.Serializable
val androidDslKey = KotlinExternalModelKey<AndroidDsl>(KotlinExternalModelSerializer.serializable())
internal val androidDslKey = extrasKeyOf<AndroidDsl>()
val KotlinGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
class AndroidDsl : Serializable {
var compileSdk = 0
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.android
import com.android.build.gradle.internal.publishing.AndroidArtifacts
import org.gradle.api.attributes.Usage
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.external.external
import org.jetbrains.kotlin.gradle.kpm.external.project
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint
@@ -19,16 +18,14 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
@OptIn(ExternalVariantApi::class)
val isAndroidFragment = FragmentConstraint { fragment ->
fragment.containingVariants.all { variant -> androidDslKey in variant.external }
fragment.containingVariants.all { variant -> variant.androidDsl != null }
}
@OptIn(ExternalVariantApi::class)
val isAndroidAndJvmSharedFragment = FragmentConstraint constraint@{ fragment ->
val variants = fragment.containingVariants
if (variants.any { it.platformType != KotlinPlatformType.jvm }) return@constraint false
variants.any { androidDslKey in it.external } && variants.any { androidDslKey !in it.external }
variants.any { it.androidDsl != null } && variants.any { it.androidDsl == null }
}
@OptIn(ExternalVariantApi::class, InternalKotlinGradlePluginApi::class)
@@ -17,7 +17,6 @@ import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMEN
import org.gradle.kotlin.dsl.named
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.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
@@ -88,6 +87,5 @@ fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
val androidDsl = AndroidDsl()
androidDsl.androidManifest = project.file("AndroidManifest.xml")
androidDsl.compileSdk = 23
androidCommon.external[androidDslKey] = androidDsl
kotlinVariant.external[androidDslKey] = androidDsl
kotlinVariant.extras[androidDslKey] = androidDsl
}