Introduce tooling model for annotation based projects
Introduce Gradle models for plugins 'kotlin-allopen', 'kotlin-noarg' and 'kotlin-sam-with-receiver'. Corresponding model builders are registered in each one of those plugin main classes.
This commit is contained in:
committed by
Sergey Igushkin
parent
5671dbb929
commit
5a423e8dcd
+5
-1
@@ -23,12 +23,15 @@ import org.gradle.api.artifacts.ResolvedArtifact
|
||||
import org.gradle.api.internal.ConventionTask
|
||||
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.plugin.JetBrainsSubpluginArtifact
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
|
||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
|
||||
import org.jetbrains.kotlin.noarg.gradle.model.builder.NoArgModelBuilder
|
||||
import javax.inject.Inject
|
||||
|
||||
class NoArgGradleSubplugin : Plugin<Project> {
|
||||
class NoArgGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : Plugin<Project> {
|
||||
companion object {
|
||||
fun isEnabled(project: Project) = project.plugins.findPlugin(NoArgGradleSubplugin::class.java) != null
|
||||
|
||||
@@ -39,6 +42,7 @@ class NoArgGradleSubplugin : Plugin<Project> {
|
||||
|
||||
override fun apply(project: Project) {
|
||||
project.extensions.create("noArg", NoArgExtension::class.java)
|
||||
registry.register(NoArgModelBuilder())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+31
@@ -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.noarg.gradle.model.builder
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.tooling.provider.model.ToolingModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.model.NoArg
|
||||
import org.jetbrains.kotlin.noarg.gradle.NoArgExtension
|
||||
import org.jetbrains.kotlin.noarg.gradle.model.impl.NoArgImpl
|
||||
|
||||
/**
|
||||
* [ToolingModelBuilder] for [NoArg] models.
|
||||
* This model builder is registered for Kotlin No Arg sub-plugin.
|
||||
*/
|
||||
class NoArgModelBuilder : ToolingModelBuilder {
|
||||
|
||||
override fun canBuild(modelName: String): Boolean {
|
||||
return modelName == NoArg::class.java.name
|
||||
}
|
||||
|
||||
override fun buildAll(modelName: String, project: Project): Any? {
|
||||
if (modelName == NoArg::class.java.name) {
|
||||
val extension = project.extensions.getByType(NoArgExtension::class.java)
|
||||
return NoArgImpl(project.name, extension.myAnnotations, extension.myPresets, extension.invokeInitializers)
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* 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.noarg.gradle.model.impl
|
||||
|
||||
import org.jetbrains.kotlin.gradle.model.NoArg
|
||||
import java.io.Serializable
|
||||
|
||||
/**
|
||||
* Implementation of the [NoArg] interface.
|
||||
*/
|
||||
data class NoArgImpl(
|
||||
private val myName: String,
|
||||
private val myAnnotations: List<String>,
|
||||
private val myPresets: List<String>,
|
||||
private val myInvokeInitializers: Boolean
|
||||
) : NoArg, Serializable {
|
||||
|
||||
override fun getModelVersion(): Long {
|
||||
return serialVersionUID
|
||||
}
|
||||
|
||||
override fun getName(): String {
|
||||
return myName
|
||||
}
|
||||
|
||||
override fun getAnnotations(): List<String> {
|
||||
return myAnnotations
|
||||
}
|
||||
|
||||
override fun getPresets(): List<String> {
|
||||
return myPresets
|
||||
}
|
||||
|
||||
override fun isInvokeInitializers(): Boolean {
|
||||
return myInvokeInitializers
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val serialVersionUID = 1L
|
||||
}
|
||||
}
|
||||
+20
@@ -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.noarg.gradle.model.builder
|
||||
|
||||
import org.jetbrains.kotlin.gradle.model.NoArg
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
|
||||
class NoArgModelBuilderTest {
|
||||
@Test
|
||||
fun testCanBuild() {
|
||||
val modelBuilder = NoArgModelBuilder()
|
||||
assertTrue(modelBuilder.canBuild(NoArg::class.java.name))
|
||||
assertFalse(modelBuilder.canBuild("wrongModel"))
|
||||
}
|
||||
}
|
||||
+18
@@ -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.noarg.gradle.model.impl
|
||||
|
||||
import nl.jqno.equalsverifier.EqualsVerifier
|
||||
import nl.jqno.equalsverifier.Warning
|
||||
import org.junit.Test
|
||||
|
||||
class NoArgImplTest {
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun equals() {
|
||||
EqualsVerifier.forClass(NoArgImpl::class.java).suppress(Warning.NULL_FIELDS).verify()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user