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 2a033157a52..3bd536dccf7 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 @@ -13,16 +13,24 @@ import kotlin.io.path.appendText internal class CompilerOptionsIT : KGPBaseTest() { - // In Gradle 7.3-7.5 'kotlin-dsl' plugin tries to set up freeCompilerArgs in doFirst task action + // In Gradle 7.3-8.0 'kotlin-dsl' plugin tries to set up freeCompilerArgs in doFirst task action + // Related issue: https://github.com/gradle/gradle/issues/22091 @DisplayName("Allows to set kotlinOptions.freeCompilerArgs on task execution with warning") @JvmGradlePluginTests @GradleTestVersions( - minVersion = TestVersions.Gradle.G_7_3, - maxVersion = TestVersions.Gradle.G_7_5 + minVersion = TestVersions.Gradle.G_7_3 ) @GradleTest internal fun compatibleWithKotlinDsl(gradleVersion: GradleVersion) { project("buildSrcWithKotlinDslAndKgp", gradleVersion) { + gradleProperties + .appendText( + """ + | + |systemProp.org.gradle.kotlin.dsl.precompiled.accessors.strict=true + """.trimMargin() + ) + build("tasks") { assertOutputContains("kotlinOptions.freeCompilerArgs were changed on task :compileKotlin execution phase:") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinOptionsFreeArgsDeprecation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinOptionsFreeArgsDeprecation.kt index fe7485fcc64..558b508d0ea 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinOptionsFreeArgsDeprecation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/internal/KotlinOptionsFreeArgsDeprecation.kt @@ -11,9 +11,33 @@ internal fun AbstractKotlinCompile<*>.nagUserFreeArgsModifiedOnExecution( freeArgsValue: List ) { if (!suppressKotlinOptionsFreeArgsModificationWarning.get()) { + // Trying to approximately filter out KGP and non-related Gradle/Java/Groovy classes from stacktrace + val modificationStacktrace = Thread.currentThread().stackTrace + .asSequence() + .filter { + !it.className.startsWith("org.jetbrains.kotlin.gradle") && + !it.className.startsWith("org.gradle.api") && + !it.className.startsWith("org.gradle.internal") && + !it.className.startsWith("org.gradle.execution") && + !it.className.startsWith("java.") && + !it.className.startsWith("sun.") && + !it.className.startsWith("groovy.") && + !it.className.startsWith("kotlin.") && + !it.className.startsWith("org.codehaus.groovy.") + } + .takeWhile { + !it.className.startsWith("org.gradle.composite") && + !it.className.startsWith("org.gradle.configuration.internal") + } + .joinToString(separator = "\n") { + " $it" + } + 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!" + "This behaviour is deprecated and become an error in future releases!\n" + + "Approximate place of modification at execution phase:\n" + + modificationStacktrace ) } }