diff --git a/plugins/gradle/BUILD.bazel b/plugins/gradle/BUILD.bazel
index 73469ab1c1f7..19e549c868c6 100644
--- a/plugins/gradle/BUILD.bazel
+++ b/plugins/gradle/BUILD.bazel
@@ -80,6 +80,7 @@ jvm_library(
"//platform/forms_rt:java-guiForms-rt",
"//libraries/jspecify",
"//plugins/repository-search",
+ "//platform/util/text-matching",
],
exports = [
"//platform/external-system-api:externalSystem",
diff --git a/plugins/gradle/intellij.gradle.iml b/plugins/gradle/intellij.gradle.iml
index e1e81e483058..92ca3282fa77 100644
--- a/plugins/gradle/intellij.gradle.iml
+++ b/plugins/gradle/intellij.gradle.iml
@@ -67,5 +67,6 @@
+
\ No newline at end of file
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/completion/GradleDependencyCompletionMatcher.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/completion/GradleDependencyCompletionMatcher.kt
index dde0f9c948c7..c291dcd8135f 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/completion/GradleDependencyCompletionMatcher.kt
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/completion/GradleDependencyCompletionMatcher.kt
@@ -3,7 +3,7 @@ package org.jetbrains.plugins.gradle.completion
import com.intellij.codeInsight.completion.PrefixMatcher
import com.intellij.openapi.diagnostic.logger
-import com.intellij.openapi.util.TextRange
+import com.intellij.util.text.matching.MatchedFragment
import org.jetbrains.annotations.ApiStatus
private val log = logger()
@@ -18,7 +18,7 @@ class GradleDependencyCompletionMatcher(prefix: String) : PrefixMatcher(prefix)
return GradleDependencyCompletionMatcher(prefix)
}
- override fun getMatchingFragments(prefix: String, name: String): List? {
+ override fun getMatchingFragments(prefix: String, name: String): List {
try {
return tryGetMatchingFragments(prefix, name)
}
@@ -28,17 +28,17 @@ class GradleDependencyCompletionMatcher(prefix: String) : PrefixMatcher(prefix)
}
}
- private fun tryGetMatchingFragments(prefix: String, name: String): List? {
+ private fun tryGetMatchingFragments(prefix: String, name: String): List {
// handle top level completion case:
// implementation("org.example:lib-implementation:1.0") - "implementation" in the artifact name should be matched
val start = name.indexOf("(").coerceAtLeast(0)
val prefixParts = prefix.split(":")
val nameParts = name.substring(start).split(":")
- val result = mutableListOf()
+ val result = mutableListOf()
var offset = start
var j = 0
for (i in 0 until prefixParts.size) {
- var matchingFragment: TextRange? = null
+ var matchingFragment: MatchedFragment? = null
while (j < nameParts.size && matchingFragment == null) {
matchingFragment = getMatchingFragment(offset, prefixParts[i], nameParts[j])
offset += nameParts[j].length + 1
@@ -53,11 +53,11 @@ class GradleDependencyCompletionMatcher(prefix: String) : PrefixMatcher(prefix)
return result
}
- private fun getMatchingFragment(offset: Int, prefixPart: String, name: String): TextRange? {
+ private fun getMatchingFragment(offset: Int, prefixPart: String, name: String): MatchedFragment? {
val from = name.indexOf(prefixPart)
if (from == -1) {
return null
}
- return TextRange(from + offset, from + offset + prefixPart.length)
+ return MatchedFragment(from + offset, from + offset + prefixPart.length)
}
}
\ No newline at end of file
diff --git a/plugins/kotlin/gradle/gradle-java/tests.shared/BUILD.bazel b/plugins/kotlin/gradle/gradle-java/tests.shared/BUILD.bazel
index 03b6ed1f5fc0..49e36e29350b 100644
--- a/plugins/kotlin/gradle/gradle-java/tests.shared/BUILD.bazel
+++ b/plugins/kotlin/gradle/gradle-java/tests.shared/BUILD.bazel
@@ -112,6 +112,8 @@ jvm_library(
"//plugins/repository-search",
"//plugins/repository-search:repository-search_test_lib",
"//plugins/kotlin/gradle/scripting/kotlin.gradle.scripting.shared:kotlin-gradle-scripting-shared",
+ "//platform/util/text-matching",
+ "//platform/util/text-matching:text-matching_test_lib",
],
exports = ["@lib//:kotlin-gradle-plugin-idea"],
runtime_deps = [":tests.shared"]
diff --git a/plugins/kotlin/gradle/gradle-java/tests.shared/kotlin.gradle.gradle-java.tests.shared.iml b/plugins/kotlin/gradle/gradle-java/tests.shared/kotlin.gradle.gradle-java.tests.shared.iml
index fe037823e263..c8b08d028b80 100644
--- a/plugins/kotlin/gradle/gradle-java/tests.shared/kotlin.gradle.gradle-java.tests.shared.iml
+++ b/plugins/kotlin/gradle/gradle-java/tests.shared/kotlin.gradle.gradle-java.tests.shared.iml
@@ -82,5 +82,6 @@
+
\ No newline at end of file
diff --git a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/completion/GradleDependencyCompletionMatcherTest.kt b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/completion/GradleDependencyCompletionMatcherTest.kt
index db837943ea1a..ce9df14e3d1f 100644
--- a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/completion/GradleDependencyCompletionMatcherTest.kt
+++ b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/completion/GradleDependencyCompletionMatcherTest.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.codeInsight.gradle.completion
-import com.intellij.openapi.util.TextRange
+import com.intellij.util.text.matching.MatchedFragment
import org.jetbrains.plugins.gradle.completion.GradleDependencyCompletionMatcher
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.params.ParameterizedTest
@@ -63,7 +63,7 @@ class GradleDependencyCompletionMatcherTest {
}
// Apply ranges as braces to the clean name to build an annotated string
- fun annotate(name: String, ranges: List): String {
+ fun annotate(name: String, ranges: List): String {
if (ranges.isEmpty()) return name
val sorted = ranges.sortedBy { it.startOffset }
val starts = sorted.groupBy { it.startOffset }
@@ -85,8 +85,6 @@ class GradleDependencyCompletionMatcherTest {
val matcher = GradleDependencyCompletionMatcher(prefix)
val fragments = matcher.getMatchingFragments(prefix, name)
- require(fragments != null) { "Expected non-null fragments" }
-
val actualAnnotated = annotate(name, fragments)
val message = "getMatchingFragments: prefix='$prefix' expected $annotatedName but was $actualAnnotated"
assertEquals(annotatedName, actualAnnotated, message)