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