[Gradle] Migrate KotlinGradleProjectChecker to KotlinExtensionPoint

KT-61634
This commit is contained in:
Sebastian Sellmair
2023-10-04 17:22:10 +02:00
committed by Space Team
parent 30665c3e02
commit d471a5ed4a
7 changed files with 52 additions and 43 deletions
@@ -22,7 +22,6 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.gradle.api.model.ObjectFactory
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.compilerRunner.maybeCreateCommonizerClasspathConfiguration
import org.jetbrains.kotlin.gradle.dsl.*
@@ -258,6 +257,8 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {
setupAttributeMatchingStrategy(project)
project.registerKotlinPluginExtensions()
project.startKotlinPluginLifecycle()
plugin.apply(project)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.dsl.AndroidMainSourceSetConventionsChecker
import org.jetbrains.kotlin.gradle.dsl.IosSourceSetConventionChecker
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.PlatformSourceSetConventionsChecker
import org.jetbrains.kotlin.gradle.plugin.KotlinExtensionPoint
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.*
@@ -96,27 +97,7 @@ internal interface KotlinGradleProjectChecker {
suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector)
companion object {
val ALL_CHECKERS: List<KotlinGradleProjectChecker> = listOf(
CommonMainOrTestWithDependsOnChecker,
DeprecatedKotlinNativeTargetsChecker,
MissingNativeStdlibChecker,
UnusedSourceSetsChecker,
AndroidSourceSetLayoutV1SourceSetsNotFoundChecker,
AndroidPluginWithoutAndroidTargetChecker,
NoKotlinTargetsDeclaredChecker,
DisabledCinteropCommonizationInHmppProjectChecker,
DisabledNativeTargetsChecker,
JsEnvironmentChecker,
PreHmppDependenciesUsageChecker,
ExperimentalK2UsageChecker,
KotlinSourceSetTreeDependsOnMismatchChecker,
PlatformSourceSetConventionsChecker,
AndroidMainSourceSetConventionsChecker,
IosSourceSetConventionChecker,
KotlinTargetAlreadyDeclaredChecker,
InternalGradlePropertiesUsageChecker,
WasmSourceSetsNotFoundChecker,
)
val extensionPoint = KotlinExtensionPoint<KotlinGradleProjectChecker>()
}
}
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.launch
internal fun Project.launchKotlinGradleProjectCheckers() {
val checkers = kotlinGradleProjectCheckersOverride ?: KotlinGradleProjectChecker.ALL_CHECKERS
val checkers = KotlinGradleProjectChecker.extensionPoint[project]
val context = KotlinGradleProjectCheckerContext(
project,
@@ -25,15 +25,3 @@ internal fun Project.launchKotlinGradleProjectCheckers() {
with(checker) { launch { context.runChecks(collector) } }
}
}
internal val Project.kotlinGradleProjectCheckersOverride: Collection<KotlinGradleProjectChecker>?
get() {
return if (extraProperties.has(KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE))
@Suppress("unchecked_cast")
extraProperties.get(KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE) as Collection<KotlinGradleProjectChecker>?
else
null
}
internal const val KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE = "kotlin.internal.override.checkers"
@@ -6,10 +6,51 @@
package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.AndroidMainSourceSetConventionsChecker
import org.jetbrains.kotlin.gradle.dsl.IosSourceSetConventionChecker
import org.jetbrains.kotlin.gradle.dsl.PlatformSourceSetConventionsChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.*
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.AndroidPluginWithoutAndroidTargetChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.AndroidSourceSetLayoutV1SourceSetsNotFoundChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.CommonMainOrTestWithDependsOnChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.DeprecatedKotlinNativeTargetsChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.DisabledCinteropCommonizationInHmppProjectChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.DisabledNativeTargetsChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.ExperimentalK2UsageChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.InternalGradlePropertiesUsageChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.JsEnvironmentChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.KotlinSourceSetTreeDependsOnMismatchChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.KotlinTargetAlreadyDeclaredChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.MissingNativeStdlibChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.NoKotlinTargetsDeclaredChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.PreHmppDependenciesUsageChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.UnusedSourceSetsChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.WasmSourceSetsNotFoundChecker
/**
* Active Extensions (using the [KotlinExtensionPoint] infrastructure) will be registered here by the Kotlin Gradle Plugin.
*/
internal fun Project.registerKotlinPluginExtensions() {
// No extensions available yet.
}
KotlinGradleProjectChecker.extensionPoint.apply {
register(project, CommonMainOrTestWithDependsOnChecker)
register(project, DeprecatedKotlinNativeTargetsChecker)
register(project, MissingNativeStdlibChecker)
register(project, UnusedSourceSetsChecker)
register(project, AndroidSourceSetLayoutV1SourceSetsNotFoundChecker)
register(project, AndroidPluginWithoutAndroidTargetChecker)
register(project, NoKotlinTargetsDeclaredChecker)
register(project, DisabledCinteropCommonizationInHmppProjectChecker)
register(project, DisabledNativeTargetsChecker)
register(project, JsEnvironmentChecker)
register(project, PreHmppDependenciesUsageChecker)
register(project, ExperimentalK2UsageChecker)
register(project, KotlinSourceSetTreeDependsOnMismatchChecker)
register(project, PlatformSourceSetConventionsChecker)
register(project, AndroidMainSourceSetConventionsChecker)
register(project, IosSourceSetConventionChecker)
register(project, KotlinTargetAlreadyDeclaredChecker)
register(project, InternalGradlePropertiesUsageChecker)
register(project, WasmSourceSetsNotFoundChecker)
}
}
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.ERROR
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.util.set
import org.junit.Test
class DiagnosticsReportingFunctionalTest {
@@ -161,11 +162,8 @@ private fun buildProjectWithMockedCheckers(
}
)
project.allprojects {
project.extensions.extraProperties.set(
KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE,
listOf(MockChecker, MockPerProjectChecker, MockPerBuildChecker)
)
project.allprojects { currentProject ->
KotlinGradleProjectChecker.extensionPoint[currentProject] = listOf(MockChecker, MockPerProjectChecker, MockPerBuildChecker)
}
project.block()
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.tooling.core.UnsafeApi
* Completely overwrites the currently registered extensions on this [KotlinExtensionPoint] in this project.
*/
@OptIn(UnsafeApi::class)
fun <T> KotlinExtensionPoint<T>.set(project: Project, extensions: List<T>) {
operator fun <T> KotlinExtensionPoint<T>.set(project: Project, extensions: List<T>) {
(this as KotlinExtensionPointInternal<T>)
set(project, extensions)
}