mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
Make things explicit: let ProgressSuspender.markSuspendable return null instead of throwing ClassCastException
GitOrigin-RevId: a463b7328e89c74f7813ae5c5138f12fe4425f9a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8cff5ce36d
commit
74c3ff9ff7
@@ -70,8 +70,17 @@ public final class ProgressSuspender implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
public static @NotNull ProgressSuspender markSuspendable(@NotNull ProgressIndicator indicator, @NotNull @NlsContexts.ProgressText String suspendedText) {
|
||||
return new ProgressSuspender((ProgressIndicatorEx)indicator, suspendedText);
|
||||
public static @NotNull ProgressSuspender markSuspendable(@NotNull ProgressIndicatorEx indicator, @NotNull @NlsContexts.ProgressText String suspendedText) {
|
||||
return new ProgressSuspender(indicator, suspendedText);
|
||||
}
|
||||
|
||||
@Nullable("When progress indicator cannot be made suspendable (e.g. EmptyProgressIndicator)")
|
||||
public static ProgressSuspender markSuspendable(@NotNull ProgressIndicator indicator, @NotNull @NlsContexts.ProgressText String suspendedText) {
|
||||
if (indicator instanceof ProgressIndicatorEx indicatorEx) {
|
||||
return markSuspendable(indicatorEx, suspendedText);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void executeNonSuspendableSection(@NotNull ProgressIndicator indicator, @NotNull Runnable runnable) {
|
||||
|
||||
@@ -23,17 +23,20 @@ class DumbServiceGuiExecutor(project: Project, queue: DumbServiceMergingTaskQueu
|
||||
|
||||
internal fun guiSuspender(): MergingQueueGuiSuspender = super.guiSuspender
|
||||
|
||||
override fun processTasksWithProgress(suspender: ProgressSuspender,
|
||||
override fun processTasksWithProgress(suspender: ProgressSuspender?,
|
||||
visibleIndicator: ProgressIndicator,
|
||||
parentActivity: StructuredIdeActivity?): SubmissionReceipt? {
|
||||
val childActivity = createChildActivity(parentActivity)
|
||||
var taskCompletedNormally = false
|
||||
return try {
|
||||
DumbServiceAppIconProgress.registerForProgress(project, visibleIndicator as ProgressIndicatorEx)
|
||||
project.service<DumbModeProgressTitle>().attachDumbModeProgress(visibleIndicator)
|
||||
super.processTasksWithProgress(suspender, visibleIndicator, childActivity)
|
||||
super.processTasksWithProgress(suspender, visibleIndicator, childActivity).also {
|
||||
taskCompletedNormally = true
|
||||
}
|
||||
}
|
||||
finally {
|
||||
logProcessFinished(childActivity, if (suspender.isClosed) IndexingFinishType.TERMINATED else IndexingFinishType.FINISHED)
|
||||
logProcessFinished(childActivity, if (taskCompletedNormally) IndexingFinishType.FINISHED else IndexingFinishType.TERMINATED)
|
||||
project.service<DumbModeProgressTitle>().removeDumbModeProgress(visibleIndicator)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ open class MergingQueueGuiExecutor<T : MergeableQueueTask<T>> protected construc
|
||||
}
|
||||
}
|
||||
|
||||
open fun processTasksWithProgress(suspender: ProgressSuspender,
|
||||
open fun processTasksWithProgress(suspender: ProgressSuspender?,
|
||||
visibleIndicator: ProgressIndicator,
|
||||
activity: StructuredIdeActivity?): SubmissionReceipt? {
|
||||
return guiSuspender.setCurrentSuspenderAndSuspendIfRequested(suspender, Supplier<SubmissionReceipt> {
|
||||
@@ -124,7 +124,7 @@ open class MergingQueueGuiExecutor<T : MergeableQueueTask<T>> protected construc
|
||||
if (task == null) return@Supplier submittedTaskCount
|
||||
val taskIndicator = task.indicator as AbstractProgressIndicatorExBase
|
||||
val relayToVisibleIndicator: ProgressIndicatorEx = RelayUiToDelegateIndicator(visibleIndicator)
|
||||
suspender.attachToProgress(taskIndicator)
|
||||
suspender?.attachToProgress(taskIndicator)
|
||||
taskIndicator.addStateDelegate(relayToVisibleIndicator)
|
||||
try {
|
||||
runSingleTask(task, activity)
|
||||
|
||||
@@ -43,7 +43,9 @@ class MergingQueueGuiSuspender {
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> setCurrentSuspenderAndSuspendIfRequested(suspender: ProgressSuspender, runnable: Supplier<T>): T {
|
||||
fun <T> setCurrentSuspenderAndSuspendIfRequested(suspender: ProgressSuspender?, runnable: Supplier<T>): T {
|
||||
if (suspender == null) return runnable.get()
|
||||
|
||||
LOG.assertTrue(myCurrentSuspender == null, "Already suspended in another thread, or recursive invocation.")
|
||||
return try {
|
||||
myCurrentSuspender = suspender
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.openapi.progress.impl.ProgressManagerImpl
|
||||
import com.intellij.openapi.progress.impl.ProgressSuspender
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.UserDataHolder
|
||||
import com.intellij.openapi.wm.ex.ProgressIndicatorEx
|
||||
import com.intellij.util.flow.throttle
|
||||
import com.jetbrains.packagesearch.intellij.plugin.PackageSearchBundle
|
||||
import com.jetbrains.packagesearch.intellij.plugin.data.LoadingContainer
|
||||
@@ -214,7 +215,7 @@ internal suspend fun showBackgroundLoadingBar(
|
||||
@Suppress("HardCodedStringLiteral")
|
||||
val channelsJob = launch {
|
||||
if (isPausable) {
|
||||
ProgressSuspender.markSuspendable(indicator, PackageSearchBundle.message("packagesearch.ui.resume"))
|
||||
ProgressSuspender.markSuspendable(indicator as ProgressIndicatorEx, PackageSearchBundle.message("packagesearch.ui.resume"))
|
||||
.isSuspendedFLow
|
||||
.collectIn(this, isSuspendedChannel)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user