[KPM] Introduce separate IdeaKotlinDependencyCoordinates entity

This splits IdeaKotlinSourceCoordinates from the actual
IdeaKotlinSourceDependency

KT-51386
This commit is contained in:
sebastian.sellmair
2022-03-15 10:46:54 +01:00
committed by Space
parent 588ea65d66
commit 0f8f61c373
5 changed files with 57 additions and 25 deletions
@@ -54,7 +54,7 @@ public abstract class org/jetbrains/kotlin/gradle/kpm/KotlinMutableExternalModel
public abstract fun set (Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelKey;Ljava/lang/Object;)V public abstract fun set (Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelKey;Ljava/lang/Object;)V
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates {
public abstract fun getGroup ()Ljava/lang/String; public abstract fun getGroup ()Ljava/lang/String;
public abstract fun getKotlinFragmentName ()Ljava/lang/String; public abstract fun getKotlinFragmentName ()Ljava/lang/String;
public abstract fun getKotlinModuleName ()Ljava/lang/String; public abstract fun getKotlinModuleName ()Ljava/lang/String;
@@ -79,6 +79,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinD
public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency$Companion; public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency$Companion;
public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String; public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String;
public static final field SOURCES_BINARY_TYPE Ljava/lang/String; public static final field SOURCES_BINARY_TYPE Ljava/lang/String;
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates;
public abstract fun getExternal ()Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer; public abstract fun getExternal ()Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer;
} }
@@ -88,8 +89,11 @@ public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency$Com
public static final field SOURCES_BINARY_TYPE Ljava/lang/String; public static final field SOURCES_BINARY_TYPE Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates : java/io/Serializable {
}
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyKt {
public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency;)Ljava/lang/String; 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 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 isDocumentationType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z
public static final fun isSourcesType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isSourcesType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z
@@ -198,7 +202,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinR
public abstract fun getFile ()Ljava/io/File; public abstract fun getFile ()Ljava/io/File;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency { 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 getBuildId ()Ljava/lang/String;
public abstract fun getKotlinFragmentName ()Ljava/lang/String; public abstract fun getKotlinFragmentName ()Ljava/lang/String;
public abstract fun getKotlinModuleClassifier ()Ljava/lang/String; public abstract fun getKotlinModuleClassifier ()Ljava/lang/String;
@@ -207,6 +211,13 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinS
public abstract fun getProjectPath ()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 interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory : java/io/Serializable {
public abstract fun getFile ()Ljava/io/File; public abstract fun getFile ()Ljava/io/File;
} }
@@ -15,6 +15,7 @@ import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinDependency : Serializable { sealed interface IdeaKotlinDependency : Serializable {
val coordinates: IdeaKotlinDependencyCoordinates?
val external: KotlinExternalModelContainer val external: KotlinExternalModelContainer
companion object { companion object {
@@ -24,7 +25,9 @@ sealed interface IdeaKotlinDependency : Serializable {
} }
} }
sealed interface IdeaKotlinSourceDependency : IdeaKotlinDependency { sealed interface IdeaKotlinDependencyCoordinates : Serializable
sealed interface IdeaKotlinSourceCoordinates : IdeaKotlinDependencyCoordinates {
val buildId: String val buildId: String
val projectPath: String val projectPath: String
val projectName: String val projectName: String
@@ -33,10 +36,11 @@ sealed interface IdeaKotlinSourceDependency : IdeaKotlinDependency {
val kotlinFragmentName: String val kotlinFragmentName: String
} }
val IdeaKotlinSourceDependency.path: String sealed interface IdeaKotlinSourceDependency : IdeaKotlinDependency {
get() = "${buildId.takeIf { it != ":" }.orEmpty()}$projectPath/$kotlinModuleName/$kotlinFragmentName" override val coordinates: IdeaKotlinSourceCoordinates
}
sealed interface IdeaKotlinBinaryCoordinates : Serializable { sealed interface IdeaKotlinBinaryCoordinates : IdeaKotlinDependencyCoordinates {
val group: String val group: String
val module: String val module: String
val version: String val version: String
@@ -45,7 +49,7 @@ sealed interface IdeaKotlinBinaryCoordinates : Serializable {
} }
sealed interface IdeaKotlinBinaryDependency : IdeaKotlinDependency { sealed interface IdeaKotlinBinaryDependency : IdeaKotlinDependency {
val coordinates: IdeaKotlinBinaryCoordinates? override val coordinates: IdeaKotlinBinaryCoordinates?
} }
sealed interface IdeaKotlinUnresolvedBinaryDependency : IdeaKotlinBinaryDependency { sealed interface IdeaKotlinUnresolvedBinaryDependency : IdeaKotlinBinaryDependency {
@@ -63,17 +67,12 @@ val IdeaKotlinResolvedBinaryDependency.isClasspathType get() = binaryType == CLA
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinSourceDependencyImpl( data class IdeaKotlinSourceDependencyImpl(
override val buildId: String, override val coordinates: IdeaKotlinSourceCoordinates,
override val projectPath: String,
override val projectName: String,
override val kotlinModuleName: String,
override val kotlinModuleClassifier: String?,
override val kotlinFragmentName: String,
override val external: KotlinExternalModelContainer = KotlinExternalModelContainer.Empty override val external: KotlinExternalModelContainer = KotlinExternalModelContainer.Empty
) : IdeaKotlinSourceDependency { ) : IdeaKotlinSourceDependency {
override fun toString(): String { override fun toString(): String {
return "fragment: $path" return "source: $coordinates"
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
@@ -102,6 +101,26 @@ data class IdeaKotlinBinaryCoordinatesImpl(
} }
} }
@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 @InternalKotlinGradlePluginApi
data class IdeaKotlinResolvedBinaryDependencyImpl( data class IdeaKotlinResolvedBinaryDependencyImpl(
override val coordinates: IdeaKotlinBinaryCoordinates?, override val coordinates: IdeaKotlinBinaryCoordinates?,
@@ -18,7 +18,7 @@ interface IdeaKotlinSourceDependencyMatcher : IdeaKotlinDependencyMatcher<IdeaKo
override val description: String = path override val description: String = path
override fun matches(dependency: IdeaKotlinSourceDependency): Boolean { override fun matches(dependency: IdeaKotlinSourceDependency): Boolean {
return path == dependency.path return path == dependency.coordinates.path
} }
} }
@@ -26,7 +26,7 @@ interface IdeaKotlinSourceDependencyMatcher : IdeaKotlinDependencyMatcher<IdeaKo
override val description: String = pathRegex.pattern override val description: String = pathRegex.pattern
override fun matches(dependency: IdeaKotlinSourceDependency): Boolean { override fun matches(dependency: IdeaKotlinSourceDependency): Boolean {
return pathRegex.matches(dependency.path) return pathRegex.matches(dependency.coordinates.path)
} }
} }
} }
@@ -116,7 +116,7 @@ fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set<IdeaKotlinSourceDe
appendLine() appendLine()
appendLine("${name}: Unexpected source dependency paths:") appendLine("${name}: Unexpected source dependency paths:")
unexpectedDependencies.forEach { unexpectedDependency -> unexpectedDependencies.forEach { unexpectedDependency ->
appendLine("\"${unexpectedDependency.path}\",") appendLine("\"${unexpectedDependency.coordinates.path}\",")
} }
} }
@@ -131,7 +131,7 @@ fun IdeaKotlinFragment.assertSourceDependencies(matchers: Set<IdeaKotlinSourceDe
appendLine() appendLine()
appendLine("${name}: Resolved source dependency paths:") appendLine("${name}: Resolved source dependency paths:")
sourceDependencies.forEach { dependency -> sourceDependencies.forEach { dependency ->
appendLine("\"${dependency.path}\",") appendLine("\"${dependency.coordinates.path}\",")
} }
} }
) )
@@ -27,12 +27,14 @@ internal class IdeaKotlinSourceDependencyResolver(
val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
return resolution.allVisibleSourceSetNames.map { visibleFragmentName -> return resolution.allVisibleSourceSetNames.map { visibleFragmentName ->
IdeaKotlinSourceDependencyImpl( IdeaKotlinSourceDependencyImpl(
buildId = gradleProjectIdentifier.build.name, IdeaKotlinSourceCoordinatesImpl(
projectPath = gradleProjectIdentifier.projectPath, buildId = gradleProjectIdentifier.build.name,
projectName = gradleProjectIdentifier.projectName, projectPath = gradleProjectIdentifier.projectPath,
kotlinModuleName = kotlinModuleIdentifier.moduleName, projectName = gradleProjectIdentifier.projectName,
kotlinModuleClassifier = kotlinModuleIdentifier.moduleClassifier, kotlinModuleName = kotlinModuleIdentifier.moduleName,
kotlinFragmentName = visibleFragmentName kotlinModuleClassifier = kotlinModuleIdentifier.moduleClassifier,
kotlinFragmentName = visibleFragmentName
)
) )
} }
} }