diff --git a/.idea/dictionaries/Nikolay_Krasko.xml b/.idea/dictionaries/Nikolay_Krasko.xml
index 3ad9cc2cc0a..06464d5b4ec 100644
--- a/.idea/dictionaries/Nikolay_Krasko.xml
+++ b/.idea/dictionaries/Nikolay_Krasko.xml
@@ -19,6 +19,7 @@
preloader
preloading
preprocess
+ proximities
redeclarations
smap
subclassed
diff --git a/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinTestFinder.kt b/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinTestFinder.kt
index f738020bf21..e38ed65eefa 100644
--- a/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinTestFinder.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinTestFinder.kt
@@ -26,9 +26,8 @@ import com.intellij.psi.search.PsiShortNamesCache
import com.intellij.testIntegration.JavaTestFinder
import com.intellij.testIntegration.TestFinderHelper
import com.intellij.util.CommonProcessors
-import com.intellij.util.containers.HashSet
-import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
+import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
import org.jetbrains.kotlin.asJava.findFacadeClass
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
@@ -71,8 +70,7 @@ class KotlinTestFinder : JavaTestFinder() {
if (eachClass is KtLightClassForFacade) {
eachClass.files.mapTo(classesWithWeights) { Pair.create(it, candidateNameWithWeight.second) }
- }
- else if (eachClass.isPhysical || eachClass is KtLightClassForSourceDeclaration) {
+ } else if (eachClass.isPhysical || eachClass is KtLightClassForSourceDeclaration) {
classesWithWeights.add(Pair.create(eachClass, candidateNameWithWeight.second))
}
}
@@ -94,16 +92,22 @@ class KotlinTestFinder : JavaTestFinder() {
val frameworks = TestFrameworks.getInstance()
val cache = PsiShortNamesCache.getInstance(klass.project)
- val names = HashSet()
- cache.getAllClassNames(names)
-
- for (candidateName in names) {
- if (!pattern.matcher(candidateName).matches()) continue
+ cache.processAllClassNames { candidateName ->
+ if (!pattern.matcher(candidateName).matches()) return@processAllClassNames true
for (candidateClass in cache.getClassesByName(candidateName, scope)) {
- if (!(frameworks.isTestClass(candidateClass) || frameworks.isPotentialTestClass(candidateClass))) continue
- if (!candidateClass.isPhysical && candidateClass !is KtLightClassForSourceDeclaration) continue
- processor.process(Pair.create(candidateClass, TestFinderHelper.calcTestNameProximity(klassName, candidateName)))
+ if (!(frameworks.isTestClass(candidateClass) || frameworks.isPotentialTestClass(candidateClass))) {
+ return@processAllClassNames true
+ }
+ if (!candidateClass.isPhysical && candidateClass !is KtLightClassForSourceDeclaration) {
+ return@processAllClassNames true
+ }
+
+ if (!processor.process(Pair.create(candidateClass, TestFinderHelper.calcTestNameProximity(klassName, candidateName)))) {
+ return@processAllClassNames false
+ }
}
+
+ return@processAllClassNames true
}
return TestFinderHelper.getSortedElements(classesWithProximities, true)