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.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<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
}
return result
}
}
}