From 6afe7162386ad8ce1c2174ced7f81e3a39bba660 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Tue, 17 Oct 2023 11:24:50 +0200 Subject: [PATCH] [Gradle] Implement CustomizeKotlinDependenciesSetupAction KT-61634 --- .../internal/KotlinDependenciesManagement.kt | 15 ++++---- .../kotlinDomApiDependencyManagement.kt | 19 +++------- .../kotlinTestDependencyManagement.kt | 36 +++++-------------- .../internal/stdlibDependencyManagement.kt | 34 +++++------------- .../gradle/plugin/AbstractKotlinPlugin.kt | 6 ---- .../gradle/plugin/KotlinAndroidPlugin.kt | 2 -- .../plugin/mpp/KotlinMultiplatformPlugin.kt | 2 -- .../plugin/registerKotlinPluginExtensions.kt | 2 ++ .../gradle/targets/js/KotlinJsPlugin.kt | 2 -- 9 files changed, 31 insertions(+), 87 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt index 56eb30516f3..1978b2a5446 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt @@ -12,9 +12,10 @@ import org.gradle.api.artifacts.ExternalDependency import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull -import org.jetbrains.kotlin.gradle.dsl.topLevelExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles +import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupAction import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget @@ -27,25 +28,25 @@ internal const val KOTLIN_COMPILER_EMBEDDABLE = "kotlin-compiler-embeddable" internal const val KOTLIN_BUILD_TOOLS_API_IMPL = "kotlin-build-tools-impl" internal const val PLATFORM_INTEGERS_SUPPORT_LIBRARY = "platform-integers" -internal fun customizeKotlinDependencies(project: Project) { - val topLevelExtension = project.topLevelExtension +internal val CustomizeKotlinDependenciesSetupAction = KotlinProjectSetupAction { + val kotlinExtension = project.kotlinExtension val propertiesProvider = PropertiesProvider(project) val coreLibrariesVersion = project.objects.providerWithLazyConvention { - topLevelExtension.coreLibrariesVersion + kotlinExtension.coreLibrariesVersion } if (propertiesProvider.stdlibDefaultDependency) - project.configureStdlibDefaultDependency(topLevelExtension, coreLibrariesVersion) + project.configureStdlibDefaultDependency(kotlinExtension, coreLibrariesVersion) if (propertiesProvider.kotlinTestInferJvmVariant) { // TODO: extend this logic to PM20 project.configureKotlinTestDependency( - topLevelExtension, + kotlinExtension, coreLibrariesVersion, ) } if (propertiesProvider.stdlibDomApiIncluded) { - project.configureKotlinDomApiDefaultDependency(topLevelExtension, coreLibrariesVersion) + project.configureKotlinDomApiDefaultDependency(kotlinExtension, coreLibrariesVersion) } project.configurations.configureDefaultVersionsResolutionStrategy(coreLibrariesVersion) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinDomApiDependencyManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinDomApiDependencyManagement.kt index 45db121cecc..d14464d8aab 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinDomApiDependencyManagement.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinDomApiDependencyManagement.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.npm.SemVer +import org.jetbrains.kotlin.gradle.utils.forAllTargets private const val KOTLIN_DOM_API_MODULE_NAME = "kotlin-dom-api-compat" @@ -29,23 +30,11 @@ private val kotlin190Version = SemVer(1.toBigInteger(), 9.toBigInteger(), 0.toBi private fun isAtLeast1_9_0(version: String) = SemVer.fromGradleRichVersion(version) >= kotlin190Version internal fun Project.configureKotlinDomApiDefaultDependency( - topLevelExtension: KotlinTopLevelExtension, + kotlinExtension: KotlinProjectExtension, coreLibrariesVersion: Provider ) { - when (topLevelExtension) { - is KotlinJsProjectExtension -> topLevelExtension.registerTargetObserver { target -> - target?.addKotlinDomApiDependency(configurations, dependencies, coreLibrariesVersion) - } - - is KotlinSingleTargetExtension<*> -> topLevelExtension - .target - .addKotlinDomApiDependency(configurations, dependencies, coreLibrariesVersion) - - is KotlinMultiplatformExtension -> topLevelExtension - .targets - .configureEach { target -> - target.addKotlinDomApiDependency(configurations, dependencies, coreLibrariesVersion) - } + kotlinExtension.forAllTargets { target -> + target.addKotlinDomApiDependency(configurations, dependencies, coreLibrariesVersion) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinTestDependencyManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinTestDependencyManagement.kt index 160ad22cf5c..b52c7e29f5d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinTestDependencyManagement.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kotlinTestDependencyManagement.kt @@ -22,10 +22,7 @@ import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.junit.JUnitOptions import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions import org.gradle.api.tasks.testing.testng.TestNGOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension +import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.execution.KotlinAggregateExecutionSource import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation @@ -36,6 +33,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.SemVer import org.jetbrains.kotlin.gradle.targets.jvm.JvmCompilationsTestRunSource import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun +import org.jetbrains.kotlin.gradle.utils.forAllTargets import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName private val Dependency.isKotlinTestRootDependency: Boolean @@ -48,34 +46,16 @@ private fun isAtLeast1_5(version: String) = SemVer.fromGradleRichVersion(version private val jvmPlatforms = setOf(KotlinPlatformType.jvm, KotlinPlatformType.androidJvm) internal fun Project.configureKotlinTestDependency( - topLevelExtension: KotlinTopLevelExtension, + kotlinExtension: KotlinProjectExtension, coreLibrariesVersion: Provider, ) { - when (topLevelExtension) { - is KotlinJsProjectExtension -> topLevelExtension.registerTargetObserver { target -> - target?.configureKotlinTestDependency( - configurations, - coreLibrariesVersion, - dependencies, - tasks - ) - } - - is KotlinSingleTargetExtension<*> -> topLevelExtension.target.configureKotlinTestDependency( + kotlinExtension.forAllTargets { target -> + target.configureKotlinTestDependency( configurations, coreLibrariesVersion, dependencies, tasks ) - - is KotlinMultiplatformExtension -> topLevelExtension.targets.configureEach { target -> - target.configureKotlinTestDependency( - configurations, - coreLibrariesVersion, - dependencies, - tasks - ) - } } } @@ -83,7 +63,7 @@ private fun KotlinTarget.configureKotlinTestDependency( configurations: ConfigurationContainer, coreLibrariesVersion: Provider, dependencyHandler: DependencyHandler, - tasks: TaskContainer + tasks: TaskContainer, ) { compilations.configureEach { compilation -> val platformType = compilation.platformType @@ -121,7 +101,7 @@ private fun Configuration.maybeAddTestDependencyCapability( compilation: KotlinCompilation<*>, coreLibrariesVersion: Provider, dependencyHandler: DependencyHandler, - tasks: TaskContainer + tasks: TaskContainer, ) { withDependencies { dependencies -> val testRootDependency = allNonProjectDependencies() @@ -202,7 +182,7 @@ private fun testFrameworkOf(testTask: Test): KotlinTestJvmFramework = when (test } private fun KotlinTargetWithTests<*, *>.findTestRunsByCompilation( - byCompilation: KotlinCompilation<*> + byCompilation: KotlinCompilation<*>, ): NamedDomainObjectSet> { fun KotlinExecution.ExecutionSource.isProducedFromTheCompilation(): Boolean = when (this) { is CompilationExecutionSource<*> -> compilation == byCompilation diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt index 17c729ba5cd..a1c2f123029 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurati import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.npm.SemVer +import org.jetbrains.kotlin.gradle.utils.forAllTargets import org.jetbrains.kotlin.gradle.utils.withType internal const val KOTLIN_STDLIB_COMMON_MODULE_NAME = "kotlin-stdlib-common" @@ -37,33 +38,16 @@ internal const val KOTLIN_STDLIB_JS_MODULE_NAME = "kotlin-stdlib-js" internal const val KOTLIN_ANDROID_JVM_STDLIB_MODULE_NAME = KOTLIN_STDLIB_MODULE_NAME internal fun Project.configureStdlibDefaultDependency( - topLevelExtension: KotlinTopLevelExtension, + kotlinExtension: KotlinProjectExtension, coreLibrariesVersion: Provider, ) { - when (topLevelExtension) { - is KotlinJsProjectExtension -> topLevelExtension.registerTargetObserver { target -> - target?.addStdlibDependency( - configurations, - dependencies, - coreLibrariesVersion, - false, - ) - } - - is KotlinSingleTargetExtension<*> -> topLevelExtension - .target - .addStdlibDependency( - configurations, - dependencies, - coreLibrariesVersion, - false - ) - - is KotlinMultiplatformExtension -> topLevelExtension - .targets - .configureEach { target -> - target.addStdlibDependency(configurations, dependencies, coreLibrariesVersion, true) - } + kotlinExtension.forAllTargets { target -> + target.addStdlibDependency( + configurations, + dependencies, + coreLibrariesVersion, + isMppProject = kotlinExtension is KotlinMultiplatformExtension, + ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt index 8a86291ee2b..0577c481703 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt @@ -21,7 +21,6 @@ import org.gradle.jvm.tasks.Jar import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.dsl.KotlinSingleJavaTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfigurator @@ -64,7 +63,6 @@ internal abstract class AbstractKotlinPlugin( rewriteMppDependenciesInPom(target) - configureProjectGlobalSettings(project) configureClassInspectionForIC(project) registry.register(KotlinModelBuilder(kotlinPluginVersion, null)) @@ -151,10 +149,6 @@ internal abstract class AbstractKotlinPlugin( companion object { private const val INSPECT_IC_CLASSES_TASK_NAME = "inspectClassesForKotlinIC" - fun configureProjectGlobalSettings(project: Project) { - customizeKotlinDependencies(project) - } - fun configureTarget( target: KotlinWithJavaTarget<*, *>, buildSourceSetProcessor: (KotlinCompilation<*>) -> KotlinSourceSetProcessor<*> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt index de308e61bc0..fc1970c507e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder import org.jetbrains.kotlin.gradle.plugin.KotlinJvmPlugin.Companion.configureCompilerOptionsForTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget @@ -54,7 +53,6 @@ internal open class KotlinAndroidPlugin( } } ) { androidTarget -> - customizeKotlinDependencies(project) registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget)) project.whenEvaluated { project.components.addAll(androidTarget.components) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index ad8e8827691..cab2251044a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -9,7 +9,6 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension -import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.mpp.internal.runDeprecationDiagnostics import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset @@ -28,7 +27,6 @@ class KotlinMultiplatformPlugin : Plugin { project.plugins.apply(JavaBasePlugin::class.java) setupDefaultPresets(project) - customizeKotlinDependencies(project) } fun setupDefaultPresets(project: Project) { 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 0b2f0d9c8c7..46deb969cdc 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 @@ -11,6 +11,7 @@ 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.dsl.multiplatformExtensionOrNull +import org.jetbrains.kotlin.gradle.internal.CustomizeKotlinDependenciesSetupAction import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsSetupAction import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.AndroidPluginWithoutAndroidTargetChecker @@ -57,6 +58,7 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, KotlinToolingDiagnosticsSetupAction) register(project, SyncLanguageSettingsWithKotlinExtensionSetupAction) register(project, UserDefinedAttributesSetupAction) + register(project, CustomizeKotlinDependenciesSetupAction) if (isJvm || isMultiplatform) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt index 78bbccdfbaa..729fe169216 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt @@ -10,7 +10,6 @@ import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.mpp.compilerOptions @@ -31,7 +30,6 @@ open class KotlinJsPlugin: Plugin { project.enableKgpDependencyResolution(isEnabled = false) val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension - customizeKotlinDependencies(project) kotlinExtension.apply { irPreset = KotlinJsIrSingleTargetPreset(project)