From 1a0d8f777c6523408e7804544193ac1d2cf46643 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 16 Mar 2022 10:46:05 +0100 Subject: [PATCH] [KPM] Remove IdeaKotlinModuleIdentifier in favor of consistent IdeaKotlinFragmentCoordinates KT-51386 --- .../kotlin-gradle-plugin-idea.txt | 85 ++++++++++--------- .../kpm/idea/IdeaKotlinBinaryCoordinates.kt | 34 ++++++++ .../gradle/kpm/idea/IdeaKotlinDependency.kt | 71 ++-------------- .../idea/IdeaKotlinDependencyCoordinates.kt | 10 +++ .../gradle/kpm/idea/IdeaKotlinFragment.kt | 9 +- .../kpm/idea/IdeaKotlinFragmentCoordinates.kt | 30 +++++++ .../gradle/kpm/idea/IdeaKotlinModule.kt | 10 ++- .../kpm/idea/IdeaKotlinModuleCoordinates.kt | 34 ++++++++ .../kpm/idea/IdeaKotlinModuleIdentifier.kt | 48 ----------- ...ckwardsCompatibilityDeserializationTest.kt | 6 +- .../IdeaKotlinFragmentDependencyMatcher.kt | 31 +++++++ .../IdeaKotlinSourceDependencyMatcher.kt | 31 ------- .../kpm/idea/testFixtures/assertions.kt | 22 +++-- ...rojectToProjectDependencyResolutionTest.kt | 16 ++-- .../kpm/idea/IdeaKotlinFragmentBuilder.kt | 5 +- .../IdeaKotlinFragmentCoordinatesBuilder.kt | 15 ++++ ...tlinGranularFragmentDependencyResolver.kt} | 24 +++--- .../kpm/idea/IdeaKotlinModuleBuilder.kt | 7 +- .../IdeaKotlinModuleCoordinatesBuilder.kt | 19 +++++ .../idea/IdeaKotlinModuleIdentifierBuilder.kt | 21 ----- .../kpm/idea/IdeaKotlinProjectModelBuilder.kt | 2 +- .../IdeaKotlinProjectModelBuilderFactory.kt | 2 +- .../IdeaKotlinRefinesDependencyResolver.kt | 14 +-- 23 files changed, 277 insertions(+), 269 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinFragmentDependencyMatcher.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinSourceDependencyMatcher.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesBuilder.kt rename libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/{IdeaKotlinSourceDependencyResolver.kt => IdeaKotlinGranularFragmentDependencyResolver.kt} (70%) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesBuilder.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifierBuilder.kt diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt index 7146e01f827..86d190f2c0e 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt @@ -93,23 +93,48 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinD } public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyKt { - public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceCoordinates;)Ljava/lang/String; public static final fun isClasspathType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isDocumentationType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isSourcesType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z } public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment : java/io/Serializable { + public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates; public abstract fun getDependencies ()Ljava/util/List; public abstract fun getExternal ()Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer; public abstract fun getLanguageSettings ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings; - public abstract fun getModuleIdentifier ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier; - public abstract fun getName ()Ljava/lang/String; public abstract fun getPlatforms ()Ljava/util/Set; public abstract fun getResourceDirectories ()Ljava/util/List; public abstract fun getSourceDirectories ()Ljava/util/List; } +public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates : java/io/Serializable, org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates { + public abstract fun getFragmentName ()Ljava/lang/String; + public abstract fun getModule ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates; +} + +public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesKt { + public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates;)Ljava/lang/String; +} + +public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency { + public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates; + public abstract fun getType ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; +} + +public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type : java/lang/Enum, java/io/Serializable { + public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type$Companion; + public static final field Friend Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; + public static final field Refines Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; + public static final field Regular Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; + public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; + public static fun values ()[Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; +} + +public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentKt { + public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment;)Ljava/lang/String; +} + public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinJsPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { public abstract fun isIr ()Z } @@ -129,24 +154,26 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinL public abstract fun isProgressiveMode ()Z } -public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifier : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier { - public abstract fun getBuildId ()Ljava/lang/String; - public abstract fun getProjectId ()Ljava/lang/String; -} - -public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifier : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier { - public abstract fun getGroup ()Ljava/lang/String; - public abstract fun getName ()Ljava/lang/String; -} - public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule : java/io/Serializable { + public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates; public abstract fun getFragments ()Ljava/util/List; - public abstract fun getModuleIdentifier ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier; - public abstract fun getName ()Ljava/lang/String; } -public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier : java/io/Serializable { +public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates : java/io/Serializable { + public abstract fun getBuildId ()Ljava/lang/String; public abstract fun getModuleClassifier ()Ljava/lang/String; + public abstract fun getModuleName ()Ljava/lang/String; + public abstract fun getProjectName ()Ljava/lang/String; + public abstract fun getProjectPath ()Ljava/lang/String; +} + +public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesKt { + public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates;)Ljava/lang/String; +} + +public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleKt { + public static final fun getModuleClassifier (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule;)Ljava/lang/String; + public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule;)Ljava/lang/String; } public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinNativePlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { @@ -201,32 +228,6 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinR public abstract fun getFile ()Ljava/io/File; } -public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceCoordinates : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates { - public abstract fun getBuildId ()Ljava/lang/String; - public abstract fun getKotlinFragmentName ()Ljava/lang/String; - public abstract fun getKotlinModuleClassifier ()Ljava/lang/String; - public abstract fun getKotlinModuleName ()Ljava/lang/String; - public abstract fun getProjectName ()Ljava/lang/String; - public abstract fun getProjectPath ()Ljava/lang/String; -} - -public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceCoordinatesImpl$Companion { -} - -public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency { - public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceCoordinates; - public abstract fun getType ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; -} - -public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type : java/lang/Enum, java/io/Serializable { - public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type$Companion; - public static final field Friend Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; - public static final field Refines Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; - public static final field Regular Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; - public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; - public static fun values ()[Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency$Type; -} - public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory : java/io/Serializable { public abstract fun getFile ()Ljava/io/File; } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates.kt new file mode 100644 index 00000000000..b3630f98bcc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates.kt @@ -0,0 +1,34 @@ +/* + * 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.kpm.idea + +sealed interface IdeaKotlinBinaryCoordinates : IdeaKotlinDependencyCoordinates { + val group: String + val module: String + val version: String + val kotlinModuleName: String? + val kotlinFragmentName: String? +} + +@InternalKotlinGradlePluginApi +data class IdeaKotlinBinaryCoordinatesImpl( + override val group: String, + override val module: String, + override val version: String, + override val kotlinModuleName: String? = null, + override val kotlinFragmentName: String? = null +) : IdeaKotlinBinaryCoordinates { + + override fun toString(): String { + return "$group:$module:$version" + + (if (kotlinModuleName != null) ":$kotlinModuleName" else "") + + (if (kotlinFragmentName != null) ":$kotlinFragmentName" else "") + } + + companion object { + private const val serialVersionUID = 0L + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency.kt index 35b3ab4146a..a04ffbb7a60 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency.kt @@ -26,18 +26,7 @@ sealed interface IdeaKotlinDependency : Serializable { } } -sealed interface IdeaKotlinDependencyCoordinates : Serializable - -sealed interface IdeaKotlinSourceCoordinates : IdeaKotlinDependencyCoordinates { - val buildId: String - val projectPath: String - val projectName: String - val kotlinModuleName: String - val kotlinModuleClassifier: String? - val kotlinFragmentName: String -} - -sealed interface IdeaKotlinSourceDependency : IdeaKotlinDependency { +sealed interface IdeaKotlinFragmentDependency : IdeaKotlinDependency { enum class Type : Serializable { Regular, Friend, Refines; @@ -48,15 +37,7 @@ sealed interface IdeaKotlinSourceDependency : IdeaKotlinDependency { } val type: Type - override val coordinates: IdeaKotlinSourceCoordinates -} - -sealed interface IdeaKotlinBinaryCoordinates : IdeaKotlinDependencyCoordinates { - val group: String - val module: String - val version: String - val kotlinModuleName: String? - val kotlinFragmentName: String? + override val coordinates: IdeaKotlinFragmentCoordinates } sealed interface IdeaKotlinBinaryDependency : IdeaKotlinDependency { @@ -77,11 +58,11 @@ val IdeaKotlinResolvedBinaryDependency.isDocumentationType get() = binaryType == val IdeaKotlinResolvedBinaryDependency.isClasspathType get() = binaryType == CLASSPATH_BINARY_TYPE @InternalKotlinGradlePluginApi -data class IdeaKotlinSourceDependencyImpl( - override val type: IdeaKotlinSourceDependency.Type, - override val coordinates: IdeaKotlinSourceCoordinates, +data class IdeaKotlinFragmentDependencyImpl( + override val type: IdeaKotlinFragmentDependency.Type, + override val coordinates: IdeaKotlinFragmentCoordinates, override val external: KotlinExternalModelContainer = KotlinExternalModelContainer.Empty, -) : IdeaKotlinSourceDependency { +) : IdeaKotlinFragmentDependency { override fun toString(): String { @Suppress("DEPRECATION") @@ -94,46 +75,6 @@ data class IdeaKotlinSourceDependencyImpl( } } -@InternalKotlinGradlePluginApi -data class IdeaKotlinBinaryCoordinatesImpl( - override val group: String, - override val module: String, - override val version: String, - override val kotlinModuleName: String? = null, - override val kotlinFragmentName: String? = null -) : IdeaKotlinBinaryCoordinates { - - override fun toString(): String { - return "$group:$module:$version" + - (if (kotlinModuleName != null) ":$kotlinModuleName" else "") + - (if (kotlinFragmentName != null) ":$kotlinFragmentName" else "") - } - - companion object { - private const val serialVersionUID = 0L - } -} - -@InternalKotlinGradlePluginApi -data class IdeaKotlinSourceCoordinatesImpl( - override val buildId: String, - override val projectPath: String, - override val projectName: String, - override val kotlinModuleName: String, - override val kotlinModuleClassifier: String?, - override val kotlinFragmentName: String -) : IdeaKotlinSourceCoordinates { - - override fun toString(): String = path - - companion object { - private const val serialVersionUID = 0L - } -} - -val IdeaKotlinSourceCoordinates.path: String - get() = "${buildId.takeIf { it != ":" }.orEmpty()}$projectPath/$kotlinModuleName/$kotlinFragmentName" - @InternalKotlinGradlePluginApi data class IdeaKotlinResolvedBinaryDependencyImpl( override val coordinates: IdeaKotlinBinaryCoordinates?, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates.kt new file mode 100644 index 00000000000..26dfa059794 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates.kt @@ -0,0 +1,10 @@ +/* + * 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.kpm.idea + +import java.io.Serializable + +sealed interface IdeaKotlinDependencyCoordinates : Serializable diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt index abf783285b5..1b93033d7b9 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt @@ -9,8 +9,7 @@ import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer import java.io.Serializable interface IdeaKotlinFragment : Serializable { - val name: String - val moduleIdentifier: IdeaKotlinModuleIdentifier + val coordinates: IdeaKotlinFragmentCoordinates val platforms: Set val languageSettings: IdeaKotlinLanguageSettings? val dependencies: List @@ -19,10 +18,11 @@ interface IdeaKotlinFragment : Serializable { val external: KotlinExternalModelContainer } +val IdeaKotlinFragment.name get() = coordinates.fragmentName + @InternalKotlinGradlePluginApi data class IdeaKotlinFragmentImpl( - override val name: String, - override val moduleIdentifier: IdeaKotlinModuleIdentifier, + override val coordinates: IdeaKotlinFragmentCoordinates, override val platforms: Set, override val languageSettings: IdeaKotlinLanguageSettings?, override val dependencies: List, @@ -36,3 +36,4 @@ data class IdeaKotlinFragmentImpl( private const val serialVersionUID = 0L } } + diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates.kt new file mode 100644 index 00000000000..66f2f2fbc2b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates.kt @@ -0,0 +1,30 @@ +/* + * 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.kpm.idea + +import java.io.Serializable + +sealed interface IdeaKotlinFragmentCoordinates : Serializable, IdeaKotlinDependencyCoordinates { + val module: IdeaKotlinModuleCoordinates + val fragmentName: String +} + +@InternalKotlinGradlePluginApi +data class IdeaKotlinFragmentCoordinatesImpl( + override val module: IdeaKotlinModuleCoordinates, + override val fragmentName: String +) : IdeaKotlinFragmentCoordinates { + + override fun toString(): String = path + + @InternalKotlinGradlePluginApi + companion object { + private const val serialVersionUID = 0L + } +} + +val IdeaKotlinFragmentCoordinates.path: String + get() = "${module.path}/$fragmentName" diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt index 4f5741686aa..f05cdea4c59 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt @@ -8,15 +8,17 @@ package org.jetbrains.kotlin.gradle.kpm.idea import java.io.Serializable interface IdeaKotlinModule : Serializable { - val name: String - val moduleIdentifier: IdeaKotlinModuleIdentifier + val coordinates: IdeaKotlinModuleCoordinates val fragments: List } +val IdeaKotlinModule.name get() = coordinates.moduleName + +val IdeaKotlinModule.moduleClassifier get() = coordinates.moduleClassifier + @InternalKotlinGradlePluginApi data class IdeaKotlinModuleImpl( - override val name: String, - override val moduleIdentifier: IdeaKotlinModuleIdentifier, + override val coordinates: IdeaKotlinModuleCoordinates, override val fragments: List ) : IdeaKotlinModule { diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates.kt new file mode 100644 index 00000000000..92143279fec --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates.kt @@ -0,0 +1,34 @@ +/* + * 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.kpm.idea + +import java.io.Serializable + +interface IdeaKotlinModuleCoordinates : Serializable { + val buildId: String + val projectPath: String + val projectName: String + val moduleName: String + val moduleClassifier: String? +} + +val IdeaKotlinModuleCoordinates.path: String + get() = "${buildId.takeIf { it != ":" }.orEmpty()}$projectPath/$moduleName" + +@InternalKotlinGradlePluginApi +data class IdeaKotlinModuleCoordinatesImpl( + override val buildId: String, + override val projectPath: String, + override val projectName: String, + override val moduleName: String, + override val moduleClassifier: String? +) : IdeaKotlinModuleCoordinates { + + @InternalKotlinGradlePluginApi + companion object { + private const val serialVersionUID = 0L + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt deleted file mode 100644 index 30e01bec2a5..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.kpm.idea - -import java.io.Serializable - -interface IdeaKotlinModuleIdentifier : Serializable { - val moduleClassifier: String? -} - -interface IdeaKotlinLocalModuleIdentifier : IdeaKotlinModuleIdentifier { - val buildId: String - val projectId: String -} - -interface IdeaKotlinMavenModuleIdentifier : IdeaKotlinModuleIdentifier { - val group: String - val name: String -} - -@InternalKotlinGradlePluginApi -data class IdeaKotlinLocalModuleIdentifierImpl( - override val moduleClassifier: String?, - override val buildId: String, - override val projectId: String -) : IdeaKotlinLocalModuleIdentifier { - - @InternalKotlinGradlePluginApi - companion object { - private const val serialVersionUID = 0L - } -} - -@InternalKotlinGradlePluginApi -data class IdeaKotlinMavenModuleIdentifierImpl( - override val moduleClassifier: String?, - override val group: String, - override val name: String -) : IdeaKotlinMavenModuleIdentifier { - - @InternalKotlinGradlePluginApi - companion object { - private const val serialVersionUID = 0L - } -} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/BackwardsCompatibilityDeserializationTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/BackwardsCompatibilityDeserializationTest.kt index 91a6b9ccde4..fd68c31338e 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/BackwardsCompatibilityDeserializationTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/BackwardsCompatibilityDeserializationTest.kt @@ -63,10 +63,10 @@ class BackwardsCompatibilityDeserializationTest { run { val deserializedModelProxy = createProxyInstance(deserializedModel) - val deserializedMainModuleProxy = deserializedModelProxy.modules.firstOrNull { it.moduleIdentifier.moduleClassifier == null } + val deserializedMainModuleProxy = deserializedModelProxy.modules.firstOrNull { it.coordinates.moduleClassifier == null } ?: fail("Missing main module") - val deserializedTestModuleProxy = deserializedModelProxy.modules.firstOrNull { it.moduleIdentifier.moduleClassifier == "test" } + val deserializedTestModuleProxy = deserializedModelProxy.modules.firstOrNull { it.coordinates.moduleClassifier == "test" } ?: fail("Missing test module") listOf(deserializedMainModuleProxy, deserializedTestModuleProxy).forEach { module -> @@ -100,7 +100,7 @@ class BackwardsCompatibilityDeserializationTest { val deserializedModel = deserializeModelWithBackwardsCompatibleClasses(model) val deserializedModelProxy = createProxyInstance(deserializedModel) - val deserializedMainModuleProxy = deserializedModelProxy.modules.find { it.moduleIdentifier.moduleClassifier == null } + val deserializedMainModuleProxy = deserializedModelProxy.modules.find { it.coordinates.moduleClassifier == null } ?: fail("Missing main module") val deserializedCommonFragmentProxy = deserializedMainModuleProxy.fragments.find { it.name == "common" } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinFragmentDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinFragmentDependencyMatcher.kt new file mode 100644 index 00000000000..6e8b3ec7072 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinFragmentDependencyMatcher.kt @@ -0,0 +1,31 @@ +package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures + +import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinFragmentDependency + +fun buildIdeaKotlinFragmentDependencyMatchers(notation: Any?): List { + return when (notation) { + null -> emptyList() + is Iterable<*> -> notation.flatMap { buildIdeaKotlinFragmentDependencyMatchers(it) } + is String -> listOf(IdeaKotlinFragmentDependencyMatcher.DependencyLiteral(notation)) + is Regex -> listOf(IdeaKotlinFragmentDependencyMatcher.DependencyRegex(notation)) + else -> error("Can't build ${IdeaKotlinFragmentDependencyMatcher::class.simpleName} from $notation") + } +} + +interface IdeaKotlinFragmentDependencyMatcher : IdeaKotlinDependencyMatcher { + class DependencyLiteral(private val dependencyLiteral: String) : IdeaKotlinFragmentDependencyMatcher { + override val description: String = dependencyLiteral + + override fun matches(dependency: IdeaKotlinFragmentDependency): Boolean { + return this.dependencyLiteral == dependency.toString() + } + } + + class DependencyRegex(private val dependencyRegex: Regex) : IdeaKotlinFragmentDependencyMatcher { + override val description: String = dependencyRegex.pattern + + override fun matches(dependency: IdeaKotlinFragmentDependency): Boolean { + return dependencyRegex.matches(dependency.coordinates.toString()) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinSourceDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinSourceDependencyMatcher.kt deleted file mode 100644 index 3b829d50400..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKotlinSourceDependencyMatcher.kt +++ /dev/null @@ -1,31 +0,0 @@ -package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures - -import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinSourceDependency - -fun buildIdeaKotlinSourceDependencyMatchers(notation: Any?): List { - return when (notation) { - null -> emptyList() - is Iterable<*> -> notation.flatMap { buildIdeaKotlinSourceDependencyMatchers(it) } - is String -> listOf(IdeaKotlinSourceDependencyMatcher.FragmentPath(notation)) - is Regex -> listOf(IdeaKotlinSourceDependencyMatcher.FragmentPathRegex(notation)) - else -> error("Can't build ${IdeaKotlinSourceDependencyMatcher::class.simpleName} from $notation") - } -} - -interface IdeaKotlinSourceDependencyMatcher : IdeaKotlinDependencyMatcher { - class FragmentPath(private val dependency: String) : IdeaKotlinSourceDependencyMatcher { - override val description: String = dependency - - override fun matches(dependency: IdeaKotlinSourceDependency): Boolean { - return this.dependency == dependency.toString() - } - } - - class FragmentPathRegex(private val dependencyRegex: Regex) : IdeaKotlinSourceDependencyMatcher { - override val description: String = dependencyRegex.pattern - - override fun matches(dependency: IdeaKotlinSourceDependency): Boolean { - return dependencyRegex.matches(dependency.toString()) - } - } -} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/assertions.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/assertions.kt index 74e0ef899e8..cde64f88073 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/assertions.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/assertions.kt @@ -33,7 +33,7 @@ fun IdeaKotlinFragment.assertResolvedBinaryDependencies( when (dependency) { is IdeaKotlinResolvedBinaryDependencyImpl -> dependency is IdeaKotlinUnresolvedBinaryDependencyImpl -> fail("Unexpected unresolved dependency: $dependency") - is IdeaKotlinSourceDependencyImpl -> null + is IdeaKotlinFragmentDependencyImpl -> null } } .filter { it.binaryType == binaryType } @@ -91,8 +91,8 @@ fun IdeaKotlinFragment.assertResolvedBinaryDependencies( binaryType: String, vararg matchers: Any? ) = assertResolvedBinaryDependencies(binaryType, matchers.toSet()) -fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set): Set { - val sourceDependencies = dependencies.filterIsInstance().toSet() +fun IdeaKotlinFragment.assertFragmentDependencies(matchers: Set): Set { + val sourceDependencies = dependencies.filterIsInstance().toSet() val unexpectedDependencies = sourceDependencies .filter { dependency -> matchers.none { matcher -> matcher.matches(dependency) } } @@ -105,13 +105,11 @@ fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set appendLine("\"${unexpectedDependency}\",") } @@ -119,14 +117,14 @@ fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set appendLine(missingDependency.description) } } appendLine() - appendLine("${fragmentIdentifier}: Resolved source dependency paths:") + appendLine("${coordinates.path}: Resolved source dependency paths:") sourceDependencies.forEach { dependency -> appendLine("\"${dependency}\",") } @@ -135,8 +133,8 @@ fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set): Set = - assertSourceDependencies(matchers.flatMap { buildIdeaKotlinSourceDependencyMatchers(it) }.toSet()) +fun IdeaKotlinFragment.assertFragmentDependencies(matchers: Set): Set = + assertFragmentDependencies(matchers.flatMap { buildIdeaKotlinFragmentDependencyMatchers(it) }.toSet()) -fun IdeaKotlinFragment.assertSourceDependencies(vararg matchers: Any?) = - assertSourceDependencies(matchers.toSet()) +fun IdeaKotlinFragment.assertFragmentDependencies(vararg matchers: Any?) = + assertFragmentDependencies(matchers.toSet()) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/SimpleProjectToProjectDependencyResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/SimpleProjectToProjectDependencyResolutionTest.kt index 3c7d353a97e..699879fa466 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/SimpleProjectToProjectDependencyResolutionTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/SimpleProjectToProjectDependencyResolutionTest.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty -import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertSourceDependencies +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertFragmentDependencies import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.junit.Test @@ -85,12 +85,12 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe fun ifMainModule(vararg any: Any?) = listOf(*any).takeIf { module.name == KotlinGradleModule.MAIN_MODULE_NAME } - module.assertContainsFragment("common").assertSourceDependencies( + module.assertContainsFragment("common").assertFragmentDependencies( "regular::producer/main/common", ifTestModule("friend::consumer/main/common") ) - module.assertContainsFragment("jvm").assertSourceDependencies( + module.assertContainsFragment("jvm").assertFragmentDependencies( "regular::producer/main/jvm", "regular::producer/main/common", ifMainModule( @@ -103,7 +103,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe ) ) - module.assertContainsFragment("nativeCommon").assertSourceDependencies( + module.assertContainsFragment("nativeCommon").assertFragmentDependencies( "regular::producer/main/common", "regular::producer/main/nativeCommon", ifMainModule( @@ -116,7 +116,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe ) ) - module.assertContainsFragment("appleCommon").assertSourceDependencies( + module.assertContainsFragment("appleCommon").assertFragmentDependencies( "regular::producer/main/common", "regular::producer/main/appleCommon", "regular::producer/main/nativeCommon", @@ -133,7 +133,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe ) ) - module.assertContainsFragment("linuxX64").assertSourceDependencies( + module.assertContainsFragment("linuxX64").assertFragmentDependencies( "regular::producer/main/common", "regular::producer/main/nativeCommon", "regular::producer/main/linuxX64", @@ -150,7 +150,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe ) ) - module.assertContainsFragment("macosX64").assertSourceDependencies( + module.assertContainsFragment("macosX64").assertFragmentDependencies( "regular::producer/main/macosX64", "regular::producer/main/common", "regular::producer/main/appleCommon", @@ -171,7 +171,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe ) ) - module.assertContainsFragment("iosX64").assertSourceDependencies( + module.assertContainsFragment("iosX64").assertFragmentDependencies( "regular::producer/main/iosX64", "regular::producer/main/common", "regular::producer/main/iosMain", diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt index c934b8738e2..d2d4b851fff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentBuilder.kt @@ -8,15 +8,14 @@ package org.jetbrains.kotlin.gradle.kpm.idea import org.jetbrains.kotlin.gradle.kpm.KotlinExternalModelContainer import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* -internal fun IdeaKotlinProjectModelBuildingContext.toIdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment { +internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment { return if (fragment is KotlinGradleVariant) buildIdeaKotlinVariant(fragment) else buildIdeaKotlinFragment(fragment) } private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment { return IdeaKotlinFragmentImpl( - name = fragment.name, - moduleIdentifier = fragment.containingModule.moduleIdentifier.toIdeaKotlinModuleIdentifier(), + coordinates = IdeaKotlinFragmentCoordinates(fragment), platforms = fragment.containingVariants.map { variant -> buildIdeaKotlinPlatform(variant) }.toSet(), languageSettings = fragment.languageSettings.toIdeaKotlinLanguageSettings(), dependencies = dependencyResolver.resolve(fragment).toList(), diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesBuilder.kt new file mode 100644 index 00000000000..4946ab0d68b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesBuilder.kt @@ -0,0 +1,15 @@ +/* + * 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.kpm.idea + +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment + +internal fun IdeaKotlinFragmentCoordinates(fragment: KotlinGradleFragment): IdeaKotlinFragmentCoordinates { + return IdeaKotlinFragmentCoordinatesImpl( + module = IdeaKotlinModuleCoordinates(fragment.containingModule), + fragmentName = fragment.name + ) +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinGranularFragmentDependencyResolver.kt similarity index 70% rename from libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependencyResolver.kt rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinGranularFragmentDependencyResolver.kt index 651bfcaf803..1c6ce3cba19 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinGranularFragmentDependencyResolver.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule.Companion. import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleDependency -internal class IdeaKotlinSourceDependencyResolver( +internal class IdeaKotlinGranularFragmentDependencyResolver( private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory ) : IdeaKotlinDependencyResolver { override fun resolve(fragment: KotlinGradleFragment): Set { @@ -27,19 +27,21 @@ internal class IdeaKotlinSourceDependencyResolver( val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList() val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier return resolution.allVisibleSourceSetNames.map { visibleFragmentName -> - IdeaKotlinSourceDependencyImpl( + IdeaKotlinFragmentDependencyImpl( type = if ( gradleProjectIdentifier.build == fragment.project.currentBuildId() && gradleProjectIdentifier.projectPath == fragment.project.path - ) IdeaKotlinSourceDependency.Type.Friend - else IdeaKotlinSourceDependency.Type.Regular, - coordinates = IdeaKotlinSourceCoordinatesImpl( - buildId = gradleProjectIdentifier.build.name, - projectPath = gradleProjectIdentifier.projectPath, - projectName = gradleProjectIdentifier.projectName, - kotlinModuleName = kotlinModuleIdentifier.moduleName, - kotlinModuleClassifier = kotlinModuleIdentifier.moduleClassifier, - kotlinFragmentName = visibleFragmentName + ) IdeaKotlinFragmentDependency.Type.Friend + else IdeaKotlinFragmentDependency.Type.Regular, + coordinates = IdeaKotlinFragmentCoordinatesImpl( + module = IdeaKotlinModuleCoordinatesImpl( + buildId = gradleProjectIdentifier.build.name, + projectPath = gradleProjectIdentifier.projectPath, + projectName = gradleProjectIdentifier.projectName, + moduleName = kotlinModuleIdentifier.moduleName, + moduleClassifier = kotlinModuleIdentifier.moduleClassifier, + ), + fragmentName = visibleFragmentName ) ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleBuilder.kt index 23849e9039c..1ae44b85527 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleBuilder.kt @@ -7,10 +7,9 @@ package org.jetbrains.kotlin.gradle.kpm.idea import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule -internal fun IdeaKotlinProjectModelBuildingContext.toIdeaKotlinModule(module: KotlinGradleModule): IdeaKotlinModule { +internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: KotlinGradleModule): IdeaKotlinModule { return IdeaKotlinModuleImpl( - name = module.name, - moduleIdentifier = module.moduleIdentifier.toIdeaKotlinModuleIdentifier(), - fragments = module.fragments.toList().map { fragment -> toIdeaKotlinFragment(fragment) } + coordinates = IdeaKotlinModuleCoordinates(module), + fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) } ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesBuilder.kt new file mode 100644 index 00000000000..25af4be0e72 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesBuilder.kt @@ -0,0 +1,19 @@ +/* + * 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.kpm.idea + +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId + +internal fun IdeaKotlinModuleCoordinates(module: KotlinGradleModule): IdeaKotlinModuleCoordinates { + return IdeaKotlinModuleCoordinatesImpl( + buildId = module.project.currentBuildId().name, + projectPath = module.project.path, + projectName = module.project.name, + moduleName = module.name, + moduleClassifier = module.moduleClassifier + ) +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifierBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifierBuilder.kt deleted file mode 100644 index 5f5121b2f5f..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifierBuilder.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.kpm.idea - -import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier -import org.jetbrains.kotlin.project.model.LocalModuleIdentifier -import org.jetbrains.kotlin.project.model.MavenModuleIdentifier - -internal fun KotlinModuleIdentifier.toIdeaKotlinModuleIdentifier(): IdeaKotlinModuleIdentifier { - return when (this) { - is LocalModuleIdentifier -> IdeaKotlinLocalModuleIdentifierImpl( - moduleClassifier, buildId = buildId, projectId = projectId - ) - is MavenModuleIdentifier -> IdeaKotlinMavenModuleIdentifierImpl( - moduleClassifier, group = group, name = name - ) - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilder.kt index 2a36acd3709..8cb1f2043e7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilder.kt @@ -135,7 +135,7 @@ internal fun IdeaKotlinProjectModelBuildingContext.toIdeaKotlinProjectModel(exte coreLibrariesVersion = extension.coreLibrariesVersion, explicitApiModeCliOption = extension.explicitApi?.cliOption, kotlinNativeHome = File(extension.project.konanHome).absoluteFile, - modules = extension.modules.map { module -> toIdeaKotlinModule(module) } + modules = extension.modules.map { module -> IdeaKotlinModule(module) } ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilderFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilderFactory.kt index 181a339845e..fa364990058 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilderFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelBuilderFactory.kt @@ -26,7 +26,7 @@ internal fun IdeaKotlinProjectModelBuilder.Companion.default( ) registerDependencyResolver( - resolver = IdeaKotlinSourceDependencyResolver(fragmentMetadataResolverFactory), + resolver = IdeaKotlinGranularFragmentDependencyResolver(fragmentMetadataResolverFactory), constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained, phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.SourceDependencyResolution, level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinRefinesDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinRefinesDependencyResolver.kt index f5872274b5d..298f032e2ef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinRefinesDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinRefinesDependencyResolver.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.kpm.idea import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver { @@ -14,16 +13,9 @@ internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolv .map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet() private fun createRefinesDependency(fragment: KotlinGradleFragment): IdeaKotlinDependency { - return IdeaKotlinSourceDependencyImpl( - type = IdeaKotlinSourceDependency.Type.Refines, - coordinates = IdeaKotlinSourceCoordinatesImpl( - buildId = fragment.project.currentBuildId().name, - projectPath = fragment.project.path, - projectName = fragment.project.name, - kotlinModuleName = fragment.containingModule.name, - kotlinModuleClassifier = fragment.containingModule.moduleClassifier, - kotlinFragmentName = fragment.name - ) + return IdeaKotlinFragmentDependencyImpl( + type = IdeaKotlinFragmentDependency.Type.Refines, + coordinates = IdeaKotlinFragmentCoordinates(fragment) ) } }