[Gradle] Remove ':kotlin-gradle-plugin-kpm-android' module

KT-61463
This commit is contained in:
Sebastian Sellmair
2023-08-25 11:49:47 +02:00
committed by Space Team
parent d97e8ae456
commit e800885c03
15 changed files with 0 additions and 340 deletions
-1
View File
@@ -300,7 +300,6 @@
/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests/ "Kotlin Multiplatform"
/libraries/tools/kotlin-gradle-plugin-idea-proto/ "Kotlin Multiplatform"
/libraries/tools/kotlin-gradle-plugin-integration-tests/ "Kotlin Build Tools" "Kotlin Multiplatform"
/libraries/tools/kotlin-gradle-plugin-kpm-android/ "Kotlin Multiplatform"
/libraries/tools/kotlin-gradle-plugin-model/ "Kotlin Build Tools"
/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/ Ilya.Goncharov
/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable/ "Kotlin Build Tools"
-1
View File
@@ -408,7 +408,6 @@ val gradlePluginProjects = listOf(
":kotlin-gradle-plugin-annotations",
":kotlin-gradle-plugin-idea",
":kotlin-gradle-plugin-idea-proto",
":kotlin-gradle-plugin-kpm-android",
":kotlin-gradle-plugin-model",
":kotlin-gradle-plugin-tcs-android",
":kotlin-allopen",
@@ -1,28 +0,0 @@
plugins {
kotlin("jvm")
`java-gradle-plugin`
`maven-publish`
}
dependencies {
implementation(gradleKotlinDsl())
compileOnly("com.android.tools.build:gradle:7.0.0")
compileOnly(project(":kotlin-gradle-plugin"))
compileOnly(project(":kotlin-gradle-plugin-idea"))
}
gradlePlugin {
plugins {
create("kotlinAndroidKpmPlugin") {
id = "kotlin-kpm-android"
implementationClass = "org.jetbrains.kotlin.gradle.android.KotlinAndroidKpmPlugin"
}
}
}
/* This module is just for local development / prototyping and demos */
if (!kotlinBuildProperties.isTeamcityBuild) {
tasks.register("install") {
dependsOn(tasks.named("publishToMavenLocal"))
}
}
@@ -1,21 +0,0 @@
/*
* 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.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
import org.jetbrains.kotlin.tooling.core.extrasKeyOf
import java.io.File
import java.io.Serializable
internal val androidDslKey = extrasKeyOf<AndroidDsl>()
val GradleKpmFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
class AndroidDsl : Serializable {
var compileSdk = 0
var isMinifyEnabled: Boolean = false
var androidManifest: File? = null
}
@@ -1,16 +0,0 @@
/*
* 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.android
import com.android.build.gradle.BaseExtension
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.kotlin.dsl.getByType
import java.util.concurrent.Callable
internal fun Project.getAndroidRuntimeJars(): FileCollection {
return project.files(Callable { project.extensions.getByType<BaseExtension>().bootClasspath })
}
@@ -1,39 +0,0 @@
/*
* Copyright 2010-2021 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.
*/
@file:Suppress("DEPRECATION")
@file:OptIn(ExternalVariantApi::class)
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.idea.serialize.IdeaKotlinExtrasSerializer
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.external.ideaKpmProjectModelBuilder
import org.jetbrains.kotlin.gradle.kpm.external.project
import org.jetbrains.kotlin.gradle.kpm.idea.registerExtrasSerializationExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
fun KotlinPm20ProjectExtension.androidPrototype() {
project.extensions.findByType<AppExtension>()?.applicationVariants?.all { androidVariant ->
main { createKotlinAndroidVariant(androidVariant) }
test { createKotlinAndroidVariant(androidVariant.unitTestVariant ?: return@test) }
instrumentedTest { createKotlinAndroidVariant(androidVariant.testVariant ?: return@instrumentedTest) }
}
project.extensions.findByType<LibraryExtension>()?.libraryVariants?.all { androidVariant ->
main { createKotlinAndroidVariant(androidVariant) }
test { createKotlinAndroidVariant(androidVariant.unitTestVariant ?: return@test) }
instrumentedTest { createKotlinAndroidVariant(androidVariant.testVariant ?: return@instrumentedTest) }
}
setupIdeaKpmFragmentDependencyResolver()
ideaKpmProjectModelBuilder.registerExtrasSerializationExtension {
register(androidDslKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
}
}
@@ -1,91 +0,0 @@
/*
* 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.android
import com.android.build.gradle.internal.publishing.AndroidArtifacts
import org.gradle.api.attributes.Usage
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.external.project
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder.FragmentConstraint
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmResolvedBinaryDependencyImpl
import org.jetbrains.kotlin.gradle.kpm.idea.configureIdeaKpmSpecialPlatformDependencyResolution
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
val isAndroidFragment = FragmentConstraint { fragment ->
fragment.containingVariants.all { variant -> variant.androidDsl != null }
}
val isAndroidAndJvmSharedFragment = FragmentConstraint constraint@{ fragment ->
val variants = fragment.containingVariants
if (variants.any { it.platformType != KotlinPlatformType.jvm }) return@constraint false
variants.any { it.androidDsl != null } && variants.any { it.androidDsl == null }
}
@OptIn(ExternalVariantApi::class, InternalKotlinGradlePluginApi::class)
internal fun KotlinPm20ProjectExtension.setupIdeaKpmFragmentDependencyResolver() {
configureIdeaKpmSpecialPlatformDependencyResolution {
/*
Handle android + jvm use cases:
We do not yet support jvm based metadata compilations, therefore we do not
expect any reasonable results coming from metadata resolution.
We default to a 'KotlinPlatformType.jvm' resolution
*/
withConstraint(isAndroidAndJvmSharedFragment) {
withPlatformResolutionAttributes {
namedAttribute(Usage.USAGE_ATTRIBUTE, Usage.JAVA_API)
attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm)
}
artifactView(CLASSPATH_BINARY_TYPE)
}
withConstraint(isAndroidFragment) {
withPlatformResolutionAttributes {
namedAttribute(Usage.USAGE_ATTRIBUTE, Usage.JAVA_API)
attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
}
artifactView(CLASSPATH_BINARY_TYPE) {
attributes {
attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type)
}
}
artifactView("manifest") {
attributes {
attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.MANIFEST.type)
}
}
artifactView("resources") {
attributes {
attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.ANDROID_RES.type)
}
}
artifactView("android-symbol") {
attributes {
attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.COMPILE_SYMBOL_LIST.type)
}
}
additionalDependencies {
project.getAndroidRuntimeJars().map { androidRuntimeJar ->
IdeaKpmResolvedBinaryDependencyImpl(
binaryType = CLASSPATH_BINARY_TYPE,
binaryFile = androidRuntimeJar,
coordinates = null
)
}
}
}
}
}
@@ -1,17 +0,0 @@
/*
* Copyright 2010-2021 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.
*/
@file:Suppress("unused")
package org.jetbrains.kotlin.gradle.android
import org.gradle.api.Plugin
import org.gradle.api.Project
class KotlinAndroidKpmPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.logger.quiet("Applied Kotlin/Android KPM prototype. This is just a proof of concept implementation.")
}
}
@@ -1,91 +0,0 @@
/*
* Copyright 2010-2021 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.
*/
@file:Suppress("DEPRECATION")
@file:OptIn(ExternalVariantApi::class)
package org.jetbrains.kotlin.gradle.android
import com.android.build.api.attributes.BuildTypeAttr
import com.android.build.gradle.api.BaseVariant
import com.android.build.gradle.api.LibraryVariant
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.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.external.createExternalJvmVariant
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
fun GradleKpmModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
val androidOutgoingArtifacts = GradleKpmConfigurationArtifactsSetup<GradleKpmJvmVariant> {
variants.create("classes") { variant ->
variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type)
variant.artifact(project.provider { fragment.compilationOutputs.classesDirs.singleFile }) {
it.builtBy(fragment.compilationOutputs.classesDirs)
}
}
if (androidVariant is LibraryVariant) {
variants.create("aar") { variant ->
variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.AAR.type)
variant.artifact(androidVariant.packageLibraryProvider)
}
}
}
val androidElementsAttributes = GradleKpmConfigurationAttributesSetup<GradleKpmJvmVariant> {
attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(androidVariant.buildType.name))
attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, project.objects.named(TargetJvmEnvironment.ANDROID))
}
val kotlinVariant = createExternalJvmVariant(
"android${androidVariant.buildType.name.replaceFirstChar { it.uppercase() }}", GradleKpmJvmVariantConfig(
/* Only swap out configuration that is used. Default setup shall still be applied */
compileDependencies = (DefaultKotlinCompileDependenciesDefinition +
GradleKpmConfigurationAttributesSetup<GradleKpmFragment> {
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.ANDROID)
attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
})
.withConfigurationProvider { androidVariant.compileConfiguration },
/* Only swap out configuration that is used. Default setup shall still be applied */
runtimeDependencies = DefaultKotlinRuntimeDependenciesDefinition
.withConfigurationProvider { androidVariant.runtimeConfiguration },
/* Add android artifacts and attributes */
apiElements = DefaultKotlinApiElementsDefinition + androidElementsAttributes + androidOutgoingArtifacts,
/* Add android artifacts and attributes */
runtimeElements = DefaultKotlinRuntimeElementsDefinition + androidElementsAttributes + androidOutgoingArtifacts,
/* For now: Just publish 'release' (non-debuggable) variants */
publicationConfigurator = if (androidVariant.buildType.isDebuggable) GradleKpmPublicationConfigurator.NoPublication else
GradleKpmPublicationConfigurator.SingleVariantPublication
)
)
// "Disable" configurations from plain Android plugin
project.configurations.findByName("${androidVariant.name}ApiElements")?.isCanBeConsumed = false
project.configurations.findByName("${androidVariant.name}RuntimeElements")?.isCanBeConsumed = false
// TODO: Move this into configurator!
kotlinVariant.refines(androidCommon)
val mainBytecodeKey = androidVariant.registerPreJavacGeneratedBytecode(
kotlinVariant.compilationOutputs.classesDirs
)
kotlinVariant.compileDependencyFiles = project.files(
androidVariant.getCompileClasspath(mainBytecodeKey),
project.getAndroidRuntimeJars()
)
val androidDsl = AndroidDsl()
androidDsl.androidManifest = project.file("AndroidManifest.xml")
androidDsl.compileSdk = 23
kotlinVariant.extras[androidDslKey] = androidDsl
}
@@ -1,14 +0,0 @@
/*
* Copyright 2010-2021 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.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
val GradleKpmModule.androidCommon: GradleKpmFragmentInternal
get() = (fragments.findByName("androidCommon") ?: fragments.create("androidCommon") { fragment ->
fragment.refines(common)
}) as GradleKpmFragmentInternal
@@ -1,16 +0,0 @@
/*
* Copyright 2010-2021 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.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
val KotlinPm20ProjectExtension.instrumentedTest
get() = modules.maybeCreate("instrumentedTest")
fun KotlinPm20ProjectExtension.instrumentedTest(configure: GradleKpmModule.() -> Unit) {
instrumentedTest.apply(configure)
}
@@ -321,7 +321,6 @@ if (!kotlinBuildProperties.isInJpsBuildIdeaSync) {
implementation("com.android.tools.build:gradle-api:7.4.2")
compileOnly("com.android.tools:common:30.2.1")
implementation(gradleKotlinDsl())
implementation(project(":kotlin-gradle-plugin-kpm-android"))
implementation(project(":kotlin-gradle-plugin-tcs-android"))
implementation(project(":kotlin-tooling-metadata"))
implementation(project.dependencies.testFixtures(project(":kotlin-gradle-plugin-idea")))
@@ -38,7 +38,6 @@ class ArtifactsTest {
"org.jetbrains.kotlin.gradle-subplugin-example.gradle.plugin",
"gradle-warnings-detector",
"kotlin-compiler-args-properties",
"kotlin-gradle-plugin-kpm-android",
"kotlin-gradle-plugin-tcs-android",
"kotlin-gradle-subplugin-example",
"kotlin-java-example",
@@ -34,7 +34,6 @@ fun updateCompilerXml() {
"libraries/tools/kotlin-gradle-plugin-idea",
"libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests",
"libraries/tools/kotlin-gradle-plugin-integration-tests",
"libraries/tools/kotlin-gradle-plugin-kpm-android",
"libraries/tools/kotlin-gradle-plugin-tcs-android",
"libraries/tools/kotlin-gradle-plugin-model",
"libraries/tools/kotlin-gradle-plugin-npm-versions-codegen",
-2
View File
@@ -204,7 +204,6 @@ include ":kotlin-imports-dumper-compiler-plugin",
":kotlin-gradle-statistics",
":kotlin-gradle-build-metrics",
":kotlin-gradle-plugin",
":kotlin-gradle-plugin-kpm-android",
":kotlin-gradle-plugin-tcs-android",
":kotlin-gradle-plugin-model",
":kotlin-gradle-plugin-test-utils-embeddable",
@@ -751,7 +750,6 @@ project(':kotlin-gradle-plugin-npm-versions-codegen').projectDir = "$rootDir/lib
project(':kotlin-gradle-statistics').projectDir = "$rootDir/libraries/tools/kotlin-gradle-statistics" as File
project(':kotlin-gradle-build-metrics').projectDir = "$rootDir/libraries/tools/kotlin-gradle-build-metrics" as File
project(':kotlin-gradle-plugin').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin" as File
project(':kotlin-gradle-plugin-kpm-android').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-kpm-android" as File
project(':kotlin-gradle-plugin-tcs-android').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-tcs-android" as File
project(':kotlin-gradle-plugin-model').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-model" as File
project(':kotlin-gradle-plugin-test-utils-embeddable').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable" as File