diff --git a/libraries/examples/kotlin-gradle-subplugin-example/src/main/kotlin/example/ExampleSubplugin.kt b/libraries/examples/kotlin-gradle-subplugin-example/src/main/kotlin/example/ExampleSubplugin.kt index 0034f23984c..f166c651fe3 100644 --- a/libraries/examples/kotlin-gradle-subplugin-example/src/main/kotlin/example/ExampleSubplugin.kt +++ b/libraries/examples/kotlin-gradle-subplugin-example/src/main/kotlin/example/ExampleSubplugin.kt @@ -32,7 +32,7 @@ class ExampleSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { println("ExampleSubplugin loaded") return listOf(SubpluginOption("exampleKey", "exampleValue")) diff --git a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt index 1f300124674..086de0868be 100644 --- a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt +++ b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt @@ -55,7 +55,7 @@ class AllOpenKotlinGradleSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { if (!AllOpenGradleSubplugin.isEnabled(project)) return emptyList() diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CinteropSettings.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CinteropSettings.kt index 5988983fc22..690066d61ac 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CinteropSettings.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CinteropSettings.kt @@ -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 val dependencyConfigurationName: String var dependencyFiles: FileCollection diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt index 97a0c449510..f3e0cb5bda4 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt @@ -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 : Named, HasAttributes, HasKotlinDependencies { val target: KotlinTarget val compilationName: String @@ -36,6 +39,12 @@ interface KotlinCompilation: Named, HasAttributes, HasKotlinDependencies { val compileKotlinTaskName: String + val compileKotlinTask: KotlinCompile + + 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 : KotlinCompilation { val runtimeDependencyConfigurationName: String var runtimeDependencyFiles: FileCollection @@ -60,6 +69,6 @@ interface KotlinCompilationToRunnableFiles : KotlinCompilation { get() = super.relatedConfigurationNames + runtimeDependencyConfigurationName } -interface KotlinCompilationWithResources : KotlinCompilation { +interface KotlinCompilationWithResources : KotlinCompilation { val processResourcesTaskName: String } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt index 379fb3d5f4d..796f07f5078 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt @@ -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 { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation? ): List fun getSubpluginKotlinTasks( diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt index bf6ca28a211..a81f66c65bf 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt @@ -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 + val compilations: NamedDomainObjectContainer> val project: Project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index a97d5660710..571ff24f98d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -47,7 +47,8 @@ open class KotlinProjectExtension { } open class KotlinSingleJavaTargetExtension : KotlinProjectExtension() { - internal lateinit var target: KotlinWithJavaTarget + // TODO define subtypes with proper type arguments for each of the option types once the new model is available in old projects + internal lateinit var target: KotlinWithJavaTarget<*> } open class KotlinJvmProjectExtension : KotlinSingleJavaTargetExtension() { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt index 447761fbf20..8878526b4b9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt @@ -105,7 +105,7 @@ class AndroidSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { val androidExtension = project.extensions.getByName("android") as? BaseExtension ?: return emptyList() val androidExtensionsExtension = project.extensions.getByType(AndroidExtensionsExtension::class.java) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index b6e2278b82d..666e90b9a3c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -165,7 +165,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val javaCompile: AbstractCompile?, val kaptVariantData: KaptVariantData<*>?, val sourceSetName: String, - val kotlinCompilation: KotlinCompilation?, + val kotlinCompilation: KotlinCompilation<*>?, val kaptExtension: KaptExtension, val kaptClasspathConfigurations: List ) { @@ -180,7 +180,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { assert((variantData != null) xor (kotlinCompilation != null)) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt index e01065944a0..e39700dea70 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt @@ -50,14 +50,14 @@ class KotlinJsDcePlugin : Plugin { } } - private fun processCompilation(project: Project, kotlinCompilation: KotlinCompilation) { + private fun processCompilation(project: Project, kotlinCompilation: KotlinCompilation<*>) { val kotlinTaskName = kotlinCompilation.compileKotlinTaskName val kotlinTask = project.tasks.findByName(kotlinTaskName) as? Kotlin2JsCompile ?: return val dceTaskName = lowerCamelCaseName( DCE_TASK_PREFIX, kotlinCompilation.target.disambiguationClassifier, kotlinCompilation.name.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - if (kotlinCompilation.target is KotlinWithJavaTarget) TASK_SUFFIX else MPP_TASK_SUFFIX + if (kotlinCompilation.target is KotlinWithJavaTarget<*>) TASK_SUFFIX else MPP_TASK_SUFFIX ) val dceTask = project.tasks.create(dceTaskName, KotlinJsDce::class.java).also { it.dependsOn(kotlinTask) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 376b879b419..62176aae255 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -21,6 +21,7 @@ import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.gradle.jvm.tasks.Jar import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl import org.jetbrains.kotlin.gradle.dsl.KotlinSingleJavaTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension @@ -50,7 +51,7 @@ internal abstract class KotlinSourceSetProcessor>( val project: Project, val tasksProvider: KotlinTasksProvider, val taskDescription: String, - val kotlinCompilation: KotlinCompilation + val kotlinCompilation: KotlinCompilation<*> ) { protected abstract fun doTargetSpecificProcessing() protected val logger = Logging.getLogger(this.javaClass)!! @@ -63,7 +64,7 @@ internal abstract class KotlinSourceSetProcessor>( protected val kotlinTask: T = createKotlinCompileTask() - protected val javaSourceSet: SourceSet? = (kotlinCompilation as? KotlinWithJavaCompilation)?.javaSourceSet + protected val javaSourceSet: SourceSet? = (kotlinCompilation as? KotlinWithJavaCompilation<*>)?.javaSourceSet protected open val defaultKotlinDestinationDir: File get() { @@ -95,7 +96,7 @@ internal abstract class KotlinSourceSetProcessor>( addKotlinDirectoriesToJavaSourceSet() doTargetSpecificProcessing() - if (kotlinCompilation is KotlinWithJavaCompilation) { + if (kotlinCompilation is KotlinWithJavaCompilation<*>) { createAdditionalClassesTaskForIdeRunner() } } @@ -147,7 +148,7 @@ internal abstract class KotlinSourceSetProcessor>( internal class Kotlin2JvmSourceSetProcessor( project: Project, tasksProvider: KotlinTasksProvider, - kotlinCompilation: KotlinCompilation, + kotlinCompilation: KotlinCompilation<*>, private val kotlinPluginVersion: String ) : KotlinSourceSetProcessor( project, tasksProvider, "Compiles the $kotlinCompilation.", kotlinCompilation @@ -242,7 +243,7 @@ internal fun KotlinCompilationOutput.tryAddClassesDir( internal class Kotlin2JsSourceSetProcessor( project: Project, tasksProvider: KotlinTasksProvider, - kotlinCompilation: KotlinCompilation, + kotlinCompilation: KotlinCompilation<*>, private val kotlinPluginVersion: String ) : KotlinSourceSetProcessor( project, tasksProvider, taskDescription = "Compiles the Kotlin sources in $kotlinCompilation to JavaScript.", @@ -256,7 +257,7 @@ internal class Kotlin2JsSourceSetProcessor( createCleanSourceMapTask() - if (kotlinCompilation is KotlinWithJavaCompilation) { + if (kotlinCompilation is KotlinWithJavaCompilation<*>) { kotlinCompilation.javaSourceSet.clearJavaSrcDirs() } @@ -280,7 +281,7 @@ internal class Kotlin2JsSourceSetProcessor( kotlinTask.destinationDir = outputDir - if (!isSeparateClassesDirSupported && kotlinCompilation is KotlinWithJavaCompilation) { + if (!isSeparateClassesDirSupported && kotlinCompilation is KotlinWithJavaCompilation<*>) { kotlinCompilation.javaSourceSet.output.setClassesDirCompatible(kotlinTask.destinationDir) } @@ -303,7 +304,7 @@ internal class Kotlin2JsSourceSetProcessor( internal class KotlinCommonSourceSetProcessor( project: Project, - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, tasksProvider: KotlinTasksProvider, private val kotlinPluginVersion: String ) : KotlinSourceSetProcessor( @@ -340,7 +341,7 @@ internal abstract class AbstractKotlinPlugin( internal abstract fun buildSourceSetProcessor( project: Project, - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, kotlinPluginVersion: String ): KotlinSourceSetProcessor<*> @@ -366,8 +367,8 @@ internal abstract class AbstractKotlinPlugin( } fun configureTarget( - target: KotlinWithJavaTarget, - buildSourceSetProcessor: (KotlinCompilation) -> KotlinSourceSetProcessor<*> + target: KotlinWithJavaTarget<*>, + buildSourceSetProcessor: (KotlinCompilation<*>) -> KotlinSourceSetProcessor<*> ) { setUpJavaSourceSets(target) configureSourceSetDefaults(target, buildSourceSetProcessor) @@ -393,7 +394,7 @@ internal abstract class AbstractKotlinPlugin( } private fun setUpJavaSourceSets( - kotlinTarget: KotlinWithJavaTarget + kotlinTarget: KotlinWithJavaTarget<*> ) { val project = kotlinTarget.project val javaSourceSets = project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets @@ -404,7 +405,7 @@ internal abstract class AbstractKotlinPlugin( } // Workaround for indirect mutual recursion between the two `all { ... }` handlers: - val compilationsUnderConstruction = mutableMapOf() + val compilationsUnderConstruction = mutableMapOf>() javaSourceSets.all { javaSourceSet -> val kotlinCompilation = @@ -428,7 +429,7 @@ internal abstract class AbstractKotlinPlugin( } private fun configureAttributes( - kotlinTarget: KotlinWithJavaTarget + kotlinTarget: KotlinWithJavaTarget<*> ) { val project = kotlinTarget.project @@ -460,7 +461,7 @@ internal abstract class AbstractKotlinPlugin( private fun configureSourceSetDefaults( kotlinTarget: KotlinTarget, - buildSourceSetProcessor: (KotlinCompilation) -> KotlinSourceSetProcessor<*> + buildSourceSetProcessor: (KotlinCompilation<*>) -> KotlinSourceSetProcessor<*> ) { kotlinTarget.compilations.all { compilation -> buildSourceSetProcessor(compilation).run() @@ -498,11 +499,11 @@ internal open class KotlinPlugin( private const val targetName = "" // use empty suffix for the task names } - override fun buildSourceSetProcessor(project: Project, compilation: KotlinCompilation, kotlinPluginVersion: String) = + override fun buildSourceSetProcessor(project: Project, compilation: KotlinCompilation<*>, kotlinPluginVersion: String) = Kotlin2JvmSourceSetProcessor(project, tasksProvider, compilation, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, targetName).apply { + val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, targetName).apply { disambiguationClassifier = null // don't add anything to the task names } (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target @@ -523,13 +524,13 @@ internal open class KotlinCommonPlugin( override fun buildSourceSetProcessor( project: Project, - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, kotlinPluginVersion: String ): KotlinSourceSetProcessor<*> = KotlinCommonSourceSetProcessor(project, compilation, tasksProvider, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.common, targetName) + val target = KotlinWithJavaTarget(project, KotlinPlatformType.common, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) @@ -547,7 +548,7 @@ internal open class Kotlin2JsPlugin( override fun buildSourceSetProcessor( project: Project, - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, kotlinPluginVersion: String ): KotlinSourceSetProcessor<*> = Kotlin2JsSourceSetProcessor( @@ -555,7 +556,7 @@ internal open class Kotlin2JsPlugin( ) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.js, targetName) + val target = KotlinWithJavaTarget(project, KotlinPlatformType.js, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) @@ -759,7 +760,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT private fun applySubplugins( project: Project, - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, variantData: V, subpluginEnvironment: SubpluginEnvironment ) { @@ -774,7 +775,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT .forEach { configureSources(it, variantData, null) } } - private fun configureSources(compileTask: AbstractCompile, variantData: V, compilation: KotlinCompilation?) { + private fun configureSources(compileTask: AbstractCompile, variantData: V, compilation: KotlinCompilation<*>?) { val logger = compileTask.project.logger for (provider in getSourceProviders(variantData)) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index c6d94c41853..0b38032ab39 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -61,7 +61,7 @@ abstract class AbstractKotlinTargetConfigurator abstract fun configureArchivesAndComponent(target: KotlinTargetType) - private fun Project.registerOutputsForStaleOutputCleanup(kotlinCompilation: KotlinCompilation) { + private fun Project.registerOutputsForStaleOutputCleanup(kotlinCompilation: KotlinCompilation<*>) { val cleanTask = tasks.getByName(LifecycleBasePlugin.CLEAN_TASK_NAME) as Delete cleanTask.delete(kotlinCompilation.output.allOutputs) } @@ -133,7 +133,7 @@ abstract class AbstractKotlinTargetConfigurator } protected fun configureResourceProcessing( - compilation: KotlinCompilationWithResources, + compilation: KotlinCompilationWithResources<*>, resourceSet: FileCollection ) { val project = compilation.target.project @@ -144,7 +144,7 @@ abstract class AbstractKotlinTargetConfigurator resourcesTask.from(resourceSet) } - protected fun createLifecycleTask(compilation: KotlinCompilation) { + protected fun createLifecycleTask(compilation: KotlinCompilation<*>) { val project = compilation.target.project compilation.output.classesDirs.from(project.files().builtBy(compilation.compileAllTaskName)) @@ -189,7 +189,7 @@ abstract class AbstractKotlinTargetConfigurator usesPlatformOf(target) } - if (mainCompilation is KotlinCompilationToRunnableFiles) { + if (mainCompilation is KotlinCompilationToRunnableFiles<*>) { val runtimeElementsConfiguration = configurations.maybeCreate(target.runtimeElementsConfigurationName).apply { description = "Elements of runtime for main." isVisible = false @@ -248,7 +248,7 @@ abstract class AbstractKotlinTargetConfigurator const val testTaskNameSuffix = "test" fun defineConfigurationsForCompilation( - compilation: KotlinCompilation, + compilation: KotlinCompilation<*>, target: KotlinTarget, configurations: ConfigurationContainer ) { @@ -322,13 +322,13 @@ abstract class AbstractKotlinTargetConfigurator } } -internal val KotlinCompilation.deprecatedCompileConfigurationName: String +internal val KotlinCompilation<*>.deprecatedCompileConfigurationName: String get() = disambiguateName("compile") -internal val KotlinCompilationToRunnableFiles.deprecatedRuntimeConfigurationName: String +internal val KotlinCompilationToRunnableFiles<*>.deprecatedRuntimeConfigurationName: String get() = disambiguateName("runtime") -open class KotlinTargetConfigurator( +open class KotlinTargetConfigurator>( createDefaultSourceSets: Boolean, createTestCompilation: Boolean ) : AbstractKotlinTargetConfigurator>( @@ -359,7 +359,7 @@ open class KotlinTargetConfigurator( addJar(apiElementsConfiguration, jarArtifact) - if (mainCompilation is KotlinCompilationToRunnableFiles) { + if (mainCompilation is KotlinCompilationToRunnableFiles<*>) { val runtimeConfiguration = project.configurations.getByName(mainCompilation.deprecatedRuntimeConfigurationName) val runtimeElementsConfiguration = project.configurations.getByName(target.runtimeElementsConfigurationName) addJar(runtimeConfiguration, jarArtifact) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ProjectLocalConfigurations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ProjectLocalConfigurations.kt index bbeeafdc698..ccb08b90f08 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ProjectLocalConfigurations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ProjectLocalConfigurations.kt @@ -43,7 +43,7 @@ internal fun Configuration.setupAsLocalTargetSpecificConfigurationIfSupported(ta // don't setup in old MPP common modules, as their output configurations with KotlinPlatformType attribute would // fail to resolve as transitive dependencies of the platform modules, just as we don't mark their // `api/RuntimeElements` with the KotlinPlatformType - (target !is KotlinWithJavaTarget || target.platformType != KotlinPlatformType.common) + (target !is KotlinWithJavaTarget<*> || target.platformType != KotlinPlatformType.common) ) { usesPlatformOf(target) attributes.attribute(ProjectLocalConfigurations.ATTRIBUTE, target.project.path) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt index 3a7102e1a60..e90a0958fff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt @@ -46,7 +46,7 @@ class SubpluginEnvironment( javaTask: AbstractCompile? = null, variantData: Any? = null, androidProjectHandler: AbstractAndroidProjectHandler? = null, - kotlinCompilation: KotlinCompilation? = null + kotlinCompilation: KotlinCompilation<*>? = null ): List>> = addSubpluginOptions( project, kotlinTask, @@ -64,7 +64,7 @@ class SubpluginEnvironment( javaTask: AbstractCompile? = null, variantData: Any? = null, androidProjectHandler: AbstractAndroidProjectHandler? = null, - kotlinCompilation: KotlinCompilation? = null + kotlinCompilation: KotlinCompilation<*>? = null ): List>> { val appliedSubplugins = subplugins.filter { it.isApplicable(project, kotlinTask) } for (subplugin in appliedSubplugins) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCompilationFactory.kt index 971a8791bff..92fa2cb0c64 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCompilationFactory.kt @@ -8,9 +8,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.NamedDomainObjectFactory import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -interface KotlinCompilationFactory : NamedDomainObjectFactory { +interface KotlinCompilationFactory> : NamedDomainObjectFactory { val itemClass: Class } @@ -34,15 +35,16 @@ class KotlinJvmCompilationFactory( KotlinJvmCompilation(target, name) } -class KotlinWithJavaCompilationFactory( +class KotlinWithJavaCompilationFactory( val project: Project, - val target: KotlinWithJavaTarget -) : KotlinCompilationFactory { + val target: KotlinWithJavaTarget +) : KotlinCompilationFactory> { - override val itemClass: Class - get() = KotlinWithJavaCompilation::class.java + override val itemClass: Class> + @Suppress("UNCHECKED_CAST") + get() = KotlinWithJavaCompilation::class.java as Class> - override fun create(name: String): KotlinWithJavaCompilation { + override fun create(name: String): KotlinWithJavaCompilation { val result = KotlinWithJavaCompilation(target, name) return result } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 8556d5af0a7..d6ce628ad61 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import groovy.lang.Closure -import org.gradle.api.NamedDomainObjectCollection import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.attributes.Attribute @@ -24,6 +23,7 @@ import org.gradle.internal.reflect.Instantiator import org.gradle.jvm.tasks.Jar import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.configureOrCreate import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder @@ -42,17 +42,13 @@ class KotlinMultiplatformPlugin( private val featurePreviews: FeaturePreviews // TODO get rid of this internal API usage once we don't need it ) : Plugin { - private class TargetFromPresetExtension(val targetsContainer: NamedDomainObjectCollection) { + private class TargetFromPresetExtension(val targetsContainer: KotlinTargetsContainerWithPresets) { fun fromPreset(preset: KotlinTargetPreset, name: String, configureClosure: Closure<*>): T = - fromPreset(preset, name, { ConfigureUtil.configure(configureClosure, this) }) + fromPreset(preset, name) { ConfigureUtil.configure(configureClosure, this) } @JvmOverloads - fun fromPreset(preset: KotlinTargetPreset, name: String, configureAction: T.() -> Unit = { }): T { - val target = preset.createTarget(name) - targetsContainer.add(target) - target.run(configureAction) - return target - } + fun fromPreset(preset: KotlinTargetPreset, name: String, configureAction: T.() -> Unit = { }): T = + targetsContainer.configureOrCreate(name, preset, configureAction) } override fun apply(project: Project) { @@ -60,9 +56,10 @@ class KotlinMultiplatformPlugin( SingleWarningPerBuild.show(project, "Kotlin Multiplatform Projects are an experimental feature.") val targetsContainer = project.container(KotlinTarget::class.java) - val targetsFromPreset = TargetFromPresetExtension(targetsContainer) + val kotlinMultiplatformExtension = project.extensions.getByType(KotlinMultiplatformExtension::class.java) + val targetsFromPreset = TargetFromPresetExtension(kotlinMultiplatformExtension) - project.extensions.getByType(KotlinMultiplatformExtension::class.java).apply { + kotlinMultiplatformExtension.apply { DslObject(targetsContainer).addConvention("fromPreset", targetsFromPreset) targets = targetsContainer @@ -302,8 +299,8 @@ class KotlinMultiplatformPlugin( internal val KotlinTarget.defaultArtifactId get() = "${project.name}-${name.toLowerCase()}" -internal fun compilationsBySourceSet(project: Project): Map> = - HashMap>().also { result -> +internal fun compilationsBySourceSet(project: Project): Map>> = + HashMap>>().also { result -> for (target in project.multiplatformExtension!!.targets) { for (compilation in target.compilations) { for (sourceSet in compilation.allKotlinSourceSets) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt index f0e2fc9b3ae..04241372ad1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt @@ -32,7 +32,7 @@ class DefaultKotlinCompilationOutput( } class KotlinWithJavaCompilationOutput( - internal val compilation: KotlinWithJavaCompilation + internal val compilation: KotlinWithJavaCompilation<*> ) : KotlinCompilationOutput, Callable { private val javaSourceSetOutput diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index c219666cc6e..5363a423217 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -14,12 +14,13 @@ import org.gradle.api.file.FileCollection import org.gradle.api.file.SourceDirectorySet import org.gradle.api.tasks.SourceSet import org.gradle.util.ConfigureUtil -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.defaultSourceSetLanguageSettingsChecker import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -27,14 +28,14 @@ import java.io.File import java.util.* import java.util.concurrent.Callable -internal fun KotlinCompilation.composeName(prefix: String? = null, suffix: String? = null): String { +internal fun KotlinCompilation<*>.composeName(prefix: String? = null, suffix: String? = null): String { val compilationNamePart = compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME } val targetNamePart = target.disambiguationClassifier return lowerCamelCaseName(prefix, targetNamePart, compilationNamePart, suffix) } -internal val KotlinCompilation.defaultSourceSetName: String +internal val KotlinCompilation<*>.defaultSourceSetName: String get() = lowerCamelCaseName(target.disambiguationClassifier, compilationName) internal class DefaultKotlinDependencyHandler( @@ -54,10 +55,20 @@ internal class DefaultKotlinDependencyHandler( } } -abstract class AbstractKotlinCompilation( +abstract class AbstractKotlinCompilation( target: KotlinTarget, override val compilationName: String -) : KotlinCompilation, HasKotlinDependencies { +) : KotlinCompilation, HasKotlinDependencies { + + override val kotlinOptions: T + get() = compileKotlinTask.kotlinOptions + + override fun kotlinOptions(configure: T.() -> Unit) = + configure(kotlinOptions) + + @Suppress("UNCHECKED_CAST") + override val compileKotlinTask: KotlinCompile + get() = (target.project.tasks.getByName(compileKotlinTaskName) as KotlinCompile) // Don't declare this property in the constructor to avoid NPE // when an overriding property of a subclass is accessed instead. @@ -101,7 +112,7 @@ abstract class AbstractKotlinCompilation( addExtendsFromRelation(implementationConfigurationName, sourceSet.implementationConfigurationName, forced = false) addExtendsFromRelation(compileOnlyConfigurationName, sourceSet.compileOnlyConfigurationName, forced = false) - if (this is KotlinCompilationToRunnableFiles) { + if (this is KotlinCompilationToRunnableFiles<*>) { addExtendsFromRelation(runtimeOnlyConfigurationName, sourceSet.runtimeOnlyConfigurationName, forced = false) } @@ -163,13 +174,13 @@ abstract class AbstractKotlinCompilation( override fun toString(): String = "compilation '$compilationName' ($target)" } -val KotlinCompilation.allKotlinSourceSets: Set +val KotlinCompilation<*>.allKotlinSourceSets: Set get() = kotlinSourceSets.flatMapTo(mutableSetOf()) { it.getSourceSetHierarchy() } -abstract class AbstractKotlinCompilationToRunnableFiles( +abstract class AbstractKotlinCompilationToRunnableFiles( target: KotlinTarget, name: String -) : AbstractKotlinCompilation(target, name), KotlinCompilationToRunnableFiles { +) : AbstractKotlinCompilation(target, name), KotlinCompilationToRunnableFiles { override val runtimeDependencyConfigurationName: String get() = lowerCamelCaseName( target.disambiguationClassifier, @@ -180,7 +191,7 @@ abstract class AbstractKotlinCompilationToRunnableFiles( override lateinit var runtimeDependencyFiles: FileCollection } -internal fun KotlinCompilation.disambiguateName(simpleName: String): String { +internal fun KotlinCompilation<*>.disambiguateName(simpleName: String): String { return lowerCamelCaseName( target.disambiguationClassifier, compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, @@ -191,15 +202,18 @@ internal fun KotlinCompilation.disambiguateName(simpleName: String): String { open class KotlinJvmCompilation( target: KotlinTarget, name: String -) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { +) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { override val processResourcesTaskName: String get() = disambiguateName("processResources") + + override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile + get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile } -class KotlinWithJavaCompilation( - target: KotlinWithJavaTarget, +class KotlinWithJavaCompilation( + target: KotlinWithJavaTarget, name: String -) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { +) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { lateinit var javaSourceSet: SourceSet override val output: KotlinCompilationOutput by lazy { KotlinWithJavaCompilationOutput(this) } @@ -252,22 +266,37 @@ class KotlinWithJavaCompilation( class KotlinJvmAndroidCompilation( target: KotlinAndroidTarget, name: String -) : AbstractKotlinCompilationToRunnableFiles(target, name) +) : AbstractKotlinCompilationToRunnableFiles(target, name) { + override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile + get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile +} class KotlinJsCompilation( target: KotlinTarget, name: String -) : AbstractKotlinCompilationToRunnableFiles(target, name) +) : AbstractKotlinCompilationToRunnableFiles(target, name) { + override val compileKotlinTask: Kotlin2JsCompile + get() = super.compileKotlinTask as Kotlin2JsCompile +} class KotlinCommonCompilation( target: KotlinTarget, name: String -) : AbstractKotlinCompilation(target, name) +) : AbstractKotlinCompilation(target, name) { + override val compileKotlinTask: KotlinCompileCommon + get() = super.compileKotlinTask as KotlinCompileCommon +} class KotlinNativeCompilation( override val target: KotlinNativeTarget, name: String -) : AbstractKotlinCompilation(target, name), KotlinCompilationWithResources { +) : AbstractKotlinCompilation(target, name), KotlinCompilationWithResources { + + override val kotlinOptions: KotlinCommonOptions + get() = compileKotlinTask.kotlinOptions + + override val compileKotlinTask: KotlinNativeCompile + get() = super.compileKotlinTask as KotlinNativeCompile private val project: Project get() = target.project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index ac82fcedda6..b68fd895584 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.compilerRunner.KotlinNativeProjectProperty import org.jetbrains.kotlin.compilerRunner.hasProperty import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +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 @@ -28,7 +29,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.File import java.util.* -abstract class KotlinOnlyTargetPreset( +abstract class KotlinOnlyTargetPreset>( protected val project: Project, private val instantiator: Instantiator, private val fileResolver: FileResolver, @@ -197,14 +198,14 @@ class KotlinAndroidTargetPreset( class KotlinJvmWithJavaTargetPreset( private val project: Project, private val kotlinPluginVersion: String -) : KotlinTargetPreset { +) : KotlinTargetPreset> { override fun getName(): String = PRESET_NAME - override fun createTarget(name: String): KotlinWithJavaTarget { + override fun createTarget(name: String): KotlinWithJavaTarget { project.plugins.apply(JavaPlugin::class.java) - val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, name).apply { + val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, name).apply { disambiguationClassifier = name preset = this@KotlinJvmWithJavaTargetPreset } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index 0b6d7a2dadb..619a3fb7202 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -19,6 +19,7 @@ import org.gradle.api.plugins.JavaPlugin import org.gradle.api.publish.maven.MavenPublication import org.gradle.util.ConfigureUtil import org.gradle.util.WrapUtil +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* @@ -138,7 +139,7 @@ open class KotlinAndroidTarget( } } -open class KotlinWithJavaTarget( +open class KotlinWithJavaTarget( project: Project, override val platformType: KotlinPlatformType, override val targetName: String @@ -158,14 +159,15 @@ open class KotlinWithJavaTarget( override val artifactsTaskName: String get() = JavaPlugin.JAR_TASK_NAME - override val compilations: NamedDomainObjectContainer = + override val compilations: NamedDomainObjectContainer> = + @Suppress("UNCHECKED_CAST") project.container( - KotlinWithJavaCompilation::class.java, + KotlinWithJavaCompilation::class.java as Class>, KotlinWithJavaCompilationFactory(project, this) ) } -open class KotlinOnlyTarget( +open class KotlinOnlyTarget>( project: Project, override val platformType: KotlinPlatformType ) : AbstractKotlinTarget(project) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index 60b7f630d3e..f9c12dc486d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -123,7 +123,7 @@ class ScriptingKotlinGradleSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { if (!ScriptingGradleSubplugin.isEnabled(project)) return emptyList() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index 1ade3e436db..f243d86a326 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -29,7 +29,7 @@ import org.jetbrains.kotlin.incremental.ChangedFiles import java.io.File @CacheableTask -internal open class KotlinCompileCommon : AbstractKotlinCompile(), KotlinCommonCompile { +open class KotlinCompileCommon : AbstractKotlinCompile(), KotlinCommonCompile { private val kotlinOptionsImpl = KotlinMultiplatformCommonOptionsImpl() override val kotlinOptions: KotlinMultiplatformCommonOptions diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 74962e4569f..b0ab80f19de 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -230,7 +230,7 @@ abstract class AbstractKotlinCompile() : AbstractKo /** Registers the directory provided by the [provider] as attached, meaning that the directory should * be consumed as a friend classes directory by other tasks that have this task as a [friendTask]. */ - fun attachClassesDir(provider: () -> File?) { + internal fun attachClassesDir(provider: () -> File?) { attachedClassesDirs += lazy(provider) } @@ -305,7 +305,7 @@ abstract class AbstractKotlinCompile() : AbstractKo setupPlugins(args) } - fun setupPlugins(compilerArgs: T) { + internal fun setupPlugins(compilerArgs: T) { compilerArgs.pluginClasspaths = pluginClasspath.toSortedPathsArray() compilerArgs.pluginOptions = pluginOptions.arguments.toTypedArray() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt index 72106609c47..12e65a142ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt @@ -26,7 +26,7 @@ internal open class KotlinTasksProvider(val targetName: String) { open fun createKotlinJVMTask( project: Project, name: String, - compilation: KotlinCompilation + compilation: KotlinCompilation<*> ): KotlinCompile { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) @@ -35,7 +35,7 @@ internal open class KotlinTasksProvider(val targetName: String) { } } - fun createKotlinJSTask(project: Project, name: String, compilation: KotlinCompilation): Kotlin2JsCompile { + fun createKotlinJSTask(project: Project, name: String, compilation: KotlinCompilation<*>): Kotlin2JsCompile { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) return project.tasks.create(name, taskClass).apply { @@ -43,8 +43,7 @@ internal open class KotlinTasksProvider(val targetName: String) { } } - - fun createKotlinCommonTask(project: Project, name: String, compilation: KotlinCompilation): KotlinCompileCommon { + fun createKotlinCommonTask(project: Project, name: String, compilation: KotlinCompilation<*>): KotlinCompileCommon { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) return project.tasks.create(name, taskClass).apply { @@ -56,7 +55,7 @@ internal open class KotlinTasksProvider(val targetName: String) { kotlinTask: AbstractKotlinCompile<*>, project: Project, propertiesProvider: PropertiesProvider, - compilation: KotlinCompilation + compilation: KotlinCompilation<*> ) { kotlinTask.sourceSetName = compilation.name kotlinTask.friendTaskName = taskToFriendTaskMapper[kotlinTask] @@ -86,7 +85,7 @@ internal class AndroidTasksProvider(targetName: String) : KotlinTasksProvider(ta kotlinTask: AbstractKotlinCompile<*>, project: Project, propertiesProvider: PropertiesProvider, - compilation: KotlinCompilation + compilation: KotlinCompilation<*> ) { super.configure(kotlinTask, project, propertiesProvider, compilation) kotlinTask.useModuleDetection = true diff --git a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt index 435a73f7b06..0066cccb8e6 100644 --- a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt +++ b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt @@ -56,7 +56,7 @@ class NoArgKotlinGradleSubplugin : KotlinGradleSubplugin { javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, - kotlinCompilation: KotlinCompilation? + kotlinCompilation: KotlinCompilation<*>? ): List { if (!NoArgGradleSubplugin.isEnabled(project)) return emptyList() diff --git a/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt b/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt index 6a36921fa35..a567db8354b 100644 --- a/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt +++ b/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt @@ -51,7 +51,7 @@ class SamWithReceiverKotlinGradleSubplugin : KotlinGradleSubplugin? ): List { if (!SamWithReceiverGradleSubplugin.isEnabled(project)) return emptyList() diff --git a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt index 9e32daf8ad5..1e415ffae9d 100644 --- a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt +++ b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation 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.gradle.tasks.AbstractKotlinCompile class SerializationGradleSubplugin : Plugin { companion object { @@ -51,7 +50,7 @@ class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin? ): List { return emptyList() }