diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinExtensionPoints.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinExtensionPoints.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 3865186226d..b9782598009 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -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) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt index 3ad76dcd0a7..7687b80a9e5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt @@ -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 = listOf( - CommonMainOrTestWithDependsOnChecker, - DeprecatedKotlinNativeTargetsChecker, - MissingNativeStdlibChecker, - UnusedSourceSetsChecker, - AndroidSourceSetLayoutV1SourceSetsNotFoundChecker, - AndroidPluginWithoutAndroidTargetChecker, - NoKotlinTargetsDeclaredChecker, - DisabledCinteropCommonizationInHmppProjectChecker, - DisabledNativeTargetsChecker, - JsEnvironmentChecker, - PreHmppDependenciesUsageChecker, - ExperimentalK2UsageChecker, - KotlinSourceSetTreeDependsOnMismatchChecker, - PlatformSourceSetConventionsChecker, - AndroidMainSourceSetConventionsChecker, - IosSourceSetConventionChecker, - KotlinTargetAlreadyDeclaredChecker, - InternalGradlePropertiesUsageChecker, - WasmSourceSetsNotFoundChecker, - ) + val extensionPoint = KotlinExtensionPoint() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectCheckersRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectCheckersRunner.kt index 53f375a1690..eb9d0f2f568 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectCheckersRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectCheckersRunner.kt @@ -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? - get() { - return if (extraProperties.has(KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE)) - @Suppress("unchecked_cast") - extraProperties.get(KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE) as Collection? - else - null - } - - -internal const val KOTLIN_GRADLE_PROJECT_CHECKERS_OVERRIDE = "kotlin.internal.override.checkers" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index e9554da2428..f15462d64b9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -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. -} \ No newline at end of file + 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) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/DiagnosticsReportingFunctionalTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/DiagnosticsReportingFunctionalTest.kt index 79cc7d00202..a15f65ddc3a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/DiagnosticsReportingFunctionalTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/DiagnosticsReportingFunctionalTest.kt @@ -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() diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/extensionPointUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/extensionPointUtils.kt index a466205187f..3caf769ff71 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/extensionPointUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/extensionPointUtils.kt @@ -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 KotlinExtensionPoint.set(project: Project, extensions: List) { +operator fun KotlinExtensionPoint.set(project: Project, extensions: List) { (this as KotlinExtensionPointInternal) set(project, extensions) }