[Gradle, JS] Fix ambiguity with target name
This commit is contained in:
+31
@@ -78,6 +78,13 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
JsMode.IR
|
||||
)
|
||||
|
||||
@Test
|
||||
fun testLibAndAppJsMixed() = doTestLibAndApp(
|
||||
"sample-lib",
|
||||
"sample-app",
|
||||
JsMode.MIXED
|
||||
)
|
||||
|
||||
@Test
|
||||
fun testLibAndAppWithGradleKotlinDsl() = doTestLibAndApp(
|
||||
"sample-lib-gradle-kotlin-dsl",
|
||||
@@ -92,6 +99,13 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
JsMode.IR
|
||||
)
|
||||
|
||||
@Test
|
||||
fun testLibAndAppWithGradleKotlinDslJsMixed() = doTestLibAndApp(
|
||||
"sample-lib-gradle-kotlin-dsl",
|
||||
"sample-app-gradle-kotlin-dsl",
|
||||
JsMode.MIXED
|
||||
)
|
||||
|
||||
private fun doTestLibAndApp(
|
||||
libProjectName: String,
|
||||
appProjectName: String,
|
||||
@@ -235,6 +249,23 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301
|
||||
}
|
||||
|
||||
if (jsMode == JsMode.MIXED) {
|
||||
listOf(
|
||||
JsMode.LEGACY,
|
||||
JsMode.IR
|
||||
).forEach {
|
||||
build(
|
||||
"assemble",
|
||||
"resolveRuntimeDependencies",
|
||||
"--rerun-tasks",
|
||||
options = defaultBuildOptions().copy(jsMode = it)
|
||||
) {
|
||||
checkAppBuild()
|
||||
assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now run again with a project dependency instead of a module one:
|
||||
libProject.projectDir.copyRecursively(projectDir.resolve(libProject.projectDir.name))
|
||||
gradleSettingsScript().appendText("\ninclude(\"${libProject.projectDir.name}\")")
|
||||
|
||||
+5
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget.Companion.IR
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget.Companion.LEGACY
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import java.util.concurrent.Callable
|
||||
@@ -448,6 +449,10 @@ internal fun Project.usageByName(usageName: String): Usage =
|
||||
fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration {
|
||||
attributes.attribute(KotlinPlatformType.attribute, target.platformType)
|
||||
|
||||
if (target is KotlinJsTarget) {
|
||||
attributes.attribute(KotlinJsTarget.jsModeAttribute, LEGACY)
|
||||
}
|
||||
|
||||
if (target is KotlinJsIrTarget) {
|
||||
attributes.attribute(KotlinJsTarget.jsModeAttribute, IR)
|
||||
}
|
||||
|
||||
+2
-2
@@ -159,12 +159,12 @@ class KotlinMultiplatformPlugin(
|
||||
add(KotlinJvmTargetPreset(project, kotlinPluginVersion))
|
||||
when (propertiesProvider.jsMode) {
|
||||
JsMode.LEGACY -> add(KotlinJsTargetPreset(project, kotlinPluginVersion, null))
|
||||
JsMode.IR -> add(KotlinJsIrTargetPreset(project, kotlinPluginVersion))
|
||||
JsMode.IR -> add(KotlinJsIrTargetPreset(project, kotlinPluginVersion, false))
|
||||
JsMode.MIXED -> add(
|
||||
KotlinJsTargetPreset(
|
||||
project,
|
||||
kotlinPluginVersion,
|
||||
KotlinJsIrTargetPreset(project, kotlinPluginVersion)
|
||||
KotlinJsIrTargetPreset(project, kotlinPluginVersion, true)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
+2
-2
@@ -21,10 +21,10 @@ abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompila
|
||||
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
|
||||
target.targetName
|
||||
|
||||
abstract protected fun instantiateTarget(): R
|
||||
abstract protected fun instantiateTarget(name: String): R
|
||||
|
||||
override fun createTarget(name: String): R {
|
||||
val result = instantiateTarget().apply {
|
||||
val result = instantiateTarget(name).apply {
|
||||
targetName = name
|
||||
disambiguationClassifier = provideTargetDisambiguationClassifier(this@apply)
|
||||
preset = this@KotlinOnlyTargetPreset
|
||||
|
||||
+3
-1
@@ -31,7 +31,9 @@ open class KotlinJsPlugin(
|
||||
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
|
||||
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
|
||||
|
||||
val irPreset = if (mixedMode) KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion) else null
|
||||
val irPreset = if (mixedMode)
|
||||
KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion, mixedMode)
|
||||
else null
|
||||
|
||||
val target = KotlinJsSingleTargetPreset(project, kotlinPluginVersion, irPreset).createTarget("Js")
|
||||
|
||||
|
||||
+1
@@ -191,6 +191,7 @@ constructor(
|
||||
)
|
||||
|
||||
const val IR = "ir"
|
||||
const val LEGACY = "legacy"
|
||||
|
||||
fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) {
|
||||
attributesSchema.attribute(jsModeAttribute)
|
||||
|
||||
+3
-5
@@ -12,6 +12,7 @@ import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
|
||||
@@ -27,16 +28,13 @@ open class KotlinJsTargetPreset(
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.js
|
||||
|
||||
override fun instantiateTarget(): KotlinJsTarget {
|
||||
|
||||
val irTarget = irPreset?.createTarget("JsIr")
|
||||
|
||||
override fun instantiateTarget(name: String): KotlinJsTarget {
|
||||
return project.objects.newInstance(
|
||||
KotlinJsTarget::class.java,
|
||||
project,
|
||||
platformType
|
||||
).apply {
|
||||
this.irTarget = irTarget
|
||||
this.irTarget = irPreset?.createTarget("$name$IR_TARGET_SUFFIX")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -43,4 +43,16 @@ class KotlinJsIrCompilation(
|
||||
super.addSourcesToCompileTask(sourceSet, addAsCommonSources)
|
||||
allSources.add(sourceSet.kotlin)
|
||||
}
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() {
|
||||
return lowerCamelCaseName(
|
||||
if ((target as KotlinJsIrTarget).mixedMode)
|
||||
target.disambiguationClassifier
|
||||
?.removeSuffix(IR_TARGET_SUFFIX)
|
||||
else
|
||||
target.disambiguationClassifier,
|
||||
compilationName
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -28,7 +28,7 @@ open class KotlinJsIrPlugin(
|
||||
val kotlinExtension = project.kotlinExtension as KotlinJsIrProjectExtension
|
||||
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
|
||||
|
||||
val target = KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion).createTarget("Js")
|
||||
val target = KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion, false).createTarget("js")
|
||||
|
||||
kotlinExtension.target = target
|
||||
|
||||
|
||||
+7
-1
@@ -25,7 +25,13 @@ import org.jetbrains.kotlin.gradle.testing.testTaskName
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import javax.inject.Inject
|
||||
|
||||
open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: KotlinPlatformType) :
|
||||
open class KotlinJsIrTarget
|
||||
@Inject
|
||||
constructor(
|
||||
project: Project,
|
||||
platformType: KotlinPlatformType,
|
||||
internal val mixedMode: Boolean
|
||||
) :
|
||||
KotlinOnlyTarget<KotlinJsIrCompilation>(project, platformType),
|
||||
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
|
||||
KotlinJsTargetDsl,
|
||||
|
||||
+12
-6
@@ -6,15 +6,18 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.JsMode
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
||||
|
||||
open class KotlinJsIrTargetPreset(
|
||||
project: Project,
|
||||
kotlinPluginVersion: String
|
||||
kotlinPluginVersion: String,
|
||||
private val mixedMode: Boolean
|
||||
) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(
|
||||
project,
|
||||
kotlinPluginVersion
|
||||
@@ -22,8 +25,8 @@ open class KotlinJsIrTargetPreset(
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.js
|
||||
|
||||
override fun instantiateTarget(): KotlinJsIrTarget {
|
||||
return project.objects.newInstance(KotlinJsIrTarget::class.java, project, platformType)
|
||||
override fun instantiateTarget(name: String): KotlinJsIrTarget {
|
||||
return project.objects.newInstance(KotlinJsIrTarget::class.java, project, platformType, mixedMode)
|
||||
}
|
||||
|
||||
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget> =
|
||||
@@ -44,13 +47,16 @@ open class KotlinJsIrTargetPreset(
|
||||
|
||||
class KotlinJsIrSingleTargetPreset(
|
||||
project: Project,
|
||||
kotlinPluginVersion: String
|
||||
kotlinPluginVersion: String,
|
||||
mixedMode: Boolean
|
||||
) :
|
||||
KotlinJsIrTargetPreset(project, kotlinPluginVersion) {
|
||||
KotlinJsIrTargetPreset(project, kotlinPluginVersion, mixedMode) {
|
||||
|
||||
// In a Kotlin/JS single-platform project, we don't need any disambiguation suffixes or prefixes in the names:
|
||||
override fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<KotlinJsIrCompilation>): String? = null
|
||||
|
||||
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget> =
|
||||
KotlinJsIrTargetConfigurator(kotlinPluginVersion)
|
||||
}
|
||||
}
|
||||
|
||||
const val IR_TARGET_SUFFIX = "Ir"
|
||||
+1
-1
@@ -18,7 +18,7 @@ class KotlinJvmTargetPreset(
|
||||
project,
|
||||
kotlinPluginVersion
|
||||
) {
|
||||
override fun instantiateTarget(): KotlinJvmTarget {
|
||||
override fun instantiateTarget(name: String): KotlinJvmTarget {
|
||||
return project.objects.newInstance(KotlinJvmTarget::class.java, project)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ class KotlinMetadataTargetPreset(
|
||||
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<AbstractKotlinCompilation<*>, KotlinMetadataTarget> =
|
||||
KotlinMetadataTargetConfigurator(kotlinPluginVersion)
|
||||
|
||||
override fun instantiateTarget(): KotlinMetadataTarget {
|
||||
override fun instantiateTarget(name: String): KotlinMetadataTarget {
|
||||
return project.objects.newInstance(KotlinMetadataTarget::class.java, project)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user