[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.Project
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging import org.gradle.api.logging.Logging
import org.gradle.api.model.ObjectFactory
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.compilerRunner.maybeCreateCommonizerClasspathConfiguration import org.jetbrains.kotlin.compilerRunner.maybeCreateCommonizerClasspathConfiguration
import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.dsl.*
@@ -258,6 +257,8 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {
setupAttributeMatchingStrategy(project) setupAttributeMatchingStrategy(project)
project.registerKotlinPluginExtensions()
project.startKotlinPluginLifecycle() project.startKotlinPluginLifecycle()
plugin.apply(project) 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.IosSourceSetConventionChecker
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.PlatformSourceSetConventionsChecker 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.KotlinPluginLifecycle
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.* import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.*
@@ -96,27 +97,7 @@ internal interface KotlinGradleProjectChecker {
suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector)
companion object { companion object {
val ALL_CHECKERS: List<KotlinGradleProjectChecker> = listOf( val extensionPoint = KotlinExtensionPoint<KotlinGradleProjectChecker>()
CommonMainOrTestWithDependsOnChecker,
DeprecatedKotlinNativeTargetsChecker,
MissingNativeStdlibChecker,
UnusedSourceSetsChecker,
AndroidSourceSetLayoutV1SourceSetsNotFoundChecker,
AndroidPluginWithoutAndroidTargetChecker,
NoKotlinTargetsDeclaredChecker,
DisabledCinteropCommonizationInHmppProjectChecker,
DisabledNativeTargetsChecker,
JsEnvironmentChecker,
PreHmppDependenciesUsageChecker,
ExperimentalK2UsageChecker,
KotlinSourceSetTreeDependsOnMismatchChecker,
PlatformSourceSetConventionsChecker,
AndroidMainSourceSetConventionsChecker,
IosSourceSetConventionChecker,
KotlinTargetAlreadyDeclaredChecker,
InternalGradlePropertiesUsageChecker,
WasmSourceSetsNotFoundChecker,
)
} }
} }
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.launch import org.jetbrains.kotlin.gradle.plugin.launch
internal fun Project.launchKotlinGradleProjectCheckers() { internal fun Project.launchKotlinGradleProjectCheckers() {
val checkers = kotlinGradleProjectCheckersOverride ?: KotlinGradleProjectChecker.ALL_CHECKERS val checkers = KotlinGradleProjectChecker.extensionPoint[project]
val context = KotlinGradleProjectCheckerContext( val context = KotlinGradleProjectCheckerContext(
project, project,
@@ -25,15 +25,3 @@ internal fun Project.launchKotlinGradleProjectCheckers() {
with(checker) { launch { context.runChecks(collector) } } 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 package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project 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. * Active Extensions (using the [KotlinExtensionPoint] infrastructure) will be registered here by the Kotlin Gradle Plugin.
*/ */
internal fun Project.registerKotlinPluginExtensions() { 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.ERROR
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
import org.jetbrains.kotlin.gradle.plugin.extraProperties import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.util.set
import org.junit.Test import org.junit.Test
class DiagnosticsReportingFunctionalTest { class DiagnosticsReportingFunctionalTest {
@@ -161,11 +162,8 @@ private fun buildProjectWithMockedCheckers(
} }
) )
project.allprojects { project.allprojects { currentProject ->
project.extensions.extraProperties.set( KotlinGradleProjectChecker.extensionPoint[currentProject] = listOf(MockChecker, MockPerProjectChecker, MockPerBuildChecker)
KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE,
listOf(MockChecker, MockPerProjectChecker, MockPerBuildChecker)
)
} }
project.block() 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. * Completely overwrites the currently registered extensions on this [KotlinExtensionPoint] in this project.
*/ */
@OptIn(UnsafeApi::class) @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>) (this as KotlinExtensionPointInternal<T>)
set(project, extensions) set(project, extensions)
} }