KT-59304 Elevate warning to Error for pre-HMPP flags

Flag `kotlin.mpp.deprecatedProperties.nowarn` was removed.
Diagnostic could be temporarily suppressed by the:
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
This commit is contained in:
Stanislav Erokhin
2023-07-31 17:49:29 +02:00
committed by teamcity
parent cfcb0690d7
commit fcd440fd9e
18 changed files with 45 additions and 29 deletions
@@ -951,6 +951,12 @@ abstract class BaseGradleIT {
add("--${options.stacktraceMode}") add("--${options.stacktraceMode}")
} }
// temporary suppression for the usage of deprecated pre-HMPP properties.
// Should be removed together with the flags support in 2.0
if (options.hierarchicalMPPStructureSupport != null || options.enableCompatibilityMetadataVariant != null) {
add("-Pkotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError")
}
// Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3): // Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3):
add("--console=plain") add("--console=plain")
//The feature of failing the build on deprecation warnings is introduced in gradle 5.6 //The feature of failing the build on deprecation warnings is introduced in gradle 5.6
@@ -396,7 +396,9 @@ open class HierarchicalMppIT : KGPBaseTest() {
beforePublishing() beforePublishing()
if (!withGranularMetadata) { if (!withGranularMetadata) {
projectPath.toFile().resolve("gradle.properties").appendText("kotlin.internal.mpp.hierarchicalStructureByDefault=false") val gradleProperties = projectPath.toFile().resolve("gradle.properties")
gradleProperties.appendText("kotlin.internal.mpp.hierarchicalStructureByDefault=false${System.lineSeparator()}")
gradleProperties.appendText("kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError${System.lineSeparator()}")
} }
build("publish") build("publish")
} }
@@ -620,7 +622,7 @@ open class HierarchicalMppIT : KGPBaseTest() {
"transformCommonMainDependenciesMetadata", "transformCommonMainDependenciesMetadata",
"transformJvmAndJsMainDependenciesMetadata", "transformJvmAndJsMainDependenciesMetadata",
"transformLinuxAndJsMainDependenciesMetadata", "transformLinuxAndJsMainDependenciesMetadata",
"compileKotlinMetadata", "compileCommonMainKotlinMetadata",
"compileJvmAndJsMainKotlinMetadata", "compileJvmAndJsMainKotlinMetadata",
"compileLinuxAndJsMainKotlinMetadata" "compileLinuxAndJsMainKotlinMetadata"
).map { task -> subprojectPrefix?.let { ":$it" }.orEmpty() + ":" + task } ).map { task -> subprojectPrefix?.let { ":$it" }.orEmpty() + ":" + task }
@@ -40,6 +40,7 @@ internal class HierarchicalStructureOptInMigrationArtifactContentMppIT : BaseGra
*buildList { *buildList {
add("clean") add("clean")
add("publish") add("publish")
add("-Pkotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError")
when (mode) { when (mode) {
OPT_OUT_HMPP, HMPP_BY_DEFAULT -> {} OPT_OUT_HMPP, HMPP_BY_DEFAULT -> {}
DISABLE_HMPP_BY_DEFAULT -> { add("-Pkotlin.internal.mpp.hierarchicalStructureByDefault=false") } DISABLE_HMPP_BY_DEFAULT -> { add("-Pkotlin.internal.mpp.hierarchicalStructureByDefault=false") }
@@ -330,8 +330,8 @@ class VariantAwareDependenciesMppIT : BaseGradleIT() {
projectDir.resolve("gradle.properties").appendText( projectDir.resolve("gradle.properties").appendText(
"\n" + """ "\n" + """
kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.mpp.enableCompatibilityMetadataVariant=true kotlin.mpp.enableCompatibilityMetadataVariant=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
""" """
) )
@@ -42,7 +42,7 @@ class MppDiagnosticsIt : KGPBaseTest() {
this.buildGradleKts.writeText("") this.buildGradleKts.writeText("")
checkDeprecatedProperties(isDeprecationExpected = true) checkDeprecatedProperties(isDeprecationExpected = true)
this.gradleProperties.appendText("kotlin.mpp.deprecatedProperties.nowarn=true${System.lineSeparator()}") this.gradleProperties.appendText("kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError${System.lineSeparator()}")
checkDeprecatedProperties(isDeprecationExpected = false) checkDeprecatedProperties(isDeprecationExpected = false)
} }
} }
@@ -196,9 +196,9 @@ class MppDiagnosticsIt : KGPBaseTest() {
private fun TestProject.checkDeprecatedProperties(isDeprecationExpected: Boolean) { private fun TestProject.checkDeprecatedProperties(isDeprecationExpected: Boolean) {
build { build {
if (isDeprecationExpected) if (isDeprecationExpected)
output.assertHasDiagnostic(KotlinToolingDiagnostics.HierarchicalMultiplatformFlagsWarning) output.assertHasDiagnostic(KotlinToolingDiagnostics.PreHMPPFlagsError)
else else
output.assertNoDiagnostic(KotlinToolingDiagnostics.HierarchicalMultiplatformFlagsWarning) output.assertNoDiagnostic(KotlinToolingDiagnostics.PreHMPPFlagsError)
} }
} }
@@ -1,7 +1,7 @@
> Configure project : > Configure project :
> Configure project :subprojectA > Configure project :subprojectA
w: [HierarchicalMultiplatformFlagsWarning | WARNING] The following properties are obsolete and will be removed in Kotlin 1.9.20: e: [PreHMPPFlagsError | ERROR] The following properties are obsolete and no longer supported:
kotlin.mpp.enableCompatibilityMetadataVariant, kotlin.mpp.hierarchicalStructureSupport kotlin.mpp.enableCompatibilityMetadataVariant, kotlin.mpp.hierarchicalStructureSupport
Read the details here: https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#deprecate-hmpp-properties Read the details here: https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#deprecate-hmpp-properties
#diagnostic-end #diagnostic-end
@@ -1 +1,2 @@
kotlin.mpp.enableCompatibilityMetadataVariant=true kotlin.mpp.enableCompatibilityMetadataVariant=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.mpp.enableCompatibilityMetadataVariant=true kotlin.mpp.enableCompatibilityMetadataVariant=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.mpp.enableCompatibilityMetadataVariant=true kotlin.mpp.enableCompatibilityMetadataVariant=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.mpp.enableCompatibilityMetadataVariant=true kotlin.mpp.enableCompatibilityMetadataVariant=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.internal.mpp.hierarchicalStructureByDefault=true kotlin.internal.mpp.hierarchicalStructureByDefault=true
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.internal.mpp.hierarchicalStructureByDefault=false kotlin.internal.mpp.hierarchicalStructureByDefault=false
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -1 +1,2 @@
kotlin.internal.mpp.hierarchicalStructureByDefault=false kotlin.internal.mpp.hierarchicalStructureByDefault=false
kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_APPLY_DEFAULT_HIERARCHY_TEMPLATE import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_APPLY_DEFAULT_HIERARCHY_TEMPLATE
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_DEPRECATED_PROPERTIES_NO_WARN
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_CINTEROP_COMMONIZATION import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_CINTEROP_COMMONIZATION
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_GRANULAR_SOURCE_SETS_METADATA import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_GRANULAR_SOURCE_SETS_METADATA
@@ -263,9 +262,6 @@ internal class PropertiesProvider private constructor(private val project: Proje
val ignoreIncorrectNativeDependencies: Boolean? val ignoreIncorrectNativeDependencies: Boolean?
get() = booleanProperty(KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES) get() = booleanProperty(KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES)
val ignoreHmppDeprecationWarnings: Boolean?
get() = booleanProperty(KOTLIN_MPP_DEPRECATED_PROPERTIES_NO_WARN)
val publishJvmEnvironmentAttribute: Boolean val publishJvmEnvironmentAttribute: Boolean
get() = booleanProperty(KOTLIN_PUBLISH_JVM_ENVIRONMENT_ATTRIBUTE) ?: false get() = booleanProperty(KOTLIN_PUBLISH_JVM_ENVIRONMENT_ATTRIBUTE) ?: false
@@ -622,7 +618,6 @@ internal class PropertiesProvider private constructor(private val project: Proje
val KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT = property("kotlin.mpp.enableCompatibilityMetadataVariant") val KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT = property("kotlin.mpp.enableCompatibilityMetadataVariant")
val KOTLIN_MPP_ENABLE_CINTEROP_COMMONIZATION = property("kotlin.mpp.enableCInteropCommonization") val KOTLIN_MPP_ENABLE_CINTEROP_COMMONIZATION = property("kotlin.mpp.enableCInteropCommonization")
val KOTLIN_MPP_HIERARCHICAL_STRUCTURE_SUPPORT = property("kotlin.mpp.hierarchicalStructureSupport") val KOTLIN_MPP_HIERARCHICAL_STRUCTURE_SUPPORT = property("kotlin.mpp.hierarchicalStructureSupport")
val KOTLIN_MPP_DEPRECATED_PROPERTIES_NO_WARN = property("kotlin.mpp.deprecatedProperties.nowarn")
val KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN = property("kotlin.mpp.androidGradlePluginCompatibility.nowarn") val KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN = property("kotlin.mpp.androidGradlePluginCompatibility.nowarn")
val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION = property("kotlin.mpp.androidSourceSetLayoutVersion") val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION = property("kotlin.mpp.androidSourceSetLayoutVersion")
val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN = property("kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn") val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN = property("kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn")
@@ -22,9 +22,16 @@ import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSo
@InternalKotlinGradlePluginApi // used in integration tests @InternalKotlinGradlePluginApi // used in integration tests
object KotlinToolingDiagnostics { object KotlinToolingDiagnostics {
object HierarchicalMultiplatformFlagsWarning : ToolingDiagnosticFactory(WARNING) { /**
* This diagnostic is suppressed in kotlin-test and kotlin-stdlib.
* We should migrate the stdlib and kotlin-test from deprecated flags and then completely remove the support.
* ETA: 2.0-M1
*
* P.s. Some tests also suppress this diagnostic -- these tests should be removed together with the flags support
*/
object PreHMPPFlagsError : ToolingDiagnosticFactory(ERROR) {
operator fun invoke(usedDeprecatedFlags: List<String>) = build( operator fun invoke(usedDeprecatedFlags: List<String>) = build(
"The following properties are obsolete and will be removed in Kotlin 1.9.20:\n" + "The following properties are obsolete and no longer supported:\n" +
"${usedDeprecatedFlags.joinToString()}\n" + "${usedDeprecatedFlags.joinToString()}\n" +
"Read the details here: https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#deprecate-hmpp-properties", "Read the details here: https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#deprecate-hmpp-properties",
) )
@@ -27,7 +27,6 @@ internal fun runDeprecationDiagnostics(project: Project) {
*/ */
private fun checkAndReportDeprecatedMppProperties(project: Project) { private fun checkAndReportDeprecatedMppProperties(project: Project) {
val projectProperties = project.kotlinPropertiesProvider val projectProperties = project.kotlinPropertiesProvider
if (projectProperties.ignoreHmppDeprecationWarnings == true) return
val usedProperties = deprecatedMppProperties.mapNotNull { propertyName -> val usedProperties = deprecatedMppProperties.mapNotNull { propertyName ->
if (propertyName in propertiesSetByPlugin && projectProperties.mpp13XFlagsSetByPlugin) if (propertyName in propertiesSetByPlugin && projectProperties.mpp13XFlagsSetByPlugin)
@@ -41,7 +40,7 @@ private fun checkAndReportDeprecatedMppProperties(project: Project) {
project.kotlinToolingDiagnosticsCollector.reportOncePerGradleBuild( project.kotlinToolingDiagnosticsCollector.reportOncePerGradleBuild(
project, project,
KotlinToolingDiagnostics.HierarchicalMultiplatformFlagsWarning(usedProperties) KotlinToolingDiagnostics.PreHMPPFlagsError(usedProperties)
) )
} }
@@ -8,10 +8,9 @@
package org.jetbrains.kotlin.gradle.regressionTests package org.jetbrains.kotlin.gradle.regressionTests
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.util.buildProject import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.util.enableCompatibilityMetadataVariant import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.util.kotlin
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@@ -19,7 +18,11 @@ class KT55730CommonMainDependsOnAnotherSourceSet {
@Test @Test
fun `legacy metadata compilation should have commonMain with its depends on closure`() { fun `legacy metadata compilation should have commonMain with its depends on closure`() {
val project = buildProject { val project = buildProject {
enableCompatibilityMetadataVariant() propertiesExtension.set(PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT, "true")
propertiesExtension.set(
PropertiesProvider.PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS,
KotlinToolingDiagnostics.PreHMPPFlagsError.id
)
applyMultiplatformPlugin() applyMultiplatformPlugin()
kotlin { kotlin {
val grandCommonMain = sourceSets.create("grandCommonMain") val grandCommonMain = sourceSets.create("grandCommonMain")
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension
import org.jetbrains.kotlin.gradle.plugin.getExtension import org.jetbrains.kotlin.gradle.plugin.getExtension
@@ -133,6 +132,3 @@ fun Project.enableDependencyVerification(enabled: Boolean = true) {
else DependencyVerificationMode.OFF else DependencyVerificationMode.OFF
} }
fun Project.enableCompatibilityMetadataVariant(enabled: Boolean = true) {
propertiesExtension.set(KOTLIN_MPP_ENABLE_COMPATIBILITY_METADATA_VARIANT, enabled.toString())
}