Expose statically-typed kotlinOptions and compileKotlinTask in DSL

To simplify configuring a `KotlinCompilation` with Gradle Kotlin DSL, it
is essential to expose statically-known types where possible.

This commit parametrizes `KotlinCompilation` with its Kotlin options
type (a subtype of `KotlinCommonOptions`) and adds `kotlinOptions` and
`compileKotlinTask` to `KotlinCompilation`.

(minor) Also reduce the visibility of `attachClassesDir` and
`setupPlugins` to internal, since this API is not for external use.
This commit is contained in:
Sergey Igushkin
2018-11-12 17:02:36 +03:00
parent 1e2436b1c1
commit 581b161611
27 changed files with 157 additions and 114 deletions
@@ -9,9 +9,9 @@ import groovy.lang.Closure
import org.gradle.api.Action
import org.gradle.api.Named
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.SourceSetOutput
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
interface CInteropSettings: Named {
interface CInteropSettings : Named {
interface IncludeDirectories {
fun allHeaders(vararg includeDirs: Any)
@@ -22,7 +22,7 @@ interface CInteropSettings: Named {
}
// TODO: Provide an interface for native compilations.
val compilation: KotlinCompilation
val compilation: KotlinCompilation<KotlinCommonOptions>
val dependencyConfigurationName: String
var dependencyFiles: FileCollection
@@ -9,6 +9,9 @@ import org.gradle.api.Named
import org.gradle.api.attributes.HasAttributes
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import java.io.File
interface KotlinCompilationOutput {
@@ -19,7 +22,7 @@ interface KotlinCompilationOutput {
val allOutputs: FileCollection
}
interface KotlinCompilation: Named, HasAttributes, HasKotlinDependencies {
interface KotlinCompilation<out T : KotlinCommonOptions> : Named, HasAttributes, HasKotlinDependencies {
val target: KotlinTarget
val compilationName: String
@@ -36,6 +39,12 @@ interface KotlinCompilation: Named, HasAttributes, HasKotlinDependencies {
val compileKotlinTaskName: String
val compileKotlinTask: KotlinCompile<T>
val kotlinOptions: T
fun kotlinOptions(configure: T.() -> Unit)
val compileAllTaskName: String
companion object {
@@ -51,7 +60,7 @@ interface KotlinCompilation: Named, HasAttributes, HasKotlinDependencies {
get() = super.relatedConfigurationNames + compileDependencyConfigurationName
}
interface KotlinCompilationToRunnableFiles : KotlinCompilation {
interface KotlinCompilationToRunnableFiles<T : KotlinCommonOptions> : KotlinCompilation<T> {
val runtimeDependencyConfigurationName: String
var runtimeDependencyFiles: FileCollection
@@ -60,6 +69,6 @@ interface KotlinCompilationToRunnableFiles : KotlinCompilation {
get() = super.relatedConfigurationNames + runtimeDependencyConfigurationName
}
interface KotlinCompilationWithResources : KotlinCompilation {
interface KotlinCompilationWithResources<T : KotlinCommonOptions> : KotlinCompilation<T> {
val processResourcesTaskName: String
}
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project
import org.gradle.api.tasks.compile.AbstractCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import java.io.File
open class SubpluginOption(val key: String, val value: String)
@@ -56,7 +57,7 @@ interface KotlinGradleSubplugin<in KotlinCompile : AbstractCompile> {
javaCompile: AbstractCompile?,
variantData: Any?,
androidProjectHandler: Any?,
kotlinCompilation: KotlinCompilation?
kotlinCompilation: KotlinCompilation<KotlinCommonOptions>?
): List<SubpluginOption>
fun getSubpluginKotlinTasks(
@@ -14,19 +14,21 @@ import org.gradle.api.attributes.HasAttributes
import org.gradle.api.component.SoftwareComponent
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
interface KotlinTargetComponent : SoftwareComponent {
val target: KotlinTarget
val publishable: Boolean
}
interface KotlinTarget: Named, HasAttributes {
interface KotlinTarget : Named, HasAttributes {
val targetName: String
val disambiguationClassifier: String? get() = targetName
val platformType: KotlinPlatformType
val compilations: NamedDomainObjectContainer<out KotlinCompilation>
val compilations: NamedDomainObjectContainer<out KotlinCompilation<KotlinCommonOptions>>
val project: Project