Backport ActionUtil.underModalProgress to fix 191/192 compilation

Relates to #EA-143709
This commit is contained in:
Vladimir Dolzhenko
2020-02-28 12:17:13 +01:00
parent d47fc7280b
commit 846e50a0c0
4 changed files with 58 additions and 3 deletions
@@ -16,17 +16,18 @@
package org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine
import com.intellij.openapi.actionSystem.ex.ActionUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.util.Computable
import com.intellij.refactoring.BaseRefactoringProcessor
import com.intellij.ui.awt.RelativePoint
import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively
import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint
import org.jetbrains.kotlin.idea.util.ProgressIndicatorUtils
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import javax.swing.event.HyperlinkEvent
@@ -59,9 +60,9 @@ class ExtractionEngine(
val project = extractionData.project
val adjustExtractionData = helper.adjustExtractionData(extractionData)
val analysisResult = ActionUtil.underModalProgress(project, "Analyze extraction data...") {
val analysisResult = ProgressIndicatorUtils.underModalProgress(project, "Analyze extraction data...", Computable {
adjustExtractionData.performAnalysis()
}
})
if (ApplicationManager.getApplication()!!.isUnitTestMode && analysisResult.status != AnalysisResult.Status.SUCCESS) {
throw BaseRefactoringProcessor.ConflictsInTestsException(analysisResult.messages.map { it.renderMessage() })
@@ -8,7 +8,10 @@ package org.jetbrains.kotlin.idea.util
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.util.ExceptionUtil
import org.jetbrains.annotations.Nls
import java.util.concurrent.CancellationException
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
@@ -18,6 +21,13 @@ import java.util.concurrent.TimeoutException
* Copied from [com.intellij.openapi.progress.util.ProgressIndicatorUtils]
*/
object ProgressIndicatorUtils {
@Throws(ProcessCanceledException::class)
fun <T> underModalProgress(
project: Project,
@Nls progressTitle: String,
computable: Computable<T>
): T = com.intellij.openapi.actionSystem.ex.ActionUtil.underModalProgress(project, progressTitle, computable)
@JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) {
val indicator =
@@ -8,6 +8,12 @@ package org.jetbrains.kotlin.idea.util
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.openapi.util.ThrowableComputable
import org.jetbrains.annotations.Nls
import org.jetbrains.kotlin.idea.util.application.runReadAction
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
@@ -15,6 +21,20 @@ import java.util.concurrent.TimeoutException
object ProgressIndicatorUtils {
private val LOG = Logger.getInstance(ProgressIndicatorUtils::class.java)
fun <T> underModalProgress(
project: Project,
@Nls progressTitle: String,
computable: Computable<T>
): T {
val dumbService = DumbService.getInstance(project)
val useAlternativeResolve = dumbService.isAlternativeResolveEnabled
val inReadAction =
ThrowableComputable<T, RuntimeException> { runReadAction { return@runReadAction computable.compute() } }
val process =
if (useAlternativeResolve) ThrowableComputable { dumbService.computeWithAlternativeResolveEnabled(inReadAction) } else inReadAction
return ProgressManager.getInstance().runProcessWithProgressSynchronously(process, progressTitle, true, project)
}
@JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) {
while (true) {
@@ -5,9 +5,33 @@
package org.jetbrains.kotlin.idea.util
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.openapi.util.ThrowableComputable
import org.jetbrains.annotations.Nls
import org.jetbrains.kotlin.idea.util.application.runReadAction
import java.util.concurrent.Future
object ProgressIndicatorUtils {
fun <T> underModalProgress(
project: Project,
@Nls progressTitle: String,
computable: Computable<T>
): T {
val dumbService = DumbService.getInstance(project)
val useAlternativeResolve = dumbService.isAlternativeResolveEnabled
val inReadAction =
ThrowableComputable<T, RuntimeException> { runReadAction { return@runReadAction computable.compute() } }
val prioritizedRunnable =
ThrowableComputable<T, RuntimeException> { ProgressManager.getInstance().computePrioritized(inReadAction) }
val process =
if (useAlternativeResolve) ThrowableComputable { dumbService.computeWithAlternativeResolveEnabled(prioritizedRunnable) } else prioritizedRunnable
return ProgressManager.getInstance().runProcessWithProgressSynchronously(process, progressTitle, true, project)
}
@JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) =
com.intellij.openapi.progress.util.BackgroundTaskUtil.awaitWithCheckCanceled(future)