Improve the creation of resolvable resources configuration
* Remove type casting for KotlinJsIrTarget * Only create a resolvable configuration when the appropriate strategy is used ^KT-65540
This commit is contained in:
committed by
Space Team
parent
848cca03c0
commit
9f6fb715dd
+1
-1
@@ -814,7 +814,7 @@ object KotlinToolingDiagnostics {
|
||||
)
|
||||
}
|
||||
|
||||
object MissingConfigurationForWasmTarget : ToolingDiagnosticFactory(ERROR) {
|
||||
object MissingRuntimeDependencyConfigurationForWasmTarget : ToolingDiagnosticFactory(ERROR) {
|
||||
operator fun invoke(targetName: String) = build(
|
||||
"""
|
||||
Resources will not be resolved for $targetName as it is missing runtimeDependencyConfiguration.
|
||||
|
||||
+29
-18
@@ -5,17 +5,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.attributes.Bundling
|
||||
import org.gradle.api.attributes.Category
|
||||
import org.gradle.api.attributes.LibraryElements
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationConfigurationsContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationConfigurationsContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.configureResourcesPublicationAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.javaSourceSets
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublicationImpl.Companion.RESOURCES_PATH
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.resolve.KotlinTargetResourcesResolutionStrategy
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.METADATA_CONFIGURATION_NAME_SUFFIX
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
@@ -23,9 +26,16 @@ import org.jetbrains.kotlin.gradle.utils.*
|
||||
internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory :
|
||||
KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory {
|
||||
|
||||
object WithRuntime : DefaultKotlinCompilationDependencyConfigurationsFactory() {
|
||||
class WithRuntime(
|
||||
private val withResourcesConfigurationExtending: (runtimeDependencyConfiguration: Configuration?, compileDependencyConfiguration: Configuration) -> (Configuration?) = { _, _ -> null },
|
||||
) : DefaultKotlinCompilationDependencyConfigurationsFactory() {
|
||||
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer {
|
||||
return KotlinCompilationDependencyConfigurationsContainer(target, compilationName, withRuntime = true)
|
||||
return KotlinCompilationDependencyConfigurationsContainer(
|
||||
target,
|
||||
compilationName,
|
||||
withRuntime = true,
|
||||
withResourcesConfigurationExtending = withResourcesConfigurationExtending,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +57,7 @@ internal object NativeKotlinCompilationDependencyConfigurationsFactory :
|
||||
naming = naming,
|
||||
withRuntime = false,
|
||||
withHostSpecificMetadata = true,
|
||||
withResources = true,
|
||||
withResourcesConfigurationExtending = { _, compileDependencyConfiguration -> compileDependencyConfiguration },
|
||||
compileClasspathConfigurationName = naming.name("compileKlibraries")
|
||||
)
|
||||
}
|
||||
@@ -87,7 +97,8 @@ private const val compileClasspath = "compileClasspath"
|
||||
private const val runtimeClasspath = "runtimeClasspath"
|
||||
|
||||
private fun KotlinCompilationDependencyConfigurationsContainer(
|
||||
target: KotlinTarget, compilationName: String, withRuntime: Boolean, withHostSpecificMetadata: Boolean = false, withResources: Boolean = false,
|
||||
target: KotlinTarget, compilationName: String, withRuntime: Boolean, withHostSpecificMetadata: Boolean = false,
|
||||
withResourcesConfigurationExtending: (runtimeDependencyConfiguration: Configuration?, compileDependencyConfiguration: Configuration) -> (Configuration?) = { _, _ -> null },
|
||||
naming: ConfigurationNaming = ConfigurationNaming.Default(target, compilationName),
|
||||
apiConfigurationName: String = naming.name(compilation, API),
|
||||
implementationConfigurationName: String = naming.name(compilation, IMPLEMENTATION),
|
||||
@@ -204,22 +215,22 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
|
||||
description = "Kotlin compiler plugins for $compilation"
|
||||
}
|
||||
|
||||
val resourcesConfiguration = if (withResources || target is KotlinJsIrTarget) {
|
||||
target.project.configurations.maybeCreateResolvable(resourcesPathConfigurationName).apply {
|
||||
// Inherit from compile dependency configuration, i.e. from the configuration that consumes apiElements
|
||||
if (target is KotlinJsIrTarget) {
|
||||
extendsFrom(runtimeDependencyConfiguration)
|
||||
} else {
|
||||
extendsFrom(compileDependencyConfiguration)
|
||||
val resourcesConfiguration = when (target.project.kotlinPropertiesProvider.mppResourcesResolutionStrategy) {
|
||||
KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration -> withResourcesConfigurationExtending(
|
||||
runtimeDependencyConfiguration,
|
||||
compileDependencyConfiguration,
|
||||
)?.let { configurationToExtend ->
|
||||
target.project.configurations.maybeCreateResolvable(resourcesPathConfigurationName).apply {
|
||||
extendsFrom(configurationToExtend)
|
||||
isVisible = false
|
||||
|
||||
configureResourcesPublicationAttributes(target)
|
||||
|
||||
description = "Kotlin resources for $compilation"
|
||||
}
|
||||
|
||||
isVisible = false
|
||||
|
||||
configureResourcesPublicationAttributes(target)
|
||||
|
||||
description = "Kotlin resources for $compilation"
|
||||
}
|
||||
} else null
|
||||
KotlinTargetResourcesResolutionStrategy.VariantReselection -> null
|
||||
}
|
||||
|
||||
return DefaultKotlinCompilationConfigurationsContainer(
|
||||
deprecatedCompileConfiguration = deprecatedCompileConfiguration,
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ internal class KotlinCompilationImplFactory(
|
||||
DefaultKotlinCompilationSourceSetsContainerFactory(),
|
||||
|
||||
private val compilationDependencyConfigurationsFactory: KotlinCompilationDependencyConfigurationsFactory =
|
||||
DefaultKotlinCompilationDependencyConfigurationsFactory.WithRuntime,
|
||||
DefaultKotlinCompilationDependencyConfigurationsFactory.WithRuntime(),
|
||||
|
||||
private val compilationAssociator: KotlinCompilationAssociator =
|
||||
DefaultKotlinCompilationAssociator,
|
||||
|
||||
+1
-2
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.configureResourcesPublicationAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.utils.copyAttributesTo
|
||||
|
||||
enum class KotlinTargetResourcesResolutionStrategy {
|
||||
VariantReselection,
|
||||
@@ -27,7 +26,7 @@ enum class KotlinTargetResourcesResolutionStrategy {
|
||||
compilation.internal.configurations.runtimeDependencyConfiguration
|
||||
?: return compilation.project.files().also {
|
||||
compilation.project.reportDiagnostic(
|
||||
KotlinToolingDiagnostics.MissingConfigurationForWasmTarget(compilation.target.name)
|
||||
KotlinToolingDiagnostics.MissingRuntimeDependencyConfigurationForWasmTarget(compilation.target.name)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
||||
+12
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPreConfigure
|
||||
@@ -29,6 +31,16 @@ class KotlinJsIrCompilationFactory internal constructor(
|
||||
target.project.files()
|
||||
}
|
||||
),
|
||||
compilationDependencyConfigurationsFactory = DefaultKotlinCompilationDependencyConfigurationsFactory.WithRuntime(
|
||||
withResourcesConfigurationExtending = { runtimeDependencyConfiguration, _ ->
|
||||
if (runtimeDependencyConfiguration == null) {
|
||||
project.reportDiagnostic(
|
||||
KotlinToolingDiagnostics.MissingRuntimeDependencyConfigurationForWasmTarget(target.name,)
|
||||
)
|
||||
}
|
||||
runtimeDependencyConfiguration
|
||||
}
|
||||
),
|
||||
preConfigureAction = DefaultKotlinCompilationPreConfigure + { compilation ->
|
||||
if (compilation.platformType == KotlinPlatformType.wasm && compilation.isMain()) {
|
||||
val artifactNameAppendix = (compilation.target as KotlinJsIrTarget).wasmDecamelizedDefaultNameOrNull()
|
||||
|
||||
Reference in New Issue
Block a user