From 1a47d6754d3d50abe94d0aa67b7ee20d85e1ca86 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 27 Aug 2015 19:02:32 +0300 Subject: [PATCH] Allow to search marker classes in dumb mode (EA-67309) --- .../KotlinRuntimeLibraryCoreUtil.java | 22 ++++++++++++++----- .../KotlinWithLibraryConfigurator.java | 19 +++++----------- .../ConfigureKotlinNotification.java | 3 ++- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryCoreUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryCoreUtil.java index f4e7472e19e..bd771261c8f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryCoreUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryCoreUtil.java @@ -18,8 +18,10 @@ package org.jetbrains.kotlin.idea.versions; import com.google.common.collect.ImmutableList; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Ref; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; @@ -39,13 +41,21 @@ public class KotlinRuntimeLibraryCoreUtil { return ApplicationManager.getApplication().runReadAction(new Computable() { @Override public PsiClass compute() { - for (String className : CANDIDATE_CLASSES) { - PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(className, scope); - if (psiClass != null) { - return psiClass; + final Ref result = new Ref(); + DumbService.getInstance(project).withAlternativeResolveEnabled(new Runnable() { + @Override + public void run() { + for (String className : CANDIDATE_CLASSES) { + PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(className, scope); + if (psiClass != null) { + result.set(psiClass); + return; + } + } } - } - return null; + }); + + return result.get(); } }); } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.java index 66314f651a7..9c65ead4fb8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.java @@ -77,7 +77,7 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf @Override public void configure(@NotNull Project project) { - final String defaultPathToJar = getDefaultPathToJarFile(project); + String defaultPathToJar = getDefaultPathToJarFile(project); boolean showPathToJarPanel = needToChooseJarPath(project); List nonConfiguredModules = @@ -103,19 +103,12 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf copyLibraryIntoPath = dialog.getCopyIntoPath(); } - final List finalModulesToConfigure = modulesToConfigure; - final String finalCopyLibraryIntoPath = copyLibraryIntoPath; + List finalModulesToConfigure = modulesToConfigure; + String finalCopyLibraryIntoPath = copyLibraryIntoPath; - // The first root modification enters dumb mode, and we need to be able to perform isKotlinLibrary() checks - // after that, and those checks use findClass(). Therefore, we need to enable alternative resolve here. - DumbService.getInstance(project).withAlternativeResolveEnabled(new Runnable() { - @Override - public void run() { - for (Module module : finalModulesToConfigure) { - configureModuleWithLibrary(module, defaultPathToJar, finalCopyLibraryIntoPath); - } - } - }); + for (Module module : finalModulesToConfigure) { + configureModuleWithLibrary(module, defaultPathToJar, finalCopyLibraryIntoPath); + } } protected void configureModuleWithLibrary( diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.java b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.java index 66d56f1b47f..10cba2f8e9e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.java @@ -50,8 +50,9 @@ public class ConfigureKotlinNotification extends Notification { if (configurator == null) { throw new AssertionError("Missed action: " + event.getDescription()); } - configurator.configure(project); notification.expire(); + + configurator.configure(project); } } });