[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.tooling.provider.model.ToolingModelBuilderRegistry
|
||||
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.mpp.*
|
||||
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(
|
||||
@Suppress("EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING", "EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR")
|
||||
val kotlinTasksProvider: KotlinTasksProvider
|
||||
|
||||
Reference in New Issue
Block a user