From 7e719e663087115a0e2bb13ddd15233ec295496b Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 16 Nov 2021 18:09:49 +1100 Subject: [PATCH 1/7] Kotlin 1.6.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b05932426b..b6db0ccc6a8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] dokka = "1.5.31" jacoco = "0.8.7" -kotlin = "1.5.31" +kotlin = "1.6.0" ktlint = "0.42.1" spek = "2.0.17" From 420e8347b5ec28113fb989d050c54b88b3e43f68 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 16 Nov 2021 18:20:20 +1100 Subject: [PATCH 2/7] Disable warnings We need API version 1.4 for Gradle 7.x compatibility. This creates a warning in Kotlin 1.6. --- build-logic/src/main/kotlin/module.gradle.kts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/build-logic/src/main/kotlin/module.gradle.kts b/build-logic/src/main/kotlin/module.gradle.kts index 420dde7d086..a3720153e1c 100644 --- a/build-logic/src/main/kotlin/module.gradle.kts +++ b/build-logic/src/main/kotlin/module.gradle.kts @@ -89,13 +89,6 @@ tasks.withType().configureEach { "-progressive", "-Xopt-in=kotlin.RequiresOptIn" ) - // Usage: ./gradlew build -PwarningsAsErrors=true. - // Note: currently there are warnings for detekt-gradle-plugin that seemingly can't be fixed - // until Gradle releases an update (https://github.com/gradle/gradle/issues/16345) - allWarningsAsErrors = when (project.name) { - "detekt-gradle-plugin" -> false - else -> (project.findProperty("warningsAsErrors") == "true" || System.getenv("CI") == "true") - } } } From b8882c014bcaa533c90c301f751586c2c40a879a Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 16 Nov 2021 18:21:02 +1100 Subject: [PATCH 3/7] Use language version 1.6 --- build-logic/src/main/kotlin/module.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/module.gradle.kts b/build-logic/src/main/kotlin/module.gradle.kts index a3720153e1c..0404d7b5272 100644 --- a/build-logic/src/main/kotlin/module.gradle.kts +++ b/build-logic/src/main/kotlin/module.gradle.kts @@ -83,7 +83,7 @@ configurations.create("coverageDataElements") { tasks.withType().configureEach { kotlinOptions { jvmTarget = Versions.JVM_TARGET - languageVersion = "1.5" + languageVersion = "1.6" apiVersion = "1.4" freeCompilerArgs = listOf( "-progressive", From 450fb7076b53e02fd7afb5d1aba65c93a95c1f73 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 16 Nov 2021 21:56:38 +1100 Subject: [PATCH 4/7] Workaround for https://github.com/gradle/gradle/issues/16774 --- .../gitlab/arturbosch/detekt/DetektJvmSpec.kt | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt index a75ad04f07c..7b42ffaed60 100644 --- a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt +++ b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -5,11 +5,19 @@ import io.gitlab.arturbosch.detekt.testkit.DslGradleRunner import io.gitlab.arturbosch.detekt.testkit.ProjectLayout import io.gitlab.arturbosch.detekt.testkit.triggerEvaluation import org.assertj.core.api.Assertions.assertThat +import org.gradle.api.Project +import org.gradle.api.internal.project.DefaultProject +import org.gradle.api.provider.Provider +import org.gradle.build.event.BuildEventsListenerRegistry +import org.gradle.internal.service.DefaultServiceRegistry +import org.gradle.internal.service.scopes.ProjectScopeServices import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.repositories +import org.gradle.tooling.events.OperationCompletionListener import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe +import java.util.concurrent.atomic.AtomicReference object DetektJvmSpec : Spek({ describe("When applying detekt in a JVM project") { @@ -20,6 +28,7 @@ object DetektJvmSpec : Spek({ buildFileName = "build.gradle", baselineFiles = listOf("detekt-baseline.xml", "detekt-baseline-main.xml", "detekt-baseline-test.xml"), projectScript = { + addFakeService() apply() apply() repositories { @@ -137,3 +146,28 @@ object DetektJvmSpec : Spek({ } } }) + +internal class FakeBuildEventsListenerRegistry : BuildEventsListenerRegistry { + override fun onTaskCompletion(provider: Provider) { + // Unit + } +} + +// https://github.com/gradle/gradle/issues/16774 +@Suppress("TooGenericExceptionThrown") +private fun Project.addFakeService() { + try { + val projectScopeServices = (this as DefaultProject).services as ProjectScopeServices + val state = ProjectScopeServices::class.java.superclass.getDeclaredField("state") + state.isAccessible = true + val stateValue = state[projectScopeServices] as AtomicReference + val enumClass = Class.forName(DefaultServiceRegistry::class.java.name + "\$State") + stateValue.set(enumClass.enumConstants[0]) + + // add service and set state so that future mutations are not allowed + projectScopeServices.add(BuildEventsListenerRegistry::class.java, FakeBuildEventsListenerRegistry()) + stateValue.set(enumClass.enumConstants[1]) + } catch (e: Throwable) { + throw RuntimeException(e) + } +} From 2f4b6e1a6e86cef914697708dd6fcf6330c48556 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 29 Nov 2021 12:05:34 +1100 Subject: [PATCH 5/7] Update --jvm-target CLI description to include JVM 17 target --- .../src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt index 3a7d43dda86..4d2714a5d2d 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt @@ -189,7 +189,7 @@ class CliArgs { @Parameter( names = ["--jvm-target"], description = "EXPERIMENTAL: Target version of the generated JVM bytecode that was generated during " + - "compilation and is now being used for type resolution (1.6, 1.8, 9, 10, 11, 12, 13, 14, 15 or 16)" + "compilation and is now being used for type resolution (1.6, 1.8, 9, 10, 11, 12, 13, 14, 15, 16 or 17)" ) var jvmTarget: String = JvmTarget.DEFAULT.description From 15251ea12828abc2339a5197d1c5bdf06f8cd70b Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Fri, 17 Dec 2021 22:35:29 +1100 Subject: [PATCH 6/7] Kotlin 1.6.10 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b6db0ccc6a8..3261371d032 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] dokka = "1.5.31" jacoco = "0.8.7" -kotlin = "1.6.0" +kotlin = "1.6.10" ktlint = "0.42.1" spek = "2.0.17" From 05e0327dd5ef7006d689f5ded40c49cc038709e8 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Fri, 17 Dec 2021 22:50:14 +1100 Subject: [PATCH 7/7] Use a simpler workaround for gradle/gradle#16774 --- detekt-gradle-plugin/build.gradle.kts | 16 +++++++++ .../gitlab/arturbosch/detekt/DetektJvmSpec.kt | 34 ------------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index 9f1726294a8..a1c355f10b5 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -1,3 +1,6 @@ +import org.gradle.api.internal.classpath.ModuleRegistry +import org.gradle.kotlin.dsl.support.serviceOf + plugins { id("module") `java-gradle-plugin` @@ -21,6 +24,19 @@ testing { implementation(libs.kotlin.gradle) implementation(gradleKotlinDsl()) runtimeOnly(libs.spek.runner) + + // Workaround for gradle/gradle#16774, see + // https://github.com/gradle/gradle/issues/16774#issuecomment-853407822 + // This should be reviewed and dropped if fixed as planned in Gradle 7.5 + runtimeOnly( + files( + serviceOf() + .getModule("gradle-tooling-api-builders") + .classpath + .asFiles + .first() + ) + ) } } register("functionalTest", JvmTestSuite::class) { diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt index 7b42ffaed60..a75ad04f07c 100644 --- a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt +++ b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -5,19 +5,11 @@ import io.gitlab.arturbosch.detekt.testkit.DslGradleRunner import io.gitlab.arturbosch.detekt.testkit.ProjectLayout import io.gitlab.arturbosch.detekt.testkit.triggerEvaluation import org.assertj.core.api.Assertions.assertThat -import org.gradle.api.Project -import org.gradle.api.internal.project.DefaultProject -import org.gradle.api.provider.Provider -import org.gradle.build.event.BuildEventsListenerRegistry -import org.gradle.internal.service.DefaultServiceRegistry -import org.gradle.internal.service.scopes.ProjectScopeServices import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.repositories -import org.gradle.tooling.events.OperationCompletionListener import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe -import java.util.concurrent.atomic.AtomicReference object DetektJvmSpec : Spek({ describe("When applying detekt in a JVM project") { @@ -28,7 +20,6 @@ object DetektJvmSpec : Spek({ buildFileName = "build.gradle", baselineFiles = listOf("detekt-baseline.xml", "detekt-baseline-main.xml", "detekt-baseline-test.xml"), projectScript = { - addFakeService() apply() apply() repositories { @@ -146,28 +137,3 @@ object DetektJvmSpec : Spek({ } } }) - -internal class FakeBuildEventsListenerRegistry : BuildEventsListenerRegistry { - override fun onTaskCompletion(provider: Provider) { - // Unit - } -} - -// https://github.com/gradle/gradle/issues/16774 -@Suppress("TooGenericExceptionThrown") -private fun Project.addFakeService() { - try { - val projectScopeServices = (this as DefaultProject).services as ProjectScopeServices - val state = ProjectScopeServices::class.java.superclass.getDeclaredField("state") - state.isAccessible = true - val stateValue = state[projectScopeServices] as AtomicReference - val enumClass = Class.forName(DefaultServiceRegistry::class.java.name + "\$State") - stateValue.set(enumClass.enumConstants[0]) - - // add service and set state so that future mutations are not allowed - projectScopeServices.add(BuildEventsListenerRegistry::class.java, FakeBuildEventsListenerRegistry()) - stateValue.set(enumClass.enumConstants[1]) - } catch (e: Throwable) { - throw RuntimeException(e) - } -}