From 5063a4ce3de59185751fab4bf0233f76af4c15f3 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 18 Jun 2018 16:35:21 +0200 Subject: [PATCH] JavaElementFinder: revert to using ContainerUtil.quicksort Fix comparator contract violated exception Scopes inherited from LibraryScopeBase violate the comparator contract --- .../jetbrains/kotlin/asJava/finder/JavaElementFinder.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt index 6b53fce9661..4c18266db20 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt @@ -24,6 +24,7 @@ import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiUtilCore import com.intellij.util.SmartList +import com.intellij.util.containers.ContainerUtil import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.classes.FakeLightClassForFileOfPackage import org.jetbrains.kotlin.asJava.toLightClass @@ -185,9 +186,13 @@ class JavaElementFinder( } private fun List.sortByClasspathPreferringNonFakeFiles(searchScope: GlobalSearchScope): List { - return this.sortedWith(byClasspathComparator(searchScope)).sortedBy { + val result = this.toMutableList() + // NOTE: this comparator might violate the contract depending on the scope passed + ContainerUtil.quickSort(result, byClasspathComparator(searchScope)) + result.sortBy { it is FakeLightClassForFileOfPackage } + return result } } }