JavaElementFinder: revert to using ContainerUtil.quicksort

Fix comparator contract violated exception
Scopes inherited from LibraryScopeBase violate the comparator contract
This commit is contained in:
Pavel V. Talanov
2018-06-18 16:35:21 +02:00
parent e689733f69
commit 5063a4ce3d
@@ -24,6 +24,7 @@ import com.intellij.psi.*
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.PsiUtilCore import com.intellij.psi.util.PsiUtilCore
import com.intellij.util.SmartList import com.intellij.util.SmartList
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.classes.FakeLightClassForFileOfPackage import org.jetbrains.kotlin.asJava.classes.FakeLightClassForFileOfPackage
import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightClass
@@ -185,9 +186,13 @@ class JavaElementFinder(
} }
private fun List<PsiClass>.sortByClasspathPreferringNonFakeFiles(searchScope: GlobalSearchScope): List<PsiClass> { private fun List<PsiClass>.sortByClasspathPreferringNonFakeFiles(searchScope: GlobalSearchScope): List<PsiClass> {
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 it is FakeLightClassForFileOfPackage
} }
return result
} }
} }
} }