From 581f7353f484bb7c87a316c7d90ec0494afce89e Mon Sep 17 00:00:00 2001 From: "Nikolay.Rykunov" Date: Fri, 26 Apr 2019 17:39:52 +0300 Subject: [PATCH] Allow to skip prediction calculation IDEA-211599 GitOrigin-RevId: d35bae9481714df5f3af13b79bf326b1d55cba75 --- .../handle/ChangeReminderCheckinHandler.kt | 23 ++++++++++--------- .../predict/PredictionProvider.kt | 2 ++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/commit/handle/ChangeReminderCheckinHandler.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/commit/handle/ChangeReminderCheckinHandler.kt index 4d1433280897..b75cbb485de7 100644 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/commit/handle/ChangeReminderCheckinHandler.kt +++ b/plugins/changeReminder/src/com/jetbrains/changeReminder/commit/handle/ChangeReminderCheckinHandler.kt @@ -4,9 +4,10 @@ package com.jetbrains.changeReminder.commit.handle import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException +import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.progress.Task import com.intellij.openapi.project.Project -import com.intellij.openapi.util.ThrowableComputable import com.intellij.openapi.vcs.CheckinProjectPanel import com.intellij.openapi.vcs.FilePath import com.intellij.openapi.vcs.changes.ChangeListManager @@ -37,6 +38,7 @@ class ChangeReminderCheckinHandler(private val panel: CheckinProjectPanel, private val dataGetter: IndexDataGetter) : CheckinHandler() { companion object { private val LOG = Logger.getInstance(ChangeReminderCheckinHandler::class.java) + private const val PROGRESS_TITLE = "Calculating whether something should be added to this commit" } private val project: Project = panel.project @@ -102,16 +104,15 @@ class ChangeReminderCheckinHandler(private val panel: CheckinProjectPanel, } val commitOptions = CommitOptions(panel.author(), panel.isAmend()) + val task = + object : Task.WithResult, Exception>(project, PROGRESS_TITLE, true) { + override fun compute(indicator: ProgressIndicator): List = getPredictedFiles(rootFiles, commitOptions) + }.apply { + cancelText = "Skip" + } + val (executionTime, predictedFiles) = measureSupplierTimeMillis { - ProgressManager.getInstance() - .runProcessWithProgressSynchronously( - ThrowableComputable, Exception> { - getPredictedFiles(rootFiles, commitOptions) - }, - "Calculating whether something should be added to this commit", - true, - project - ) + ProgressManager.getInstance().run(task) } logEvent(project, ChangeReminderEvent.PREDICTION_CALCULATED, ChangeReminderData.EXECUTION_TIME, executionTime) @@ -138,7 +139,7 @@ class ChangeReminderCheckinHandler(private val panel: CheckinProjectPanel, } } catch (e: ProcessCanceledException) { - throw e + return ReturnResult.COMMIT } catch (e: Exception) { LOG.error("Unexpected problem with ChangeReminder prediction", e) diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionProvider.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionProvider.kt index 85716e72e195..37e0dae07c6e 100644 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionProvider.kt +++ b/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionProvider.kt @@ -1,6 +1,7 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.jetbrains.changeReminder.predict +import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vcs.FilePath import com.jetbrains.changeReminder.prediction.model.PredictionModel @@ -119,6 +120,7 @@ class PredictionProvider(private val minProb: Double = 0.55) { getRelatedFiles(commit, history) .asSequence() .map { (candidateFile, candidateFileHistory) -> + ProgressManager.checkCanceled() val fileScore = PredictionModel.makePrediction(collectFileFactors(commit, candidateFile, candidateFileHistory)) candidateFile to fileScore }