diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt index 38bf49e4955..e8cfcb3b4ad 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt @@ -979,6 +979,24 @@ class HierarchicalMppIT : KGPBaseTest() { } } + @GradleTest + @DisplayName("KT-55071: Shared Native Compilations: Use default parameters declared in dependsOn source set") + fun `test shared native compilation with default parameters declared in dependsOn source set`(gradleVersion: GradleVersion) { + with(project("kt-55071-compileSharedNative-withDefaultParameters", gradleVersion = gradleVersion)) { + build(":producer:publish") { + assertTasksExecuted(":producer:compileCommonMainKotlinMetadata") + assertTasksExecuted(":producer:compileSecondCommonMainKotlinMetadata") + assertTasksExecuted(":producer:compileNativeMainKotlinMetadata") + } + + build(":consumer:assemble") { + assertTasksExecuted(":consumer:compileCommonMainKotlinMetadata") + assertTasksExecuted(":consumer:compileNativeMainKotlinMetadata") + } + } + } + + private fun TestProject.testDependencyTransformations( subproject: String? = null, check: BuildResult.(reports: Iterable) -> Unit diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/build.gradle.kts new file mode 100644 index 00000000000..5948671485a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/build.gradle.kts @@ -0,0 +1,6 @@ +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/build.gradle.kts new file mode 100644 index 00000000000..b0a770d1a44 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/build.gradle.kts @@ -0,0 +1,45 @@ +@file:Suppress("OPT_IN_USAGE") + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + maven(project(":producer").buildDir.resolve("repository")) + mavenCentral() +} + +kotlin { + jvm() + js().browser() + linuxX64() + linuxArm64() + + val commonMain by sourceSets.getting + val nativeMain by sourceSets.creating + val jvmAndJsMain by sourceSets.creating + val jvmMain by sourceSets.getting + val jsMain by sourceSets.getting + val linuxX64Main by sourceSets.getting + val linuxArm64Main by sourceSets.getting + + commonMain.let { + nativeMain.dependsOn(it) + jvmAndJsMain.dependsOn(it) + } + + nativeMain.let { + linuxArm64Main.dependsOn(it) + linuxX64Main.dependsOn(it) + } + + jvmAndJsMain.let { + jvmMain.dependsOn(it) + jsMain.dependsOn(it) + } + + commonMain.dependencies { + implementation("org.jetbrains.sample:producer:1.0.0") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/commonMain/kotlin/consumer/ConsumerCommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/commonMain/kotlin/consumer/ConsumerCommonMain.kt new file mode 100644 index 00000000000..d81d03acc4e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/commonMain/kotlin/consumer/ConsumerCommonMain.kt @@ -0,0 +1,5 @@ +package consumer + +import producer.Producer + +fun consumerCommonMain() = Producer().foo("") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/jvmAndJsMain/kotlin/consumer/ConsumerJvmAndJsMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/jvmAndJsMain/kotlin/consumer/ConsumerJvmAndJsMain.kt new file mode 100644 index 00000000000..3b04c769669 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/jvmAndJsMain/kotlin/consumer/ConsumerJvmAndJsMain.kt @@ -0,0 +1,5 @@ +package consumer + +import producer.Producer + +fun consumerJvmAndJsMain() = Producer().foo("") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/nativeMain/kotlin/consumer/ConsumerNativeMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/nativeMain/kotlin/consumer/ConsumerNativeMain.kt new file mode 100644 index 00000000000..7cbb36c7a13 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/consumer/src/nativeMain/kotlin/consumer/ConsumerNativeMain.kt @@ -0,0 +1,5 @@ +package consumer + +import producer.Producer + +fun consumerNativeMain() = Producer().foo("") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/gradle.properties new file mode 100644 index 00000000000..780d7218a51 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/gradle.properties @@ -0,0 +1,3 @@ +kotlin.code.style=official +kotlin.js.generate.executable.default=false +kotlin.js.compiler=ir diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/build.gradle.kts new file mode 100644 index 00000000000..f71339dcd47 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/build.gradle.kts @@ -0,0 +1,59 @@ +@file:Suppress("OPT_IN_USAGE") + +plugins { + kotlin("multiplatform") + `maven-publish` +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + jvm() + js().browser() + linuxX64() + linuxArm64() + + val commonMain by sourceSets.getting + val nativeMain by sourceSets.creating + val secondCommonMain by sourceSets.creating + val jvmAndJsMain by sourceSets.creating + val jvmMain by sourceSets.getting + val jsMain by sourceSets.getting + val linuxX64Main by sourceSets.getting + val linuxArm64Main by sourceSets.getting + + commonMain.let { + secondCommonMain.dependsOn(it) + } + + secondCommonMain.let { + nativeMain.dependsOn(it) + jvmAndJsMain.dependsOn(it) + } + + nativeMain.let { + linuxArm64Main.dependsOn(it) + linuxX64Main.dependsOn(it) + } + + jvmAndJsMain.let { + jvmMain.dependsOn(it) + jsMain.dependsOn(it) + } +} + + + +group = "org.jetbrains.sample" +version = "1.0.0" + +publishing { + repositories { + maven(buildDir.resolve("repository")) { + name = "build" + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/commonMain/kotlin/producer/CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/commonMain/kotlin/producer/CommonMain.kt new file mode 100644 index 00000000000..4f68f74222b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/commonMain/kotlin/producer/CommonMain.kt @@ -0,0 +1,5 @@ +package producer + +expect class Producer constructor() { + fun foo(value: String, optionalParameter: Boolean = false) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/jvmAndJsMain/kotlin/producer/JvmAndJsMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/jvmAndJsMain/kotlin/producer/JvmAndJsMain.kt new file mode 100644 index 00000000000..c65ee146f63 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/jvmAndJsMain/kotlin/producer/JvmAndJsMain.kt @@ -0,0 +1,5 @@ +package producer + +actual class Producer { + actual fun foo(value: String, optionalParameter: Boolean) = Unit +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/nativeMain/kotlin/producer/NativeMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/nativeMain/kotlin/producer/NativeMain.kt new file mode 100644 index 00000000000..89337106edc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/nativeMain/kotlin/producer/NativeMain.kt @@ -0,0 +1,10 @@ +package producer + +actual class Producer { + actual fun foo(value: String, optionalParameter: Boolean) = Unit +} + +fun inProducerNativeMain() { + producerSecondCommonMain() + Producer().foo("") // <- No value passed for parameter 'optionalParameter' +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/secondCommonMain/kotlin/producer/SecondCommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/secondCommonMain/kotlin/producer/SecondCommonMain.kt new file mode 100644 index 00000000000..dc00a4cd0a7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/producer/src/secondCommonMain/kotlin/producer/SecondCommonMain.kt @@ -0,0 +1,3 @@ +package producer + +internal fun producerSecondCommonMain() = Unit \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/settings.gradle.kts new file mode 100644 index 00000000000..5eb372f1bf3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-55071-compileSharedNative-withDefaultParameters/settings.gradle.kts @@ -0,0 +1,2 @@ +include(":producer") +include(":consumer")