From 7f14255be848f57cd3dc085ef0e3ef85792079cf Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Fri, 9 Dec 2022 15:19:42 +0100 Subject: [PATCH] [Gradle] Implement initial MppCompositeBuildIT ^KT-52172 Verification Pending --- .../tcs/IdeaKotlinDependencyMatcher.kt | 6 ++ ...aKotlinProjectArtifactDependencyMatcher.kt | 2 + .../tcs/IdeaKotlinSourceDependencyMatcher.kt | 2 + .../tcs/ideaDependencyMatcherBuilders.kt | 37 ++++++--- .../gradle/MppIdeDependencyResolutionIT.kt | 54 +----------- .../kotlin/gradle/mpp/MppCompositeBuildIT.kt | 83 +++++++++++++++++++ .../util/IdeaKotlinDependencyMatchers.kt | 17 ++++ .../jetbrains/kotlin/gradle/util/fileUtil.kt | 8 ++ .../gradle/util/resolveIdeDependencies.kt | 65 +++++++++++++++ .../consumerBuild/consumerA/build.gradle.kts | 16 ++++ .../src/commonMain/kotlin/ConsumerACommon.kt | 5 ++ .../linuxX64Main/kotlin/ConsumerALinuxX64.kt | 7 ++ .../src/nativeMain/kotlin/ConsumerANative.kt | 5 ++ .../simple/consumerBuild/settings.gradle.kts | 14 ++++ .../producerBuild/producerA/build.gradle.kts | 17 ++++ .../src/commonMain/kotlin/ProducerACommon.kt | 1 + .../linuxX64Main/kotlin/ProducerALinuxX64.kt | 1 + .../src/nativeMain/kotlin/ProducerANative.kt | 1 + .../simple/producerBuild/settings.gradle.kts | 8 ++ .../ide/IdeSourceDependencyResolutionTest.kt | 4 +- .../ideaKotlinDependencyMatcherBuilders.kt | 3 - 21 files changed, 288 insertions(+), 68 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/commonMain/kotlin/ProducerACommon.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/settings.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinDependencyMatcher.kt index 4f8560d2fcf..721c6720be9 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinDependencyMatcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinDependencyMatcher.kt @@ -11,3 +11,9 @@ interface IdeaKotlinDependencyMatcher { val description: String fun matches(dependency: IdeaKotlinDependency): Boolean } + +fun IdeaKotlinDependencyMatcher(description: String, matches: (dependency: IdeaKotlinDependency) -> Boolean) = + object : IdeaKotlinDependencyMatcher { + override val description: String = description + override fun matches(dependency: IdeaKotlinDependency): Boolean = matches(dependency) + } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinProjectArtifactDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinProjectArtifactDependencyMatcher.kt index 8a7472004ed..bcf65a35119 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinProjectArtifactDependencyMatcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinProjectArtifactDependencyMatcher.kt @@ -12,6 +12,7 @@ import java.io.File internal class IdeaKotlinProjectArtifactDependencyMatcher( val type: IdeaKotlinSourceDependency.Type, + val buildId: String, val projectPath: String, val artifactFilePath: FilePathRegex ) : IdeaKotlinDependencyMatcher { @@ -21,6 +22,7 @@ internal class IdeaKotlinProjectArtifactDependencyMatcher( override fun matches(dependency: IdeaKotlinDependency): Boolean { if (dependency !is IdeaKotlinProjectArtifactDependency) return false return dependency.type == type && + dependency.coordinates.project.buildId == buildId && dependency.coordinates.project.projectPath == projectPath && artifactFilePath.matches(dependency.coordinates.artifactFile) diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinSourceDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinSourceDependencyMatcher.kt index a39eb93b5dc..4edd24cb9aa 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinSourceDependencyMatcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/IdeaKotlinSourceDependencyMatcher.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency internal class IdeaKotlinSourceDependencyMatcher( val type: IdeaKotlinSourceDependency.Type, + val buildId: String, val projectPath: String, val sourceSetName: String ) : IdeaKotlinDependencyMatcher { @@ -19,6 +20,7 @@ internal class IdeaKotlinSourceDependencyMatcher( override fun matches(dependency: IdeaKotlinDependency): Boolean { if (dependency !is IdeaKotlinSourceDependency) return false return dependency.type == type && + dependency.coordinates.buildId == buildId && dependency.coordinates.projectPath == projectPath && dependency.coordinates.sourceSetName == sourceSetName } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/ideaDependencyMatcherBuilders.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/ideaDependencyMatcherBuilders.kt index a7603d3742a..d154a06f51b 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/ideaDependencyMatcherBuilders.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/tcs/ideaDependencyMatcherBuilders.kt @@ -7,6 +7,9 @@ package org.jetbrains.kotlin.gradle.idea.testFixtures.tcs import org.gradle.api.Project import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates +import org.gradle.api.artifacts.component.BuildIdentifier +import org.gradle.api.internal.project.ProjectInternal +import org.gradle.internal.build.BuildState import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency @@ -22,14 +25,16 @@ fun buildIdeaKotlinDependencyMatchers(notation: Any?): List Unit -) { - build("${subproject.orEmpty()}:resolveIdeDependencies") { - val subprojectPathPrefix = subproject?.removePrefix(":")?.replace(":", "/")?.plus("/") ?: "" - val output = projectPath.resolve("${subprojectPathPrefix}build/ide/dependencies/proto").toFile() - if (!output.isDirectory) fail("Missing output directory: $output") - - val dependenciesBySourceSetName = output.listFiles().orEmpty().associate { sourceSetDirectory -> - if (!sourceSetDirectory.isDirectory) fail("Expected $sourceSetDirectory to be directory") - val serializedDependencyFiles = sourceSetDirectory.listFiles().orEmpty() - val deserializedDependencies = serializedDependencyFiles.map { dependencyFile -> - deserializeIdeaKotlinDependencyOrFail(dependencyFile) - } - - sourceSetDirectory.name to deserializedDependencies.toSet() - } - - assertions(IdeaKotlinDependenciesContainer(dependenciesBySourceSetName)) - } -} - -private fun deserializeIdeaKotlinDependencyOrFail(file: File): IdeaKotlinDependency { - return GradleIntegrationTestIdeaKotlinSerializationContext.IdeaKotlinDependency(file.readBytes()) - ?: fail("Failed to deserialize dependency. $file") -} - -private object GradleIntegrationTestIdeaKotlinSerializationContext : IdeaKotlinSerializationContext { - override val extrasSerializationExtension = kotlinExtrasSerialization - override val logger: IdeaKotlinSerializationLogger = object : IdeaKotlinSerializationLogger { - override fun report(severity: IdeaKotlinSerializationLogger.Severity, message: String, cause: Throwable?) { - println("$severity: $message") - if (cause != null) println(cause.stackTraceToString()) - } - } -} - -private class IdeaKotlinDependenciesContainer( - private val dependencies: Map> -) { - operator fun get(sourceSetName: String) = dependencies[sourceSetName] - ?: fail("SourceSet with name $sourceSetName not found. Found: ${dependencies.keys}") -} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt new file mode 100644 index 00000000000..c165eb0707e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt @@ -0,0 +1,83 @@ +/* + * 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.mpp + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency.Type.Regular +import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.* +import org.jetbrains.kotlin.gradle.testbase.* +import org.jetbrains.kotlin.gradle.util.kotilnNativeDistributionDependencies +import org.jetbrains.kotlin.gradle.util.kotlinStdlibDependencies +import org.jetbrains.kotlin.gradle.util.replaceText +import org.jetbrains.kotlin.gradle.util.resolveIdeDependencies +import org.junit.jupiter.api.DisplayName +import kotlin.io.path.absolutePathString + +@MppGradlePluginTests +@DisplayName("Tests for multiplatform with composite builds") +class MppCompositeBuildIT : KGPBaseTest() { + @GradleTest + fun `test - simple composite build - ide dependencies`(gradleVersion: GradleVersion) { + val producer = project("mpp-composite-build/simple/producerBuild", gradleVersion) + + project("mpp-composite-build/simple/consumerBuild", gradleVersion) { + settingsGradleKts.toFile().replaceText("", producer.projectPath.absolutePathString()) + resolveIdeDependencies(":consumerA") { dependencies -> + dependencies["commonMain"].assertMatches( + regularSourceDependency("producerBuild::producerA/commonMain"), + kotlinStdlibDependencies + ) + + dependencies["nativeMain"].assertMatches( + dependsOnDependency(":consumerA/commonMain"), + regularSourceDependency("producerBuild::producerA/commonMain"), + regularSourceDependency("producerBuild::producerA/nativeMain"), + regularSourceDependency("producerBuild::producerA/linuxMain"), + kotilnNativeDistributionDependencies + ) + + dependencies["linuxMain"].assertMatches( + dependencies["nativeMain"], + dependsOnDependency(":consumerA/nativeMain"), + ) + + dependencies["linuxX64Main"].assertMatches( + dependsOnDependency(":consumerA/commonMain"), + dependsOnDependency(":consumerA/nativeMain"), + dependsOnDependency(":consumerA/linuxMain"), + projectArtifactDependency(Regular, "producerBuild::producerA", FilePathRegex(".*/linuxX64/main/klib/producerA.klib")), + kotilnNativeDistributionDependencies + ) + } + } + } + + @GradleTest + fun `test - simple composite build - assemble`(gradleVersion: GradleVersion) { + val producer = project("mpp-composite-build/simple/producerBuild", gradleVersion) + + project("mpp-composite-build/simple/consumerBuild", gradleVersion) { + settingsGradleKts.toFile().replaceText("", producer.projectPath.absolutePathString()) + build("cleanNativeDistributionCommonization") + + build("assemble") { + assertTasksExecuted(":consumerA:compileCommonMainKotlinMetadata") + assertTasksExecuted(":consumerA:compileNativeMainKotlinMetadata") + assertTasksExecuted(":consumerA:compileNativeMainKotlinMetadata") + assertTasksExecuted(":consumerA:compileKotlinLinuxX64") + assertTasksExecuted(":consumerA:compileKotlinJvm") + } + + build("assemble") { + assertTasksUpToDate(":consumerA:compileCommonMainKotlinMetadata") + assertTasksUpToDate(":consumerA:compileNativeMainKotlinMetadata") + assertTasksUpToDate(":consumerA:compileNativeMainKotlinMetadata") + assertTasksUpToDate(":consumerA:compileKotlinLinuxX64") + assertTasksUpToDate(":consumerA:compileKotlinJvm") + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt new file mode 100644 index 00000000000..a0aa164f602 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt @@ -0,0 +1,17 @@ +/* + * 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.util + +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeDistribution +import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.IdeaKotlinDependencyMatcher +import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates + +val kotlinStdlibDependencies = binaryCoordinates(Regex(".*kotlin-stdlib.*")) + +val kotilnNativeDistributionDependencies = IdeaKotlinDependencyMatcher("native distribution") { dependency -> + dependency is IdeaKotlinResolvedBinaryDependency && dependency.isNativeDistribution +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt index c2db85299ea..513f7e8e6e0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt @@ -97,3 +97,11 @@ private fun normalizeTail(prefixEnd: Int, path: String, separator: Boolean): Str return result.toString() } + +fun File.replaceText(oldValue: String, newValue: String) { + writeText(readText().replace(oldValue, newValue)) +} + +fun File.replaceText(regex: Regex, replacement: String) { + writeText(readText().replace(regex, replacement)) +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt new file mode 100644 index 00000000000..c1516053566 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt @@ -0,0 +1,65 @@ +/* + * 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.util + +import org.gradle.testkit.runner.BuildResult +import org.jetbrains.kotlin.gradle.idea.proto.tcs.IdeaKotlinDependency +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinSerializationContext +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinSerializationLogger +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency +import org.jetbrains.kotlin.gradle.plugin.ide.kotlinExtrasSerialization +import org.jetbrains.kotlin.gradle.testbase.TestProject +import org.jetbrains.kotlin.gradle.testbase.build +import java.io.File +import kotlin.test.fail + + +/* Test Utils / Test Infrastructure Implementation */ + +internal fun TestProject.resolveIdeDependencies( + subproject: String? = null, + assertions: BuildResult.(dependencies: IdeaKotlinDependenciesContainer) -> Unit +) { + build("${subproject.orEmpty()}:resolveIdeDependencies") { + val subprojectPathPrefix = subproject?.removePrefix(":")?.replace(":", "/")?.plus("/") ?: "" + val output = projectPath.resolve("${subprojectPathPrefix}build/ide/dependencies/proto").toFile() + if (!output.isDirectory) fail("Missing output directory: $output") + + val dependenciesBySourceSetName = output.listFiles().orEmpty().associate { sourceSetDirectory -> + if (!sourceSetDirectory.isDirectory) fail("Expected $sourceSetDirectory to be directory") + val serializedDependencyFiles = sourceSetDirectory.listFiles().orEmpty() + val deserializedDependencies = serializedDependencyFiles.map { dependencyFile -> + deserializeIdeaKotlinDependencyOrFail(dependencyFile) + } + + sourceSetDirectory.name to deserializedDependencies.toSet() + } + + assertions(IdeaKotlinDependenciesContainer(dependenciesBySourceSetName)) + } +} + +private fun deserializeIdeaKotlinDependencyOrFail(file: File): IdeaKotlinDependency { + return GradleIntegrationTestIdeaKotlinSerializationContext.IdeaKotlinDependency(file.readBytes()) + ?: fail("Failed to deserialize dependency. $file") +} + +private object GradleIntegrationTestIdeaKotlinSerializationContext : IdeaKotlinSerializationContext { + override val extrasSerializationExtension = kotlinExtrasSerialization + override val logger: IdeaKotlinSerializationLogger = object : IdeaKotlinSerializationLogger { + override fun report(severity: IdeaKotlinSerializationLogger.Severity, message: String, cause: Throwable?) { + println("$severity: $message") + if (cause != null) println(cause.stackTraceToString()) + } + } +} + + class IdeaKotlinDependenciesContainer( + private val dependencies: Map> +) { + operator fun get(sourceSetName: String) = dependencies[sourceSetName] + ?: fail("SourceSet with name $sourceSetName not found. Found: ${dependencies.keys}") +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/build.gradle.kts new file mode 100644 index 00000000000..e8e463cd3bf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/build.gradle.kts @@ -0,0 +1,16 @@ +@file:Suppress("OPT_IN_USAGE") + +plugins { + kotlin("multiplatform") +} + +kotlin { + targetHierarchy.default() + jvm() + linuxX64() + linuxArm64() + + sourceSets.commonMain.get().dependencies { + implementation("org.jetbrains.sample:producerA:1.0.0-SNAPSHOT") + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt new file mode 100644 index 00000000000..a24fbc86602 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt @@ -0,0 +1,5 @@ +object ConsumerACommon { + init { + ProducerACommon + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt new file mode 100644 index 00000000000..7fac304d38f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt @@ -0,0 +1,7 @@ +object ConsumerALinuxX64 { + init { + ProducerACommon + ProducerANative + ProducerALinuxX64 + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt new file mode 100644 index 00000000000..3a0f8f1ea5b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt @@ -0,0 +1,5 @@ +object ConsumerANative { + init { + ProducerANative + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/settings.gradle.kts new file mode 100644 index 00000000000..51772eedeb2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/consumerBuild/settings.gradle.kts @@ -0,0 +1,14 @@ +dependencyResolutionManagement { + repositories { + mavenLocal() + mavenCentral() + } +} + +include(":consumerA") + +includeBuild("") { + dependencySubstitution { + substitute(module("org.jetbrains.sample:producerA")).using(project(":producerA")) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/build.gradle.kts new file mode 100644 index 00000000000..88f6b254a60 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/build.gradle.kts @@ -0,0 +1,17 @@ +@file:Suppress("OPT_IN_USAGE") + +plugins { + kotlin("multiplatform") + `maven-publish` +} + + +group = "org.jetbrains.sample" +version = "1.0.0-SNAPSHOT" + +kotlin { + targetHierarchy.default() + jvm() + linuxX64() + linuxArm64() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/commonMain/kotlin/ProducerACommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/commonMain/kotlin/ProducerACommon.kt new file mode 100644 index 00000000000..b072253bfee --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/commonMain/kotlin/ProducerACommon.kt @@ -0,0 +1 @@ +object ProducerACommon \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt new file mode 100644 index 00000000000..921704bb926 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt @@ -0,0 +1 @@ +object ProducerALinuxX64 \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt new file mode 100644 index 00000000000..618d78c3f83 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt @@ -0,0 +1 @@ +object ProducerANative \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/settings.gradle.kts new file mode 100644 index 00000000000..dd20205742e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/simple/producerBuild/settings.gradle.kts @@ -0,0 +1,8 @@ +dependencyResolutionManagement { + repositories { + mavenLocal() + mavenCentral() + } +} + +include(":producerA") diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeSourceDependencyResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeSourceDependencyResolutionTest.kt index 4b13cd66769..f66395688cb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeSourceDependencyResolutionTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeSourceDependencyResolutionTest.kt @@ -171,8 +171,8 @@ class IdeSourceDependencyResolutionTest { consumer.resolveDependencies("jvmAndAndroidMain").assertMatches( regularSourceDependency(":producer/commonMain"), regularSourceDependency(":producer/jvmAndAndroidMain"), - projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/producer/build/libs/producer-jvm.jar")), - dependsOnDependency(":consumer/commonMain") + dependsOnDependency(":consumer/commonMain"), + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/build/libs/producer-jvm.jar")) ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/ideaKotlinDependencyMatcherBuilders.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/ideaKotlinDependencyMatcherBuilders.kt index 88832502180..0bcf66386d9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/ideaKotlinDependencyMatcherBuilders.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/ideaKotlinDependencyMatcherBuilders.kt @@ -5,11 +5,8 @@ package org.jetbrains.kotlin.gradle.ide -import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency -import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.ideSourceDependency import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.internal -import org.jetbrains.kotlin.gradle.plugin.sources.project fun dependsOnDependency(sourceSet: KotlinSourceSet) = org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.dependsOnDependency(sourceSet.internal.project, sourceSet.name) \ No newline at end of file