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) {
val androidTarget = KotlinAndroidTarget("", project)
val tasksProvider = AndroidTasksProvider(androidTarget.targetName)
applyToTarget(
project, androidTarget, tasksProvider,
kotlinPluginVersion
)
applyToTarget(kotlinPluginVersion, androidTarget)
registry.register(KotlinModelBuilder(kotlinPluginVersion, androidTarget))
}
companion object {
fun applyToTarget(
project: Project,
kotlinTarget: KotlinAndroidTarget,
tasksProvider: KotlinTasksProvider,
kotlinPluginVersion: String
) {
fun androidTargetHandler(
kotlinPluginVersion: String,
androidTarget: KotlinAndroidTarget
): AbstractAndroidProjectHandler<*> {
val tasksProvider = AndroidTasksProvider(androidTarget.targetName)
val version = loadAndroidPluginVersion()
if (version != null) {
@@ -630,7 +624,7 @@ internal open class KotlinAndroidPlugin(
val legacyVersionThreshold = "2.5.0"
val variantProcessor = if (compareVersionNumbers(version, legacyVersionThreshold) < 0) {
return if (compareVersionNumbers(version, legacyVersionThreshold) < 0) {
LegacyAndroidAndroidProjectHandler(kotlinTools)
} else {
val android25ProjectHandlerClass = Class.forName("org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler")
@@ -639,8 +633,13 @@ internal open class KotlinAndroidPlugin(
}
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>
fun handleProject(project: Project, kotlinAndroidTarget: KotlinAndroidTarget) {
fun configureTarget(kotlinAndroidTarget: KotlinAndroidTarget) {
val project = kotlinAndroidTarget.project
val ext = project.extensions.getByName("android") as BaseExtension
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.plugin.*
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.utils.NativeCompilerDownloader
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
@@ -185,11 +184,7 @@ class KotlinAndroidTargetPreset(
preset = this@KotlinAndroidTargetPreset
}
KotlinAndroidPlugin.applyToTarget(
project, result, AndroidTasksProvider(name),
kotlinPluginVersion
)
KotlinAndroidPlugin.applyToTarget(kotlinPluginVersion, result)
return result
}