[Gradle] Migrate reporting of K/N targets disabled on current host
This commit is contained in:
+4
-5
@@ -11,8 +11,7 @@ import org.gradle.api.logging.configuration.WarningMode
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jdom.input.SAXBuilder
|
||||
import org.jetbrains.kotlin.gradle.*
|
||||
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME
|
||||
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX
|
||||
import org.jetbrains.kotlin.gradle.internals.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS_PROPERTY
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
@@ -949,11 +948,11 @@ class GeneralNativeIT : BaseGradleIT() {
|
||||
hostHaveUnsupportedTarget()
|
||||
build {
|
||||
assertSuccessful()
|
||||
assertEquals(1, output.lines().count { DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX in it })
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.DisabledKotlinNativeTargets)
|
||||
}
|
||||
build("-P$DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME=true") {
|
||||
build("-P$KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS_PROPERTY=true") {
|
||||
assertSuccessful()
|
||||
assertNotContains(DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.DisabledKotlinNativeTargets)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION
|
||||
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_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
|
||||
@@ -50,7 +51,6 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnosticOncePerBui
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinIrJsGeneratedTSValidationStrategy
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrOutputGranularity
|
||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
@@ -240,7 +240,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
get() = booleanProperty("$jsCompilerProperty.nowarn") ?: false
|
||||
|
||||
val ignoreDisabledNativeTargets: Boolean?
|
||||
get() = booleanProperty(DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME)
|
||||
get() = booleanProperty(KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS)
|
||||
|
||||
val ignoreAbsentAndroidMultiplatformTarget: Boolean
|
||||
get() = booleanProperty("kotlin.mpp.absentAndroidTarget.nowarn") ?: false
|
||||
@@ -618,6 +618,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
const val KOTLIN_INTERNAL_VERBOSE_DIAGNOSTICS = "kotlin.internal.verboseDiagnostics"
|
||||
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"
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+2
-1
@@ -102,7 +102,8 @@ internal interface KotlinGradleProjectChecker {
|
||||
TargetsWithAmbiguousConsumableConfigurationsChecker,
|
||||
AndroidPluginWithoutAndroidTargetChecker,
|
||||
NoKotlinTargetsDeclaredChecker,
|
||||
DisabledCinteropCommonizationInHmppProjectChecker
|
||||
DisabledCinteropCommonizationInHmppProjectChecker,
|
||||
DisabledNativeTargetsChecker
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||
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
|
||||
@@ -269,4 +270,14 @@ object KotlinToolingDiagnostics {
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
object DisabledKotlinNativeTargets : ToolingDiagnosticFactory(WARNING) {
|
||||
operator fun invoke(disabledTargetNames: Collection<String>): ToolingDiagnostic = build(
|
||||
"""
|
||||
The following Kotlin/Native targets cannot be built on this machine and are disabled:
|
||||
${disabledTargetNames.joinToString()}
|
||||
To hide this message, add '$KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS=true' to the Gradle properties.
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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.plugin.diagnostics.checkers
|
||||
|
||||
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
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
||||
|
||||
internal object DisabledNativeTargetsChecker : KotlinGradleProjectChecker {
|
||||
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
||||
if (multiplatformExtension == null || kotlinPropertiesProvider.ignoreDisabledNativeTargets == true) return
|
||||
|
||||
val disabledTargets = multiplatformExtension.awaitTargets()
|
||||
.filterIsInstance<KotlinNativeTarget>()
|
||||
.filter { !it.konanTarget.enabledOnCurrentHost }
|
||||
.map { it.name }
|
||||
|
||||
if (disabledTargets.isNotEmpty()) {
|
||||
collector.reportOncePerGradleProject(project, KotlinToolingDiagnostics.DisabledKotlinNativeTargets(disabledTargets))
|
||||
}
|
||||
}
|
||||
}
|
||||
-54
@@ -26,57 +26,3 @@ internal abstract class AggregateReporter {
|
||||
|
||||
protected abstract fun printWarning(project: Project)
|
||||
}
|
||||
|
||||
internal object DisabledNativeTargetsReporter : AggregateReporter() {
|
||||
private const val EXTRA_PROPERTY_NAME = "org.jetbrains.kotlin.native.disabledTargets"
|
||||
|
||||
internal const val WARNING_PREFIX = "Some Kotlin/Native targets cannot be built on this "
|
||||
|
||||
internal const val DISABLE_WARNING_PROPERTY_NAME = "kotlin.native.ignoreDisabledTargets"
|
||||
|
||||
fun reportDisabledTarget(project: Project, target: KotlinNativeTarget, supportedHosts: Collection<KonanTarget>) {
|
||||
val disabledTargetsList = getOrRegisterDisabledTargets(project)
|
||||
disabledTargetsList.add(DisabledTarget(project, target, supportedHosts))
|
||||
}
|
||||
|
||||
private data class DisabledTarget(val project: Project, val target: KotlinNativeTarget, val supportedHosts: Collection<KonanTarget>)
|
||||
|
||||
private fun getOrRegisterDisabledTargets(project: Project) =
|
||||
getOrRegisterData<DisabledTarget>(project, EXTRA_PROPERTY_NAME)
|
||||
|
||||
override fun printWarning(project: Project) {
|
||||
if (PropertiesProvider(project).ignoreDisabledNativeTargets == true) {
|
||||
return
|
||||
}
|
||||
|
||||
val disabledTargetsList = getOrRegisterDisabledTargets(project)
|
||||
|
||||
@Suppress("UselessCallOnCollection") // filterIsInstance helps against potential class loaders conflict or misconfiguration.
|
||||
val disabledTargetGroups = disabledTargetsList
|
||||
.filterIsInstance<DisabledTarget>()
|
||||
.groupBy { it.project }
|
||||
.mapValues { (_, disabledTargetsInProject) -> disabledTargetsInProject.groupBy { it.supportedHosts } }
|
||||
.toSortedMap(compareBy { it.path })
|
||||
|
||||
project.logger.warn(buildString {
|
||||
appendLine("\n$WARNING_PREFIX${HostManager.host} machine and are disabled:")
|
||||
|
||||
disabledTargetGroups.forEach { (targetProject, targetsBySupportedHosts) ->
|
||||
appendLine(
|
||||
" * In project '${targetProject.path}':"
|
||||
)
|
||||
targetsBySupportedHosts.forEach { (supportedHosts, disabledTargets) ->
|
||||
append(" * target" + "s".takeIf { disabledTargets.size > 1 }.orEmpty() + " ")
|
||||
append(disabledTargets.joinToString { "'${it.target.name}'" })
|
||||
|
||||
val supportedHostsString = when (supportedHosts.size) {
|
||||
1 -> "a ${supportedHosts.single()} host"
|
||||
else -> "one of the hosts: ${supportedHosts.joinToString(", ")}"
|
||||
}
|
||||
appendLine(" (can be built with $supportedHostsString)")
|
||||
}
|
||||
}
|
||||
appendLine("To hide this message, add '$DISABLE_WARNING_PROPERTY_NAME=true' to the Gradle properties.")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
-9
@@ -11,8 +11,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
|
||||
import org.jetbrains.kotlin.gradle.utils.setupNativeCompiler
|
||||
@@ -66,13 +64,6 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
||||
project.setupCInteropPropagatedDependencies()
|
||||
}
|
||||
|
||||
if (!konanTarget.enabledOnCurrentHost) {
|
||||
with(HostManager()) {
|
||||
val supportedHosts = enabledByHost.filterValues { konanTarget in it }.keys
|
||||
DisabledNativeTargetsReporter.reportDisabledTarget(project, result, supportedHosts)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -5,18 +5,16 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.internals
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.DIAGNOSTIC_SEPARATOR
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinProjectStructureMetadata
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.parseKotlinSourceSetMetadataFromJson
|
||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||
|
||||
fun parseKotlinSourceSetMetadataFromJson(json: String): KotlinProjectStructureMetadata = parseKotlinSourceSetMetadataFromJson(json)
|
||||
|
||||
const val MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME = MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME
|
||||
|
||||
const val DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME = DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME
|
||||
|
||||
const val DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX: String = DisabledNativeTargetsReporter.WARNING_PREFIX
|
||||
const val KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS_PROPERTY = KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
|
||||
|
||||
const val VERBOSE_DIAGNOSTIC_SEPARATOR = DIAGNOSTIC_SEPARATOR
|
||||
|
||||
Reference in New Issue
Block a user