[Gradle] Implement UserDefinedAttributesSetupAction
KT-61634
This commit is contained in:
committed by
Space Team
parent
c22a7bf802
commit
822cb7f545
-2
@@ -62,8 +62,6 @@ internal abstract class AbstractKotlinPlugin(
|
|||||||
{ compilation -> buildSourceSetProcessor(project, compilation) }
|
{ compilation -> buildSourceSetProcessor(project, compilation) }
|
||||||
)
|
)
|
||||||
|
|
||||||
applyUserDefinedAttributes(target)
|
|
||||||
|
|
||||||
rewriteMppDependenciesInPom(target)
|
rewriteMppDependenciesInPom(target)
|
||||||
|
|
||||||
configureProjectGlobalSettings(project)
|
configureProjectGlobalSettings(project)
|
||||||
|
|||||||
-2
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
|||||||
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
|
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJvmPlugin.Companion.configureCompilerOptionsForTarget
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJvmPlugin.Companion.configureCompilerOptionsForTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.applyUserDefinedAttributes
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
|
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidPluginIds
|
import org.jetbrains.kotlin.gradle.utils.androidPluginIds
|
||||||
@@ -55,7 +54,6 @@ internal open class KotlinAndroidPlugin(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { androidTarget ->
|
) { androidTarget ->
|
||||||
applyUserDefinedAttributes(androidTarget)
|
|
||||||
customizeKotlinDependencies(project)
|
customizeKotlinDependencies(project)
|
||||||
registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget))
|
registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget))
|
||||||
project.whenEvaluated { project.components.addAll(androidTarget.components) }
|
project.whenEvaluated { project.components.addAll(androidTarget.components) }
|
||||||
|
|||||||
-2
@@ -50,8 +50,6 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
|||||||
project.registerKotlinArtifactsExtension()
|
project.registerKotlinArtifactsExtension()
|
||||||
|
|
||||||
configurePublishingWithMavenPublish(project)
|
configurePublishingWithMavenPublish(project)
|
||||||
|
|
||||||
kotlinMultiplatformExtension.targets.withType(InternalKotlinTarget::class.java).all { applyUserDefinedAttributes(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+9
-3
@@ -5,10 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterEvaluateBuildscript
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterEvaluateBuildscript
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.await
|
||||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||||
import org.jetbrains.kotlin.gradle.utils.copyAttributes
|
import org.jetbrains.kotlin.gradle.utils.copyAttributes
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.forAllTargets
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.targets
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -16,9 +21,10 @@ import org.jetbrains.kotlin.gradle.utils.copyAttributes
|
|||||||
* 1. Output configurations of each target need the corresponding compilation's attributes (and, indirectly, the target's attributes)
|
* 1. Output configurations of each target need the corresponding compilation's attributes (and, indirectly, the target's attributes)
|
||||||
* 2. Resolvable configurations of each compilation need the compilation's attributes
|
* 2. Resolvable configurations of each compilation need the compilation's attributes
|
||||||
*/
|
*/
|
||||||
internal fun applyUserDefinedAttributes(target: InternalKotlinTarget) {
|
internal val UserDefinedAttributesSetupAction = KotlinProjectSetupCoroutine {
|
||||||
target.project.launchInStage(AfterEvaluateBuildscript) {
|
AfterEvaluateBuildscript.await()
|
||||||
target.kotlinComponents.flatMap { it.internal.usages }.forEach { usage ->
|
kotlinExtension.forAllTargets { target ->
|
||||||
|
target.internal.kotlinComponents.flatMap { it.internal.usages }.forEach { usage ->
|
||||||
val dependencyConfiguration = target.project.configurations.findByName(usage.dependencyConfigurationName) ?: return@forEach
|
val dependencyConfiguration = target.project.configurations.findByName(usage.dependencyConfigurationName) ?: return@forEach
|
||||||
copyAttributes(usage.compilation.attributes, dependencyConfiguration.attributes)
|
copyAttributes(usage.compilation.attributes, dependencyConfiguration.attributes)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImportSetupAction
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeResolveDependenciesTaskSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeResolveDependenciesTaskSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.GlobalProjectStructureMetadataStorageSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.mpp.GlobalProjectStructureMetadataStorageSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.SyncLanguageSettingsWithKotlinExtensionSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.mpp.SyncLanguageSettingsWithKotlinExtensionSetupAction
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.UserDefinedAttributesSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AddBuildListenerForXCodeSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AddBuildListenerForXCodeSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.LanguageSettingsSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.sources.LanguageSettingsSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubpluginSetupAction
|
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubpluginSetupAction
|
||||||
@@ -50,6 +51,8 @@ internal fun Project.registerKotlinPluginExtensions() {
|
|||||||
register(project, RegisterBuildKotlinToolingMetadataTask)
|
register(project, RegisterBuildKotlinToolingMetadataTask)
|
||||||
register(project, KotlinToolingDiagnosticsSetupAction)
|
register(project, KotlinToolingDiagnosticsSetupAction)
|
||||||
register(project, SyncLanguageSettingsWithKotlinExtensionSetupAction)
|
register(project, SyncLanguageSettingsWithKotlinExtensionSetupAction)
|
||||||
|
register(project, UserDefinedAttributesSetupAction)
|
||||||
|
|
||||||
|
|
||||||
if (isJvm || isMultiplatform) {
|
if (isJvm || isMultiplatform) {
|
||||||
register(project, ScriptingGradleSubpluginSetupAction)
|
register(project, ScriptingGradleSubpluginSetupAction)
|
||||||
@@ -100,3 +103,5 @@ private val Project.isMultiplatform get() = multiplatformExtensionOrNull != null
|
|||||||
private val Project.isJvm get() = kotlinJvmExtensionOrNull != null
|
private val Project.isJvm get() = kotlinJvmExtensionOrNull != null
|
||||||
|
|
||||||
private val Project.isJs get() = kotlinExtensionOrNull is KotlinJsProjectExtension
|
private val Project.isJs get() = kotlinExtensionOrNull is KotlinJsProjectExtension
|
||||||
|
|
||||||
|
private val Project.isAndroid get() = kotlinExtension is KotlinAndroidProjectExtension
|
||||||
+9
@@ -16,3 +16,12 @@ internal val KotlinProjectExtension.targets: Iterable<KotlinTarget>
|
|||||||
is KotlinMultiplatformExtension -> targets
|
is KotlinMultiplatformExtension -> targets
|
||||||
else -> error("Unexpected 'kotlin' extension $this")
|
else -> error("Unexpected 'kotlin' extension $this")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal fun KotlinProjectExtension.forAllTargets(action: (target: KotlinTarget) -> Unit) {
|
||||||
|
when (this) {
|
||||||
|
is KotlinSingleTargetExtension<*> -> action(this.target)
|
||||||
|
is KotlinMultiplatformExtension -> targets.all(action)
|
||||||
|
else -> error("Unexpected 'kotlin' extension $this")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user