Introduce tooling model for Android extensions plugin

Introduce Gradle models for plugins 'kotlin-android-extensions'.
This commit is contained in:
Lucas Smaira
2018-06-06 11:18:56 +01:00
committed by Sergey Igushkin
parent 5a423e8dcd
commit 3c88f761a6
8 changed files with 218 additions and 2 deletions
@@ -27,15 +27,18 @@ import org.gradle.api.Project
import org.gradle.api.UnknownDomainObjectException
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.model.builder.KotlinAndroidExtensionModelBuilder
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.w3c.dom.Document
import java.io.File
import javax.inject.Inject
import javax.xml.parsers.DocumentBuilderFactory
// Use apply plugin: 'kotlin-android-extensions' to enable Android Extensions in an Android project.
class AndroidExtensionsSubpluginIndicator : Plugin<Project> {
class AndroidExtensionsSubpluginIndicator @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : Plugin<Project> {
override fun apply(project: Project) {
val extension = project.extensions.create("androidExtensions", AndroidExtensionsExtension::class.java)
@@ -44,6 +47,8 @@ class AndroidExtensionsSubpluginIndicator : Plugin<Project> {
addAndroidExtensionsRuntimeIfNeeded(project)
}
}
registry.register(KotlinAndroidExtensionModelBuilder())
}
private fun addAndroidExtensionsRuntimeIfNeeded(project: Project) {
@@ -0,0 +1,31 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. 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.model.builder
import org.gradle.api.Project
import org.gradle.tooling.provider.model.ToolingModelBuilder
import org.jetbrains.kotlin.gradle.internal.AndroidExtensionsExtension
import org.jetbrains.kotlin.gradle.model.KotlinAndroidExtension
import org.jetbrains.kotlin.gradle.model.impl.KotlinAndroidExtensionImpl
/**
* [ToolingModelBuilder] for [KotlinAndroidExtension] models.
* This model builder is registered for Kapt Gradle sub-plugin.
*/
class KotlinAndroidExtensionModelBuilder : ToolingModelBuilder {
override fun canBuild(modelName: String): Boolean {
return modelName == KotlinAndroidExtension::class.java.name
}
override fun buildAll(modelName: String, project: Project): Any? {
if (modelName == KotlinAndroidExtension::class.java.name) {
val extension = project.extensions.getByType(AndroidExtensionsExtension::class.java)
return KotlinAndroidExtensionImpl(project.name, extension.isExperimental, extension.defaultCacheImplementation.optionName)
}
return null
}
}
@@ -0,0 +1,39 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. 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.model.impl
import org.jetbrains.kotlin.gradle.model.KotlinAndroidExtension
import java.io.Serializable
/**
* Implementation of the [KotlinAndroidExtension] interface.
*/
data class KotlinAndroidExtensionImpl(
private val myName: String,
private val myIsExperimental: Boolean,
private val myDefaultCacheImplementation: String?
) : KotlinAndroidExtension, Serializable {
override fun getModelVersion(): Long {
return serialVersionUID
}
override fun getName(): String {
return myName
}
override fun isExperimental(): Boolean {
return myIsExperimental
}
override fun getDefaultCacheImplementation(): String? {
return myDefaultCacheImplementation
}
companion object {
private const val serialVersionUID = 1L
}
}
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. 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.model.builder
import org.jetbrains.kotlin.gradle.model.KotlinAndroidExtension
import org.junit.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class KotlinAndroidExtensionModelBuilderTest {
@Test
fun testCanBuild() {
val modelBuilder = KotlinAndroidExtensionModelBuilder()
assertTrue(modelBuilder.canBuild(KotlinAndroidExtension::class.java.name))
assertFalse(modelBuilder.canBuild("wrongModel"))
}
}
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. 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.model.impl
import nl.jqno.equalsverifier.EqualsVerifier
import nl.jqno.equalsverifier.Warning
import org.junit.Test
class KotlinAndroidExtensionImplTest {
@Test
@Throws(Exception::class)
fun equals() {
EqualsVerifier.forClass(KotlinAndroidExtensionImpl::class.java).suppress(Warning.NULL_FIELDS).verify()
}
}