refactor: Support creating AndroidProjectHandler from outside the plugin

This commit is contained in:
Sergey Igushkin
2018-12-25 16:12:57 +03:00
parent d35b20f764
commit a6b55cc5d7
2 changed files with 16 additions and 21 deletions
@@ -598,22 +598,16 @@ internal open class KotlinAndroidPlugin(
override fun apply(project: Project) { override fun apply(project: Project) {
val androidTarget = KotlinAndroidTarget("", project) val androidTarget = KotlinAndroidTarget("", project)
val tasksProvider = AndroidTasksProvider(androidTarget.targetName) applyToTarget(kotlinPluginVersion, androidTarget)
applyToTarget(
project, androidTarget, tasksProvider,
kotlinPluginVersion
)
registry.register(KotlinModelBuilder(kotlinPluginVersion, androidTarget)) registry.register(KotlinModelBuilder(kotlinPluginVersion, androidTarget))
} }
companion object { companion object {
fun applyToTarget( fun androidTargetHandler(
project: Project, kotlinPluginVersion: String,
kotlinTarget: KotlinAndroidTarget, androidTarget: KotlinAndroidTarget
tasksProvider: KotlinTasksProvider, ): AbstractAndroidProjectHandler<*> {
kotlinPluginVersion: String val tasksProvider = AndroidTasksProvider(androidTarget.targetName)
) {
val version = loadAndroidPluginVersion() val version = loadAndroidPluginVersion()
if (version != null) { if (version != null) {
@@ -630,7 +624,7 @@ internal open class KotlinAndroidPlugin(
val legacyVersionThreshold = "2.5.0" val legacyVersionThreshold = "2.5.0"
val variantProcessor = if (compareVersionNumbers(version, legacyVersionThreshold) < 0) { return if (compareVersionNumbers(version, legacyVersionThreshold) < 0) {
LegacyAndroidAndroidProjectHandler(kotlinTools) LegacyAndroidAndroidProjectHandler(kotlinTools)
} else { } else {
val android25ProjectHandlerClass = Class.forName("org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler") val android25ProjectHandlerClass = Class.forName("org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler")
@@ -639,8 +633,13 @@ internal open class KotlinAndroidPlugin(
} }
ctor.newInstance(kotlinTools) as AbstractAndroidProjectHandler<*> ctor.newInstance(kotlinTools) as AbstractAndroidProjectHandler<*>
} }
}
variantProcessor.handleProject(project, kotlinTarget) fun applyToTarget(
kotlinPluginVersion: String,
kotlinTarget: KotlinAndroidTarget
) {
androidTargetHandler(kotlinPluginVersion, kotlinTarget).configureTarget(kotlinTarget)
} }
} }
} }
@@ -682,7 +681,8 @@ abstract class AbstractAndroidProjectHandler<V>(private val kotlinConfigurationT
protected abstract fun wrapVariantDataForKapt(variantData: V): KaptVariantData<V> protected abstract fun wrapVariantDataForKapt(variantData: V): KaptVariantData<V>
fun handleProject(project: Project, kotlinAndroidTarget: KotlinAndroidTarget) { fun configureTarget(kotlinAndroidTarget: KotlinAndroidTarget) {
val project = kotlinAndroidTarget.project
val ext = project.extensions.getByName("android") as BaseExtension val ext = project.extensions.getByName("android") as BaseExtension
ext.sourceSets.all { sourceSet -> ext.sourceSets.all { sourceSet ->
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask
import org.jetbrains.kotlin.gradle.tasks.AndroidTasksProvider
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
@@ -185,11 +184,7 @@ class KotlinAndroidTargetPreset(
preset = this@KotlinAndroidTargetPreset preset = this@KotlinAndroidTargetPreset
} }
KotlinAndroidPlugin.applyToTarget( KotlinAndroidPlugin.applyToTarget(kotlinPluginVersion, result)
project, result, AndroidTasksProvider(name),
kotlinPluginVersion
)
return result return result
} }