Register multiplatform publication extension
^KT-65540
This commit is contained in:
committed by
Space Team
parent
ea0c3837a0
commit
74628c0394
+3
@@ -1,3 +1,6 @@
|
||||
public abstract interface annotation class org/jetbrains/kotlin/gradle/ComposeKotlinGradlePluginApi : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApiKt {
|
||||
public static final field PRESETS_API_IS_DEPRECATED_MESSAGE Ljava/lang/String;
|
||||
public static final field PRESETS_DEPRECATION_MESSAGE_SUFFIX Ljava/lang/String;
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
@RequiresOptIn(
|
||||
message = "This API is not intended to be used outside of the Kotlin Gradle Plugin and Compose Multiplatform Plugin integration",
|
||||
level = RequiresOptIn.Level.ERROR
|
||||
)
|
||||
annotation class ComposeKotlinGradlePluginApi
|
||||
@@ -13,6 +13,7 @@ testsJar()
|
||||
|
||||
kotlin.sourceSets.all {
|
||||
languageSettings.optIn("org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi")
|
||||
languageSettings.optIn("org.jetbrains.kotlin.gradle.ComposeKotlinGradlePluginApi")
|
||||
}
|
||||
|
||||
val kotlinGradlePluginTest = project(":kotlin-gradle-plugin").sourceSets.named("test").map { it.output }
|
||||
|
||||
@@ -907,6 +907,11 @@ public final class org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotli
|
||||
public static final fun sourcesJarTask (Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinTarget;Lorg/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKotlinCompilation;)Lorg/gradle/api/tasks/TaskProvider;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/resources/KotlinTargetResourcesPublication {
|
||||
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/mpp/resources/KotlinTargetResourcesPublication$Companion;
|
||||
public static final field EXTENSION_NAME Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract class org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/SourceSetTreeClassifier {
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ kotlin {
|
||||
"org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi",
|
||||
"org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi",
|
||||
"org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi",
|
||||
"org.jetbrains.kotlin.gradle.ComposeKotlinGradlePluginApi",
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -30,6 +31,7 @@ kotlin {
|
||||
|
||||
apiValidation {
|
||||
publicMarkers.add("org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi")
|
||||
publicMarkers.add("org.jetbrains.kotlin.gradle.ComposeKotlinGradlePluginApi")
|
||||
publicMarkers.add("org.jetbrains.kotlin.gradle.dsl.KotlinGradlePluginPublicDsl")
|
||||
nonPublicMarkers.add("org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi")
|
||||
additionalSourceSets.add("common")
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.resources
|
||||
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.jetbrains.kotlin.gradle.ComposeKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
import java.io.File
|
||||
|
||||
@ComposeKotlinGradlePluginApi
|
||||
interface KotlinTargetResourcesPublication {
|
||||
|
||||
data class ResourceRoot(
|
||||
val resourcesBaseDirectory: Provider<File>,
|
||||
val includes: List<String>,
|
||||
val excludes: List<String>,
|
||||
)
|
||||
|
||||
companion object {
|
||||
const val EXTENSION_NAME = "multiplatformResourcesPublication"
|
||||
}
|
||||
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.resources
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
|
||||
internal abstract class KotlinTargetResourcesPublicationImpl @Inject constructor(
|
||||
val project: Project
|
||||
) : KotlinTargetResourcesPublication {
|
||||
|
||||
internal data class TargetResources(
|
||||
val resourcePathForSourceSet: (KotlinSourceSet) -> (KotlinTargetResourcesPublication.ResourceRoot),
|
||||
val relativeResourcePlacement: Provider<File>,
|
||||
)
|
||||
|
||||
private val targetToResourcesMap: MutableMap<KotlinTarget, TargetResources> = mutableMapOf()
|
||||
|
||||
private val targetResourcesSubscribers: MutableMap<KotlinTarget, MutableList<(TargetResources) -> (Unit)>> = mutableMapOf()
|
||||
|
||||
internal fun subscribeOnPublishResources(
|
||||
target: KotlinTarget,
|
||||
notify: (TargetResources) -> (Unit),
|
||||
) {
|
||||
targetToResourcesMap[target]?.let(notify)
|
||||
targetResourcesSubscribers.getOrPut(target, { mutableListOf() }).add(notify)
|
||||
}
|
||||
|
||||
|
||||
internal companion object {
|
||||
const val MULTIPLATFORM_RESOURCES_DIRECTORY = "kotlin-multiplatform-resources"
|
||||
}
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.resources
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.extraProperties
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPut
|
||||
|
||||
internal val KotlinMultiplatformExtension.resourcesPublicationExtension: KotlinTargetResourcesPublicationImpl?
|
||||
get() {
|
||||
if (!project.kotlinPropertiesProvider.mppResourcesPublication) return null
|
||||
return project.extraProperties.getOrPut(KotlinTargetResourcesPublication.EXTENSION_NAME) {
|
||||
project.objects.newInstance(KotlinTargetResourcesPublicationImpl::class.java, project)
|
||||
}
|
||||
}
|
||||
|
||||
internal val RegisterMultiplatformResourcesPublicationExtensionAction = KotlinProjectSetupAction {
|
||||
multiplatformExtension.resourcesPublicationExtension
|
||||
}
|
||||
+2
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AddBuildListenerForXCodeSetupAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.DeprecatedMppGradlePropertiesMigrationSetupAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.RegisterMultiplatformResourcesPublicationExtensionAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinMultiplatformSourceSetSetupAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.LanguageSettingsSetupAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.MultiplatformBuildStatsReportSetupAction
|
||||
@@ -78,6 +79,7 @@ internal fun Project.registerKotlinPluginExtensions() {
|
||||
register(project, KotlinLLDBScriptSetupAction)
|
||||
register(project, ExcludeDefaultPlatformDependenciesFromKotlinNativeCompileTasks)
|
||||
register(project, SetupConsistentMetadataDependenciesResolution)
|
||||
register(project, RegisterMultiplatformResourcesPublicationExtensionAction)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublication
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.resourcesPublicationExtension
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.jetbrains.kotlin.gradle.util.enableMppResourcesPublication
|
||||
import org.jetbrains.kotlin.gradle.util.kotlin
|
||||
import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class RegisterMultiplatformResourcesPublicationExtensionActionTests {
|
||||
|
||||
@Test
|
||||
fun `test mppResourcesPublication toggle - prevents extension creation`() {
|
||||
assertNull(
|
||||
buildProjectWithMPP {
|
||||
kotlin { jvm() }
|
||||
enableMppResourcesPublication(false)
|
||||
}.evaluate().multiplatformExtension.resourcesPublicationExtension
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test mppResourcesPublication toggle - enables extension creation`() {
|
||||
assertNotNull(
|
||||
buildProjectWithMPP {
|
||||
kotlin { jvm() }
|
||||
enableMppResourcesPublication(true)
|
||||
}.evaluate().multiplatformExtension.resourcesPublicationExtension
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
+4
@@ -113,6 +113,10 @@ fun Project.enableCInteropCommonization(enabled: Boolean = true) {
|
||||
propertiesExtension.set(PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_CINTEROP_COMMONIZATION, enabled.toString())
|
||||
}
|
||||
|
||||
fun Project.enableMppResourcesPublication(enabled: Boolean = true) {
|
||||
propertiesExtension.set(PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_RESOURCES_PUBLICATION, enabled.toString())
|
||||
}
|
||||
|
||||
fun Project.enableIntransitiveMetadataConfiguration(enabled: Boolean = true) {
|
||||
propertiesExtension.set(KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION, enabled.toString())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user