[Gradle] Warn about kotlinArtifacts DSL usage
^KT-58029 Verification Pending
This commit is contained in:
committed by
Space Team
parent
4c95797067
commit
de56f788f6
+5
@@ -42,6 +42,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_SLOW_SOURCES_JAR_RESOLVER
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_DEPENDENCY_PROPAGATION
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_USE_XCODE_MESSAGE_STYLE
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_RUN_COMPILER_VIA_BUILD_TOOLS_API
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_STDLIB_DEFAULT_DEPENDENCY
|
||||
@@ -528,6 +529,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
val suppressedGradlePluginErrors: List<String>
|
||||
get() = property(PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS)?.split(",").orEmpty()
|
||||
|
||||
val suppressExperimentalArtifactsDslWarning: Boolean
|
||||
get() = booleanProperty(KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING) ?: false
|
||||
|
||||
/**
|
||||
* Retrieves a comma-separated list of browsers to use when running karma tests for [target]
|
||||
* @see KOTLIN_JS_KARMA_BROWSERS
|
||||
@@ -624,6 +628,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
const val KOTLIN_SUPPRESS_GRADLE_PLUGIN_WARNINGS = "kotlin.suppressGradlePluginWarnings"
|
||||
const val KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS = "kotlin.internal.suppressGradlePluginErrors"
|
||||
const val KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS = "kotlin.native.ignoreDisabledTargets"
|
||||
const val KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING = "kotlin.native.suppressExperimentalArtifactsDslWarning"
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+10
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_APPLY_DEFAULT_HIERARCHY_TEMPLATE
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
||||
@@ -520,6 +521,15 @@ object KotlinToolingDiagnostics {
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
object ExperimentalArtifactsDslUsed : ToolingDiagnosticFactory(WARNING) {
|
||||
operator fun invoke() = build(
|
||||
"""
|
||||
'kotlinArtifacts' DSL is experimental and may be changed in the future.
|
||||
To suppress this warning add '$KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING=true' to your gradle.properties
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {
|
||||
|
||||
+7
@@ -10,6 +10,9 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeArtifactDSL.ExperimentalArtifactDsl
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnosticOncePerProject
|
||||
import org.jetbrains.kotlin.gradle.utils.castIsolatedKotlinPluginClassLoaderAware
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -66,6 +69,10 @@ abstract class KotlinNativeArtifactDSLImpl @Inject constructor(private val proje
|
||||
}
|
||||
|
||||
private inline fun <reified T : KotlinArtifactConfig> addKotlinArtifact(name: String, configure: Action<in T>) {
|
||||
if (!project.kotlinPropertiesProvider.suppressExperimentalArtifactsDslWarning) {
|
||||
project.reportDiagnosticOncePerProject(KotlinToolingDiagnostics.ExperimentalArtifactsDslUsed())
|
||||
}
|
||||
|
||||
//create via newInstance for extensibility
|
||||
val config: T = project.objects.newInstance(T::class.java, name)
|
||||
project.kotlinArtifactsExtension.artifactConfigs.add(config)
|
||||
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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.unitTests
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeArtifactDSL
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.ExperimentalArtifactsDslUsed
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.jetbrains.kotlin.gradle.util.assertContainsDiagnostic
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.junit.Assume.assumeTrue
|
||||
import kotlin.test.BeforeTest
|
||||
import kotlin.test.Test
|
||||
|
||||
@Suppress("FunctionName")
|
||||
@OptIn(KotlinNativeArtifactDSL.ExperimentalArtifactDsl::class)
|
||||
class KotlinArtifactsDslTests {
|
||||
|
||||
@Test
|
||||
fun `usage emits a warning`() {
|
||||
val project = buildProjectWithMPP {
|
||||
kotlin {
|
||||
iosArm64()
|
||||
iosSimulatorArm64()
|
||||
}
|
||||
|
||||
kotlinArtifacts {
|
||||
Native.Framework("frame") {
|
||||
it.target = iosArm64
|
||||
}
|
||||
Native.XCFramework("xc") {
|
||||
it.targets = setOf(iosArm64, iosSimulatorArm64)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project.evaluate()
|
||||
project.assertContainsDiagnostic(ExperimentalArtifactsDslUsed)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `property suppresses the warning`() {
|
||||
val project = buildProjectWithMPP {
|
||||
propertiesExtension.set(KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING, "true")
|
||||
|
||||
kotlin {
|
||||
iosArm64()
|
||||
iosSimulatorArm64()
|
||||
}
|
||||
|
||||
kotlinArtifacts {
|
||||
Native.Framework("frame") {
|
||||
it.target = iosArm64
|
||||
}
|
||||
Native.XCFramework("xc") {
|
||||
it.targets = setOf(iosArm64, iosSimulatorArm64)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project.evaluate()
|
||||
project.assertNoDiagnostics(ExperimentalArtifactsDslUsed)
|
||||
}
|
||||
|
||||
}
|
||||
+7
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
|
||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.getExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionImpl
|
||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.kotlinArtifactsExtension
|
||||
import org.jetbrains.kotlin.gradle.unitTests.kpm.applyKpmPlugin
|
||||
|
||||
fun buildProject(
|
||||
@@ -70,6 +72,11 @@ fun Project.kotlin(code: KotlinMultiplatformExtension.() -> Unit) {
|
||||
kotlin.code()
|
||||
}
|
||||
|
||||
fun Project.kotlinArtifacts(code: KotlinArtifactsExtensionImpl.() -> Unit) {
|
||||
val kotlinArtifacts = project.kotlinArtifactsExtension as KotlinArtifactsExtensionImpl
|
||||
kotlinArtifacts.code()
|
||||
}
|
||||
|
||||
fun Project.androidLibrary(code: LibraryExtension.() -> Unit) {
|
||||
plugins.findPlugin("com.android.library") ?: plugins.apply("com.android.library")
|
||||
val androidExtension = project.extensions.getByName("android") as LibraryExtension
|
||||
|
||||
+2
-2
@@ -115,8 +115,8 @@ internal fun Collection<ToolingDiagnostic>.assertDiagnostics(vararg diagnostics:
|
||||
fail(errorMessage)
|
||||
}
|
||||
|
||||
internal fun Project.assertNoDiagnostics(id: String) {
|
||||
kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this).assertNoDiagnostics(id)
|
||||
internal fun Project.assertNoDiagnostics(factory: ToolingDiagnosticFactory) {
|
||||
kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this).assertNoDiagnostics(factory.id)
|
||||
}
|
||||
|
||||
internal fun Collection<ToolingDiagnostic>.assertNoDiagnostics(id: String) {
|
||||
|
||||
Reference in New Issue
Block a user