diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinToolTask.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinToolTask.kt new file mode 100644 index 00000000000..2b1aef4978b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinToolTask.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.tasks + +import org.gradle.api.Action +import org.gradle.api.Task +import org.gradle.api.tasks.Nested +import org.jetbrains.kotlin.gradle.dsl.CompilerCommonToolOptions + +interface KotlinToolTask : Task { + @get:Nested + val toolOptions: TO + + fun toolOptions(configure: TO.() -> Unit) { + configure(toolOptions) + } + + fun toolOptions(configure: Action) { + configure.execute(toolOptions) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt index 8454e83c99d..38293357df0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt @@ -33,16 +33,31 @@ interface KotlinJvmCompile : KotlinJvmCompileApi interface KotlinCommonCompile : KotlinCompile interface KotlinJsDce : Task { + @Suppress("DEPRECATION") + @Deprecated( + message = "Replaced with toolOptions", + replaceWith = ReplaceWith("toolOptions") + ) @get:Internal val dceOptions: KotlinJsDceOptions @get:Input val keep: MutableList + @Suppress("DEPRECATION") + @Deprecated( + message = "Replaced with toolOptions()", + replaceWith = ReplaceWith("toolOptions(fn)") + ) fun dceOptions(fn: KotlinJsDceOptions.() -> Unit) { dceOptions.fn() } + @Suppress("DEPRECATION") + @Deprecated( + message = "Replaced with toolOptions()", + replaceWith = ReplaceWith("toolOptions(fn)") + ) fun dceOptions(fn: Closure<*>) { fn.delegate = dceOptions fn.call() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt index 7d5c76510ad..960489cb9f7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt @@ -28,12 +28,14 @@ import org.jetbrains.kotlin.cli.common.arguments.DevModeOverwritingStrategies import org.jetbrains.kotlin.cli.common.arguments.K2JSDceArguments import org.jetbrains.kotlin.cli.js.dce.K2JSDce import org.jetbrains.kotlin.compilerRunner.runToolInSeparateProcess +import org.jetbrains.kotlin.gradle.dsl.CompilerJsDceOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerJsDceOptionsDefault import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptionsImpl import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger import org.jetbrains.kotlin.gradle.utils.canonicalPathWithoutExtension import org.jetbrains.kotlin.gradle.utils.fileExtensionCasePermutations +import org.jetbrains.kotlin.gradle.utils.newInstance import java.io.File import javax.inject.Inject @@ -41,6 +43,7 @@ import javax.inject.Inject abstract class KotlinJsDce @Inject constructor( objectFactory: ObjectFactory ) : AbstractKotlinCompileTool(objectFactory), + KotlinToolTask, KotlinJsDce { init { @@ -50,22 +53,26 @@ abstract class KotlinJsDce @Inject constructor( include("js".fileExtensionCasePermutations().map { "**/*.$it" }) } + override val toolOptions: CompilerJsDceOptions = objectFactory.newInstance() + override fun createCompilerArgs(): K2JSDceArguments = K2JSDceArguments() override fun setupCompilerArgs(args: K2JSDceArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) { - dceOptionsImpl.updateArguments(args) + (toolOptions as CompilerJsDceOptionsDefault).fillCompilerArguments(args) args.declarationsToKeep = keep.toTypedArray() } - private val dceOptionsImpl = KotlinJsDceOptionsImpl() - // DCE can be broken in case of non-kotlin js files or modules @Internal var kotlinFilesOnly: Boolean = false + @Deprecated("Replaced with toolOptions", replaceWith = ReplaceWith("toolOptions")) + @Suppress("DEPRECATION") @get:Internal - override val dceOptions: KotlinJsDceOptions - get() = dceOptionsImpl + override val dceOptions: KotlinJsDceOptions = object : KotlinJsDceOptions { + override val options: CompilerJsDceOptions + get() = toolOptions + } @get:Input override val keep: MutableList = mutableListOf() @@ -93,11 +100,11 @@ abstract class KotlinJsDce @Inject constructor( private val buildDir = project.layout.buildDirectory private val isDevMode - get() = dceOptions.devMode || "-dev-mode" in dceOptions.freeCompilerArgs + get() = toolOptions.devMode.get() || toolOptions.freeCompilerArgs.get().contains("-dev-mode") private val isExplicitDevModeAllStrategy - get() = strategyAllArg in dceOptions.freeCompilerArgs || - strategyOlderArg !in dceOptions.freeCompilerArgs && + get() = strategyAllArg in toolOptions.freeCompilerArgs.get() || + strategyOlderArg !in toolOptions.freeCompilerArgs.get() && System.getProperty("kotlin.js.dce.devmode.overwriting.strategy") == DevModeOverwritingStrategies.ALL @TaskAction