From 0262e9de2fd03e54ae1779f7650c70a860eff79d Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Thu, 9 Apr 2020 10:12:01 +0000 Subject: [PATCH] Look up modules under modal progress in ChooseModulePanel Relates to #KT-30541 #KT-38081 Fixed --- .../messages/KotlinJvmBundle.properties | 1 + .../ConfigureKotlinInProjectUtils.kt | 2 ++ .../idea/framework/ui/ChooseModulePanel.java | 20 ++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/idea/idea-jvm/resources/messages/KotlinJvmBundle.properties b/idea/idea-jvm/resources/messages/KotlinJvmBundle.properties index 421d970ee7f..49f84bddfb6 100644 --- a/idea/idea-jvm/resources/messages/KotlinJvmBundle.properties +++ b/idea/idea-jvm/resources/messages/KotlinJvmBundle.properties @@ -75,6 +75,7 @@ there.aren.t.configurators.available=There aren't configurators available all.modules.with.kotlin.files.are.configured=All modules with Kotlin files are configured lookup.project.configurators.progress.text=Looking up for project configurators ... lookup.modules.configurations.progress.text=Looking up for modules configurations ... +lookup.kotlin.modules.configurations.progress.text=Looking up for kotlin modules configuration ... added.0.requirement.to.module.info.in.1=Added {0} requirement to module-info in {1} updated.javascript.libraries.in.module.0=Updated JavaScript libraries in module {0} added.0.to.library.configuration=Added {0} to library configuration diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt index db21c1e03a1..16ae067193d 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt @@ -23,6 +23,7 @@ import com.intellij.psi.PsiJavaModule import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.FileTypeIndex import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.annotations.CalledInBackground import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinJvmBundle @@ -130,6 +131,7 @@ fun isModuleConfigured(moduleSourceRootGroup: ModuleSourceRootGroup): Boolean { * * DO NOT CALL THIS ON AWT THREAD */ +@CalledInBackground fun getModulesWithKotlinFiles(project: Project): Collection { if (!isUnitTestMode() && ApplicationManager.getApplication().isDispatchThread) { LOG.error("getModulesWithKotlinFiles could be a heavy operation and should not be call on AWT thread") diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/ChooseModulePanel.java b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/ChooseModulePanel.java index e6b529a1f7f..d22ca03891e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/ChooseModulePanel.java +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/ChooseModulePanel.java @@ -21,10 +21,10 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.HyperlinkLabel; import com.intellij.util.Function; -import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.KotlinJvmBundle; import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinInProjectUtilsKt; @@ -39,6 +39,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import static org.jetbrains.kotlin.idea.util.ProgressIndicatorUtils.underModalProgress; + public class ChooseModulePanel { private JPanel contentPane; private JRadioButton allModulesWithKtRadioButton; @@ -53,8 +55,20 @@ public class ChooseModulePanel { public ChooseModulePanel(@NotNull Project project, @NotNull KotlinProjectConfigurator configurator, Collection excludeModules) { this.project = project; - this.modules = ConfigureKotlinInProjectUtilsKt.getCanBeConfiguredModules(project, configurator); - this.modulesWithKtFiles = ConfigureKotlinInProjectUtilsKt.getCanBeConfiguredModulesWithKotlinFiles(project, configurator); + Pair, List> modulesPair = + underModalProgress(project, + KotlinJvmBundle + .message("lookup.kotlin.modules.configurations.progress.text"), + () -> { + List modules = ConfigureKotlinInProjectUtilsKt + .getCanBeConfiguredModules(project, configurator); + List modulesWithKtFiles = + ConfigureKotlinInProjectUtilsKt + .getCanBeConfiguredModulesWithKotlinFiles(project, configurator); + return Pair.create(modules, modulesWithKtFiles); + }); + this.modules = modulesPair.first; + this.modulesWithKtFiles = modulesPair.second; DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel();