From c3b09e148b07aad9246d41ff888ea48f1bc4b0db Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Tue, 18 Jul 2023 08:56:55 +0200 Subject: [PATCH] [Gradle] Add KotlinCompilationSourceDeprecation diagnostic ^KT-58235 Verification Pending --- .../plugin/diagnostics/KotlinToolingDiagnostics.kt | 12 ++++++++++++ .../mpp/compilationImpl/KotlinCompilationImpl.kt | 3 +++ .../diagnosticsTests/MppDiagnosticsFunctionalTest.kt | 11 +++++++++++ .../kotlinCompilationSourceDeprecation.txt | 4 ++++ 4 files changed, 30 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/kotlinCompilationSourceDeprecation.txt 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 2fe8be26f79..efa81cc9d40 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 @@ -548,6 +548,18 @@ object KotlinToolingDiagnostics { """.trimIndent() ) } + + object KotlinCompilationSourceDeprecation : ToolingDiagnosticFactory(ERROR) { + operator fun invoke(trace: Throwable?) = build( + """ + `KotlinCompilation.source(KotlinSourceSet)` method is deprecated + and will be removed in upcoming Kotlin releases. + + See https://kotl.in/compilation-source-deprecation for details. + """.trimIndent(), + throwable = trace, + ) + } } 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/mpp/compilationImpl/KotlinCompilationImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt index 9c7ab69b3ec..1169f20da9c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt @@ -15,6 +15,8 @@ import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.KotlinCompilationSourceDeprecation +import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector import org.jetbrains.kotlin.gradle.plugin.mpp.HierarchyAttributeContainer import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.internal @@ -91,6 +93,7 @@ internal class KotlinCompilationImpl constructor( @Deprecated("scheduled for removal with Kotlin 2.0", level = DeprecationLevel.ERROR) override fun source(sourceSet: KotlinSourceSet) { + project.kotlinToolingDiagnosticsCollector.report(project, KotlinCompilationSourceDeprecation(Throwable())) sourceSets.source(sourceSet) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt index 5ef141713f3..d3494225f15 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt @@ -106,4 +106,15 @@ class MppDiagnosticsFunctionalTest { kotlin { } } } + + @Test + fun testKotlinCompilationSourceDeprecation() { + checkDiagnosticsWithMppProject("kotlinCompilationSourceDeprecation") { + kotlin { + val customMain = sourceSets.create("customMain") + @Suppress("DEPRECATION_ERROR") + jvm().compilations.create("custom").source(customMain) + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/kotlinCompilationSourceDeprecation.txt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/kotlinCompilationSourceDeprecation.txt new file mode 100644 index 00000000000..11122e74567 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/kotlinCompilationSourceDeprecation.txt @@ -0,0 +1,4 @@ +[KotlinCompilationSourceDeprecation | ERROR] `KotlinCompilation.source(KotlinSourceSet)` method is deprecated +and will be removed in upcoming Kotlin releases. + +See https://kotl.in/compilation-source-deprecation for details. \ No newline at end of file