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 c941894a519..8a7472004ed 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 @@ -8,20 +8,49 @@ package org.jetbrains.kotlin.gradle.idea.testFixtures.tcs import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectArtifactDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency +import java.io.File internal class IdeaKotlinProjectArtifactDependencyMatcher( val type: IdeaKotlinSourceDependency.Type, val projectPath: String, - val artifactFilePath: Regex + val artifactFilePath: FilePathRegex ) : IdeaKotlinDependencyMatcher { override val description: String - get() = "project($type)::$projectPath/${artifactFilePath.pattern}" + get() = "project($type)::$projectPath/${artifactFilePath}" override fun matches(dependency: IdeaKotlinDependency): Boolean { if (dependency !is IdeaKotlinProjectArtifactDependency) return false return dependency.type == type && dependency.coordinates.project.projectPath == projectPath && - dependency.coordinates.artifactFile.path.matches(artifactFilePath) + artifactFilePath.matches(dependency.coordinates.artifactFile) } -} \ No newline at end of file +} + + +fun FilePathRegex(pattern: String): FilePathRegex = FilePathRegex.from(pattern) + +class FilePathRegex private constructor(private val normalizedRegex: Regex) { + override fun toString(): String { + return normalizedRegex.toString() + } + + override fun equals(other: Any?): Boolean { + if (other !is FilePathRegex) return false + return normalizedRegex == other.normalizedRegex + } + + override fun hashCode(): Int { + return normalizedRegex.hashCode() + } + + fun matches(file: File) = normalizedRegex.matches(file.path) + + fun matches(path: String) = normalizedRegex.matches(path) + + companion object { + fun from(pattern: String): FilePathRegex { + return FilePathRegex(Regex(pattern.replace("/", Regex.escape(File.separator)))) + } + } +} 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 99224592778..6135ae0f900 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 @@ -39,7 +39,7 @@ fun dependsOnDependency(project: Project, sourceSetName: String) = fun dependsOnDependency(path: String) = ideSourceDependency(IdeaKotlinSourceDependency.Type.DependsOn, path) fun projectArtifactDependency( - type: IdeaKotlinSourceDependency.Type = IdeaKotlinSourceDependency.Type.Regular, projectPath: String, artifactFilePath: Regex + type: IdeaKotlinSourceDependency.Type = IdeaKotlinSourceDependency.Type.Regular, projectPath: String, artifactFilePath: FilePathRegex ): IdeaKotlinDependencyMatcher = IdeaKotlinProjectArtifactDependencyMatcher( type = type, projectPath = projectPath, diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt index 76b2dbce99a..b8b9b93d3a4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt @@ -101,7 +101,7 @@ class IdeResolveSourceDependenciesTest { dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/linuxMain"), - projectArtifactDependency(Regular, ":producer", Regex(".*/linuxX64/main/klib/producer.klib")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxX64/main/klib/producer.klib")) ) consumer.resolveDependencies("linuxX64Test").assertMatches( @@ -115,7 +115,7 @@ class IdeResolveSourceDependenciesTest { dependsOnDependency(":consumer/commonTest"), dependsOnDependency(":consumer/nativeTest"), dependsOnDependency(":consumer/linuxTest"), - projectArtifactDependency(Regular, ":producer", Regex(".*/linuxX64/main/klib/producer.klib")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxX64/main/klib/producer.klib")) ) consumer.resolveDependencies("linuxArm64Main").assertMatches( @@ -125,7 +125,7 @@ class IdeResolveSourceDependenciesTest { dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/linuxMain"), - projectArtifactDependency(Regular, ":producer", Regex(".*/linuxArm64/main/klib/producer.klib")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxArm64/main/klib/producer.klib")) ) consumer.resolveDependencies("linuxArm64Test").assertMatches( @@ -139,7 +139,7 @@ class IdeResolveSourceDependenciesTest { dependsOnDependency(":consumer/commonTest"), dependsOnDependency(":consumer/nativeTest"), dependsOnDependency(":consumer/linuxTest"), - projectArtifactDependency(Regular, ":producer", Regex(".*/linuxArm64/main/klib/producer.klib")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxArm64/main/klib/producer.klib")) ) } @@ -213,14 +213,14 @@ class IdeResolveSourceDependenciesTest { consumer.resolveDependencies("jvmMain").assertMatches( dependsOnDependency(":consumer/commonMain"), - projectArtifactDependency(Regular, ":producer", Regex(""".*/build/libs/producer.jar""")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/build/libs/producer.jar")) ) consumer.resolveDependencies("jvmTest").assertMatches( friendSourceDependency(":consumer/commonMain"), friendSourceDependency(":consumer/jvmMain"), dependsOnDependency(":consumer/commonTest"), - projectArtifactDependency(Regular, ":producer", Regex(""".*/build/libs/producer.jar""")) + projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/build/libs/producer.jar")) ) } }