From a7f57710e2d6396ad5da95c3e3583339b8cd4992 Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Fri, 23 Feb 2024 21:07:02 +0100 Subject: [PATCH] Create checker for deprecated gradle properties #KT-64380 Fixed --- .../diagnostics/KotlinToolingDiagnostics.kt | 10 ++++++ .../GradleDeprecatedPropertyChecker.kt | 36 +++++++++++++++++++ .../plugin/registerKotlinPluginExtensions.kt | 1 + 3 files changed, 47 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/GradleDeprecatedPropertyChecker.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt index 4dc88c2dc9e..ee5b62134c0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt @@ -808,6 +808,16 @@ object KotlinToolingDiagnostics { """.trimIndent() ) } + + object DeprecatedGradleProperties : ToolingDiagnosticFactory(WARNING) { + operator fun invoke(usedDeprecatedProperties: List): ToolingDiagnostic { + return build( + """ + $usedDeprecatedProperties properties were deprecated and are not supported anymore. Please, delete them from project properties. + """.trimMargin() + ) + } + } } private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/GradleDeprecatedPropertyChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/GradleDeprecatedPropertyChecker.kt new file mode 100644 index 00000000000..db88b36e192 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/GradleDeprecatedPropertyChecker.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2024 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.plugin.diagnostics.checkers + +import org.jetbrains.kotlin.gradle.plugin.PropertiesBuildService +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector + +internal object GradleDeprecatedPropertyChecker : KotlinGradleProjectChecker { + private val deprecatedProperties: List = listOf( + "kotlin.useK2", + "kotlin.experimental.tryK2", + "kapt.use.k2", + "kotlin.internal.single.build.metrics.file", + "kotlin.build.report.dir" + ) + + override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) { + val propertiesBuildService = PropertiesBuildService.registerIfAbsent(project).get() + + val usedDeprecatedProperties = deprecatedProperties.filter { propertiesBuildService.get(it, project) != null } + + if (usedDeprecatedProperties.isNotEmpty()) { + collector.reportOncePerGradleBuild( + project, + KotlinToolingDiagnostics.DeprecatedGradleProperties(usedDeprecatedProperties) + ) + } + } + +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 94121f9685d..8e7b9b959d0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -144,6 +144,7 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, DuplicateSourceSetChecker) register(project, CInteropInputChecker) register(project, IncorrectNativeDependenciesChecker) + register(project, GradleDeprecatedPropertyChecker) if (isMultiplatform) { register(project, KotlinMultiplatformAndroidGradlePluginCompatibilityChecker)