diff --git a/buildSrc/gradle.properties b/buildSrc/gradle.properties index f0f05db7daa..1dd3f202d01 100644 --- a/buildSrc/gradle.properties +++ b/buildSrc/gradle.properties @@ -11,6 +11,7 @@ cacheRedirectorEnabled=true #buildSrc.kotlin.version=1.1.50 kotlin.build.gradlePlugin.version=0.0.38 +kotlin.options.suppressFreeCompilerArgsModificationWarning=true # Please keep it in sync with root gradle.properties. # It's currently needed for proper configuration cache work, the reason will be investigated later diff --git a/gradle.properties b/gradle.properties index 9c7b57ece88..a6eb324bb4d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -42,6 +42,7 @@ kotlin.build.publishing.attempts=20 ## The following properties can be added to your local.properties file to customize the build: kotlin.jvm.target.validation.mode=error +kotlin.options.suppressFreeCompilerArgsModificationWarning=true #attachedIntellijVersion=203 (or any other platform version) 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 b985af03b1e..2b94e760572 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,6 +8,7 @@ package org.jetbrains.kotlin.gradle import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName +import kotlin.io.path.appendText internal class CompilerOptionsIT : KGPBaseTest() { @@ -22,7 +23,36 @@ internal class CompilerOptionsIT : KGPBaseTest() { internal fun compatibleWithKotlinDsl(gradleVersion: GradleVersion) { project("buildSrcWithKotlinDslAndKgp", gradleVersion) { build("tasks") { - assertOutputContains("kotlinOptions.freeCompilerArgs were changed on task execution phase:") + assertOutputContains("kotlinOptions.freeCompilerArgs were changed on task :compileKotlin execution phase:") + } + } + } + + @DisplayName("Allow to suppress kotlinOptions.freeCompilerArgs on task execution modification warning") + @JvmGradlePluginTests + @GradleTest + internal fun suppressFreeArgsModification(gradleVersion: GradleVersion) { + project("simpleProject", gradleVersion) { + buildGradle.appendText( + """ + | + |tasks.named("compileKotlin") { + | doFirst { + | kotlinOptions.freeCompilerArgs += ["-module-name=java"] + | } + |} + """.trimMargin() + ) + + gradleProperties.appendText( + """ + | + |kotlin.options.suppressFreeCompilerArgsModificationWarning=true + """.trimMargin() + ) + + build("assemble") { + assertOutputDoesNotContain("kotlinOptions.freeCompilerArgs were changed on task") } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index 6d0e2b6768a..be1c49497d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -409,6 +409,9 @@ internal class PropertiesProvider private constructor(private val project: Proje val kotlinTestInferJvmVariant: Boolean get() = booleanProperty("kotlin.test.infer.jvm.variant") ?: true + val kotlinOptionsSuppressFreeArgsModificationWarning: Boolean + get() = booleanProperty(PropertyNames.KOTLIN_OPTIONS_SUPPRESS_FREEARGS_MODIFICATION_WARNING) ?: false + enum class JvmTargetValidationMode { IGNORE, WARNING, ERROR } @@ -493,6 +496,7 @@ internal class PropertiesProvider private constructor(private val project: Proje const val KOTLIN_JS_KARMA_BROWSERS = "kotlin.js.browser.karma.browsers" const val KOTLIN_BUILD_REPORT_SINGLE_FILE = "kotlin.build.report.single_file" const val KOTLIN_BUILD_REPORT_HTTP_URL = "kotlin.build.report.http.url" + const val KOTLIN_OPTIONS_SUPPRESS_FREEARGS_MODIFICATION_WARNING = "kotlin.options.suppressFreeCompilerArgsModificationWarning" } companion object { 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 e7b7e2ffecd..3e79d470831 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 @@ -298,6 +298,9 @@ abstract class AbstractKotlinCompile @Inject constr @get:Internal val startParameters = BuildReportsService.getStartParameters(project) + @get:Internal + internal abstract val suppressKotlinOptionsFreeArgsModificationWarning: Property + internal fun reportingSettings() = buildReportsService.orNull?.parameters?.reportingSettings?.orNull ?: ReportingSettings() @get:Internal diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt index cd3bf526210..d3aeb6e668b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt @@ -73,6 +73,9 @@ internal abstract class AbstractKotlinCompileConfig.nagUserFreeArgsModifiedOnExecution( + freeArgsValue: List +) { + if (!suppressKotlinOptionsFreeArgsModificationWarning.get()) { + logger.warn( + "kotlinOptions.freeCompilerArgs were changed on task $path execution phase: ${freeArgsValue.joinToString()}\n" + + "This behaviour is deprecated and become an error in future releases!" + ) + } +}