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 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.application.ApplicationManager
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.popup.Balloon import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.ui.popup.JBPopupFactory import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.util.Computable
import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.BaseRefactoringProcessor
import com.intellij.ui.awt.RelativePoint import com.intellij.ui.awt.RelativePoint
import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively
import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint
import org.jetbrains.kotlin.idea.util.ProgressIndicatorUtils
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import javax.swing.event.HyperlinkEvent import javax.swing.event.HyperlinkEvent
@@ -59,9 +60,9 @@ class ExtractionEngine(
val project = extractionData.project val project = extractionData.project
val adjustExtractionData = helper.adjustExtractionData(extractionData) val adjustExtractionData = helper.adjustExtractionData(extractionData)
val analysisResult = ActionUtil.underModalProgress(project, "Analyze extraction data...") { val analysisResult = ProgressIndicatorUtils.underModalProgress(project, "Analyze extraction data...", Computable {
adjustExtractionData.performAnalysis() adjustExtractionData.performAnalysis()
} })
if (ApplicationManager.getApplication()!!.isUnitTestMode && analysisResult.status != AnalysisResult.Status.SUCCESS) { if (ApplicationManager.getApplication()!!.isUnitTestMode && analysisResult.status != AnalysisResult.Status.SUCCESS) {
throw BaseRefactoringProcessor.ConflictsInTestsException(analysisResult.messages.map { it.renderMessage() }) 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.ProcessCanceledException
import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.util.ExceptionUtil import com.intellij.util.ExceptionUtil
import org.jetbrains.annotations.Nls
import java.util.concurrent.CancellationException import java.util.concurrent.CancellationException
import java.util.concurrent.Future import java.util.concurrent.Future
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@@ -18,6 +21,13 @@ import java.util.concurrent.TimeoutException
* Copied from [com.intellij.openapi.progress.util.ProgressIndicatorUtils] * Copied from [com.intellij.openapi.progress.util.ProgressIndicatorUtils]
*/ */
object 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 @JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) { fun <T> awaitWithCheckCanceled(future: Future<T>) {
val indicator = val indicator =
@@ -8,6 +8,12 @@ package org.jetbrains.kotlin.idea.util
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.progress.ProgressManager 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.Future
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException import java.util.concurrent.TimeoutException
@@ -15,6 +21,20 @@ import java.util.concurrent.TimeoutException
object ProgressIndicatorUtils { object ProgressIndicatorUtils {
private val LOG = Logger.getInstance(ProgressIndicatorUtils::class.java) 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 @JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) { fun <T> awaitWithCheckCanceled(future: Future<T>) {
while (true) { while (true) {
@@ -5,9 +5,33 @@
package org.jetbrains.kotlin.idea.util 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 import java.util.concurrent.Future
object ProgressIndicatorUtils { 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 @JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) = fun <T> awaitWithCheckCanceled(future: Future<T>) =
com.intellij.openapi.progress.util.BackgroundTaskUtil.awaitWithCheckCanceled(future) com.intellij.openapi.progress.util.BackgroundTaskUtil.awaitWithCheckCanceled(future)