From 0466fc536d5d891fbe8c643e8c6f1c0ad3a33d0f Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Thu, 8 Dec 2022 18:26:44 +0100 Subject: [PATCH] [Gradle] Don't convert free compiler arguments to set, avoid args duplication #KT-55363 Fixed --- .../kotlin/gradle/CompilerOptionsIT.kt | 3 --- .../kotlin/gradle/tasks/KotlinCompileCommon.kt | 7 ++++--- .../org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 12 +++++++----- .../tasks/internal/KotlinJsOptionsCompat.kt | 18 +++++++++++------- .../tasks/internal/KotlinJvmOptionsCompat.kt | 13 ++++++++----- .../KotlinMultiplatformCommonOptionsCompat.kt | 15 ++++++++------- 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt index 56eabc91f4c..2a033157a52 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.LogLevel import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import kotlin.io.path.appendText @@ -62,7 +61,6 @@ internal class CompilerOptionsIT : KGPBaseTest() { @DisplayName("compiler plugin arguments set via kotlinOptions.freeCompilerArgs on task execution applied properly") @JvmGradlePluginTests @GradleTest - @Disabled internal fun freeArgsModifiedAtExecutionTimeCorrectly(gradleVersion: GradleVersion) { project("simpleProject", gradleVersion) { buildGradle.appendText( @@ -95,7 +93,6 @@ internal class CompilerOptionsIT : KGPBaseTest() { @DisplayName("compiler plugin arguments set via kotlinOptions.freeCompilerArgs on task execution applied properly in MPP") @MppGradlePluginTests @GradleTest - @Disabled internal fun freeArgsModifiedAtExecutionTimeCorrectlyMpp(gradleVersion: GradleVersion) { project("new-mpp-lib-with-tests", gradleVersion) { buildGradle.appendText( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index 6054ba0929a..3bebef115df 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -61,7 +61,7 @@ abstract class KotlinCompileCommon @Inject constructor( * this input will always be empty. */ @get:Internal - internal var additionalFreeCompilerArgs: List = listOf() + internal var executionTimeFreeCompilerArgs: List? = null override fun createCompilerArgs(): K2MetadataCompilerArguments = K2MetadataCompilerArguments() @@ -90,8 +90,9 @@ abstract class KotlinCompileCommon @Inject constructor( (compilerOptions as KotlinMultiplatformCommonCompilerOptionsDefault).fillCompilerArguments(args) - if (additionalFreeCompilerArgs.isNotEmpty()) { - args.freeArgs = compilerOptions.freeCompilerArgs.get().union(additionalFreeCompilerArgs).toList() + val localExecutionTimeFreeCompilerArgs = executionTimeFreeCompilerArgs + if (localExecutionTimeFreeCompilerArgs != null) { + args.freeArgs = localExecutionTimeFreeCompilerArgs } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 7dfee41a6a0..f82ce40e287 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -701,7 +701,7 @@ abstract class KotlinCompile @Inject constructor( * this input will always be empty. */ @get:Internal - internal var additionalFreeCompilerArgs: List = listOf() + internal var executionTimeFreeCompilerArgs: List? = null override fun setupCompilerArgs(args: K2JVMCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) { compilerArgumentsContributor.contributeArguments( @@ -715,8 +715,9 @@ abstract class KotlinCompile @Inject constructor( args.reportPerf = true } - if (additionalFreeCompilerArgs.isNotEmpty()) { - args.freeArgs = compilerOptions.freeCompilerArgs.get().union(additionalFreeCompilerArgs).toList() + val localExecutionTimeFreeCompilerArgs = executionTimeFreeCompilerArgs + if (localExecutionTimeFreeCompilerArgs != null) { + args.freeArgs = localExecutionTimeFreeCompilerArgs } } @@ -1009,7 +1010,7 @@ abstract class Kotlin2JsCompile @Inject constructor( * this input will always be empty. */ @get:Internal - internal var additionalFreeCompilerArgs: List = listOf() + internal var executionTimeFreeCompilerArgs: List? = null override fun createCompilerArgs(): K2JSCompilerArguments = K2JSCompilerArguments() @@ -1039,7 +1040,8 @@ abstract class Kotlin2JsCompile @Inject constructor( } // Overriding freeArgs from compilerOptions with enhanced one + additional one set on execution phase // containing additional arguments based on the js compilation configuration - args.freeArgs = enhancedFreeCompilerArgs.get().union(additionalFreeCompilerArgs).toList() + val localExecutionTimeFreeCompilerArgs = executionTimeFreeCompilerArgs + args.freeArgs = if (localExecutionTimeFreeCompilerArgs != null) localExecutionTimeFreeCompilerArgs else enhancedFreeCompilerArgs.get() } @get:InputFiles diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJsOptionsCompat.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJsOptionsCompat.kt index 128c0d8106d..43800213079 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJsOptionsCompat.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJsOptionsCompat.kt @@ -18,17 +18,21 @@ class KotlinJsOptionsCompat( override val options: KotlinJsCompilerOptions ) : KotlinJsOptions { override var freeCompilerArgs: List - get() = if (isTaskExecuting) { - task().enhancedFreeCompilerArgs.get() - .union(task().additionalFreeCompilerArgs) - .toList() - } else { - options.freeCompilerArgs.get() + get() { + val executionTimeFreeCompilerArgs = task().executionTimeFreeCompilerArgs + return if (!isTaskExecuting) { + options.freeCompilerArgs.get() + } else if (executionTimeFreeCompilerArgs != null) { + executionTimeFreeCompilerArgs + } else { + // returned at execution time before freeCompilerArgs modification + task().enhancedFreeCompilerArgs.get() + } } set(value) = if (isTaskExecuting) { task().nagUserFreeArgsModifiedOnExecution(value) - task().additionalFreeCompilerArgs = value + task().executionTimeFreeCompilerArgs = value } else { options.freeCompilerArgs.set(value) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJvmOptionsCompat.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJvmOptionsCompat.kt index 3270fb6ddc5..2dbcedd393f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJvmOptionsCompat.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinJvmOptionsCompat.kt @@ -18,15 +18,18 @@ class KotlinJvmOptionsCompat( override val options: KotlinJvmCompilerOptions ) : KotlinJvmOptions { override var freeCompilerArgs: List - get() = if (isTaskExecuting) { - options.freeCompilerArgs.get().union(task().additionalFreeCompilerArgs).toList() - } else { - options.freeCompilerArgs.get() + get() { + val executionTimeFreeCompilerArgs = task().executionTimeFreeCompilerArgs + return if (isTaskExecuting && executionTimeFreeCompilerArgs != null) { + executionTimeFreeCompilerArgs + } else { + options.freeCompilerArgs.get() + } } set(value) = if (isTaskExecuting) { task().nagUserFreeArgsModifiedOnExecution(value) - task().additionalFreeCompilerArgs = value + task().executionTimeFreeCompilerArgs = value } else { options.freeCompilerArgs.set(value) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinMultiplatformCommonOptionsCompat.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinMultiplatformCommonOptionsCompat.kt index 289fbe784db..76b3bcfd0bd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinMultiplatformCommonOptionsCompat.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinMultiplatformCommonOptionsCompat.kt @@ -15,17 +15,18 @@ class KotlinMultiplatformCommonOptionsCompat( ) : KotlinMultiplatformCommonOptions { override var freeCompilerArgs: List - get() = if (isTaskExecuting) { - options.freeCompilerArgs.get() - .union(task().additionalFreeCompilerArgs) - .toList() - } else { - options.freeCompilerArgs.get() + get() { + val executionTimeFreeCompilerArgs = task().executionTimeFreeCompilerArgs + return if (isTaskExecuting && executionTimeFreeCompilerArgs != null) { + executionTimeFreeCompilerArgs + } else { + options.freeCompilerArgs.get() + } } set(value) = if (isTaskExecuting) { task().nagUserFreeArgsModifiedOnExecution(value) - task().additionalFreeCompilerArgs = value + task().executionTimeFreeCompilerArgs = value } else { options.freeCompilerArgs.set(value) }