diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt index 003f970d40c..7ad10eed6cb 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.service.IdeaServices import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.PomWizardStepComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.asHtml import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep.FirstWizardStepComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.nio.file.Paths @@ -211,16 +212,11 @@ class ModuleNewWizardFirstStep(wizard: IdeWizard) : WizardStep(wizard, Generatio component.onInit() } - private fun runPreparePhase() = ProgressManager.getInstance().runProcessWithProgressSynchronously( - { - wizard.apply(emptyList(), setOf(GenerationPhase.PREPARE)) { task -> - ProgressManager.getInstance().progressIndicator.text = task.title ?: "" - } - }, - "", - true, - null - ) + private fun runPreparePhase() = runWithProgressBar(title = "") { + wizard.apply(emptyList(), setOf(GenerationPhase.PREPARE)) { task -> + ProgressManager.getInstance().progressIndicator.text = task.title ?: "" + } + } } class ModuleNewWizardSecondStep( diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt index 670f3e65d75..0d85bccd198 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.service import org.jetbrains.kotlin.config.KotlinCompilerVersion -import org.jetbrains.kotlin.idea.KotlinPluginUtil import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult import org.jetbrains.kotlin.tools.projectWizard.core.asNullable @@ -15,6 +14,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.safe import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import java.io.BufferedReader import java.io.InputStreamReader import java.net.URL @@ -23,17 +23,20 @@ import java.util.stream.Collectors class IdeaKotlinVersionProviderService : KotlinVersionProviderService, IdeaWizardService { override fun getKotlinVersion(): Version = KotlinCompilerVersion.getVersion()?.let { Version.fromString(it) } - ?: VersionsDownloader.getLatestEapOrStableKotlinVersion() + ?: VersionsDownloader.downloadLatestEapOrStableKotlinVersion() ?: KotlinVersionProviderServiceImpl.DEFAULT } private object VersionsDownloader { - fun getLatestEapOrStableKotlinVersion(): Version? { + fun downloadLatestEapOrStableKotlinVersion(): Version? = runWithProgressBar("Downloading Kotlin version") { val latestEap = EapVersionDownloader.getLatestEapVersion() val latestStable = getLatestStableVersion() - if (latestEap == null) return latestStable - if (latestStable == null) return latestEap - return if (latestEap > latestStable) latestEap else latestStable + when { + latestEap == null -> latestStable + latestStable == null -> latestEap + latestEap > latestStable -> latestEap + else -> latestStable + } } private fun getLatestStableVersion() = safe { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt index aac91b424c7..633c7ef81e2 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt @@ -6,10 +6,11 @@ import com.intellij.ide.plugins.newui.TagComponent import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.ActionPlaces import com.intellij.openapi.actionSystem.DefaultActionGroup +import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.util.ThrowableComputable import com.intellij.ui.* import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBTextField -import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.tools.projectWizard.core.Failure @@ -175,6 +176,14 @@ class TemplateTagUIComponent(tag: TemplateTag) : TagComponent(tag.text) { } } +fun runWithProgressBar(title: String, action: () -> T): T = + ProgressManager.getInstance().runProcessWithProgressSynchronously( + ThrowableComputable { action() }, + title, + true, + null + ) + object UiConstants { const val GAP_BORDER_SIZE = 5 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/phases/GenerationPhase.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/phases/GenerationPhase.kt index 6b8f55ee3a1..064265b5343 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/phases/GenerationPhase.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/phases/GenerationPhase.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.phases enum class GenerationPhase { - PREPARE, INIT_TEMPLATE, FIRST_STEP, SECOND_STEP, PROJECT_GENERATION, PROJECT_IMPORT + PREPARE, INIT_TEMPLATE, FIRST_STEP, SECOND_STEP, PREPARE_GENERATION, PROJECT_GENERATION, PROJECT_IMPORT ; diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index ee11f5e6c1e..1be2bd2c65e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -23,7 +23,7 @@ import java.nio.file.Path class KotlinPlugin(context: Context) : Plugin(context) { val version by property(KotlinVersionProviderServiceImpl.DEFAULT) - val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE) { + val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE_GENERATION) { title = "Downloading list of Kotlin versions" withAction {