in src/main/kotlin/org/arend/search/proof/ProofSearchUI.kt [483:528]
fun runProofSearch(alreadyProcessed: Int, results: Sequence<ProofSearchEntry?>?) {
EDT.assertIsEdt()
cleanupCurrentResults(results == null)
val settings = ProofSearchUISettings(project)
runBackgroundableTask(ArendBundle.message("arend.proof.search.title"), myProject) { progressIndicator ->
runWithLoadingIcon {
this.progressIndicator = progressIndicator
val elements = results ?: generateProofSearchResults(project, searchPattern)
var counter = PROOF_SEARCH_RESULT_LIMIT
for (element in elements) {
if (progressIndicator.isCanceled) {
return@runWithLoadingIcon "Search cancelled"
}
if (element == null) {
continue
}
invokeLater {
if (progressIndicator.isCanceled) {
return@invokeLater
}
model.add(DefElement(element))
if (results != null && counter == PROOF_SEARCH_RESULT_LIMIT && myResultsList.selectedIndex == -1) {
myResultsList.selectedIndex = myResultsList.itemsCount - 1
}
}
--counter
if (settings.shouldLimitSearch() && counter == 0) {
invokeLater {
if (progressIndicator.isCanceled) {
return@invokeLater
}
model.add(
MoreElement(
alreadyProcessed + PROOF_SEARCH_RESULT_LIMIT,
elements.drop(PROOF_SEARCH_RESULT_LIMIT)
)
)
}
return@runWithLoadingIcon "Showing first ${alreadyProcessed + PROOF_SEARCH_RESULT_LIMIT} results"
}
}
"Search completed with ${model.items.size} results"
}
}
}