[Gradle][Minor] Move KotlinAndroidPlugin into separate source file
KT-54312
This commit is contained in:
committed by
Space Team
parent
7725c8e200
commit
089e07827f
+93
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* 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 org.gradle.api.GradleException
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||||
|
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.applyUserDefinedAttributes
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.androidPluginIds
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
|
||||||
|
|
||||||
|
internal open class KotlinAndroidPlugin(
|
||||||
|
private val registry: ToolingModelBuilderRegistry
|
||||||
|
) : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
checkGradleCompatibility()
|
||||||
|
|
||||||
|
project.dynamicallyApplyWhenAndroidPluginIsApplied(
|
||||||
|
{
|
||||||
|
project.objects.newInstance(
|
||||||
|
KotlinAndroidTarget::class.java,
|
||||||
|
"",
|
||||||
|
project
|
||||||
|
).also {
|
||||||
|
(project.kotlinExtension as KotlinAndroidProjectExtension).target = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) { androidTarget ->
|
||||||
|
applyUserDefinedAttributes(androidTarget)
|
||||||
|
customizeKotlinDependencies(project)
|
||||||
|
registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget))
|
||||||
|
project.whenEvaluated { project.components.addAll(androidTarget.components) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(4, 1, 3)
|
||||||
|
fun androidTargetHandler(): AndroidProjectHandler {
|
||||||
|
val tasksProvider = KotlinTasksProvider()
|
||||||
|
val androidGradlePluginVersion = AndroidGradlePluginVersion.currentOrNull
|
||||||
|
|
||||||
|
if (androidGradlePluginVersion != null) {
|
||||||
|
if (androidGradlePluginVersion < minimalSupportedAgpVersion) {
|
||||||
|
throw IllegalStateException(
|
||||||
|
"Kotlin: Unsupported version of com.android.tools.build:gradle plugin: " +
|
||||||
|
"version $minimalSupportedAgpVersion or higher should be used with kotlin-android plugin"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return AndroidProjectHandler(KotlinConfigurationTools(tasksProvider))
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun Project.dynamicallyApplyWhenAndroidPluginIsApplied(
|
||||||
|
kotlinAndroidTargetProvider: () -> KotlinAndroidTarget,
|
||||||
|
additionalConfiguration: (KotlinAndroidTarget) -> Unit = {}
|
||||||
|
) {
|
||||||
|
var wasConfigured = false
|
||||||
|
|
||||||
|
androidPluginIds.forEach { pluginId ->
|
||||||
|
plugins.withId(pluginId) {
|
||||||
|
wasConfigured = true
|
||||||
|
val target = kotlinAndroidTargetProvider()
|
||||||
|
androidTargetHandler().configureTarget(target)
|
||||||
|
additionalConfiguration(target)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
afterEvaluate {
|
||||||
|
if (!wasConfigured) {
|
||||||
|
throw GradleException(
|
||||||
|
"""
|
||||||
|
|'kotlin-android' plugin requires one of the Android Gradle plugins.
|
||||||
|
|Please apply one of the following plugins to '${project.path}' project:
|
||||||
|
|${androidPluginIds.joinToString(prefix = "- ", separator = "\n\t- ")}
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
-75
@@ -9,8 +9,6 @@ import com.android.build.gradle.*
|
|||||||
import org.gradle.api.*
|
import org.gradle.api.*
|
||||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||||
import org.jetbrains.kotlin.gradle.dsl.*
|
import org.jetbrains.kotlin.gradle.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
|
||||||
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
||||||
@@ -80,79 +78,6 @@ internal open class KotlinPlugin(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal open class KotlinAndroidPlugin(
|
|
||||||
private val registry: ToolingModelBuilderRegistry
|
|
||||||
) : Plugin<Project> {
|
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
|
||||||
checkGradleCompatibility()
|
|
||||||
|
|
||||||
project.dynamicallyApplyWhenAndroidPluginIsApplied(
|
|
||||||
{
|
|
||||||
project.objects.newInstance(
|
|
||||||
KotlinAndroidTarget::class.java,
|
|
||||||
"",
|
|
||||||
project
|
|
||||||
).also {
|
|
||||||
(project.kotlinExtension as KotlinAndroidProjectExtension).target = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) { androidTarget ->
|
|
||||||
applyUserDefinedAttributes(androidTarget)
|
|
||||||
customizeKotlinDependencies(project)
|
|
||||||
registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget))
|
|
||||||
project.whenEvaluated { project.components.addAll(androidTarget.components) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(4, 1, 3)
|
|
||||||
fun androidTargetHandler(): AndroidProjectHandler {
|
|
||||||
val tasksProvider = KotlinTasksProvider()
|
|
||||||
val androidGradlePluginVersion = AndroidGradlePluginVersion.currentOrNull
|
|
||||||
|
|
||||||
if (androidGradlePluginVersion != null) {
|
|
||||||
if (androidGradlePluginVersion < minimalSupportedAgpVersion) {
|
|
||||||
throw IllegalStateException(
|
|
||||||
"Kotlin: Unsupported version of com.android.tools.build:gradle plugin: " +
|
|
||||||
"version $minimalSupportedAgpVersion or higher should be used with kotlin-android plugin"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return AndroidProjectHandler(KotlinConfigurationTools(tasksProvider))
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun Project.dynamicallyApplyWhenAndroidPluginIsApplied(
|
|
||||||
kotlinAndroidTargetProvider: () -> KotlinAndroidTarget,
|
|
||||||
additionalConfiguration: (KotlinAndroidTarget) -> Unit = {}
|
|
||||||
) {
|
|
||||||
var wasConfigured = false
|
|
||||||
|
|
||||||
androidPluginIds.forEach { pluginId ->
|
|
||||||
plugins.withId(pluginId) {
|
|
||||||
wasConfigured = true
|
|
||||||
val target = kotlinAndroidTargetProvider()
|
|
||||||
androidTargetHandler().configureTarget(target)
|
|
||||||
additionalConfiguration(target)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
if (!wasConfigured) {
|
|
||||||
throw GradleException(
|
|
||||||
"""
|
|
||||||
|'kotlin-android' plugin requires one of the Android Gradle plugins.
|
|
||||||
|Please apply one of the following plugins to '${project.path}' project:
|
|
||||||
|${androidPluginIds.joinToString(prefix = "- ", separator = "\n\t- ")}
|
|
||||||
""".trimMargin()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class KotlinConfigurationTools internal constructor(
|
class KotlinConfigurationTools internal constructor(
|
||||||
@Suppress("EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING", "EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR")
|
@Suppress("EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING", "EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR")
|
||||||
val kotlinTasksProvider: KotlinTasksProvider
|
val kotlinTasksProvider: KotlinTasksProvider
|
||||||
|
|||||||
Reference in New Issue
Block a user