diff --git a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java index 118aca3ce6ab..3682b874d72a 100644 --- a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java +++ b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java @@ -31,11 +31,15 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.*; +import com.intellij.psi.util.ClassUtil; +import com.intellij.psi.util.PsiClassUtil; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiUtilCore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -170,7 +174,7 @@ public class JavaExecutionUtil { @Nullable public static PsiClass findMainClass(final Project project, final String mainClassName, final GlobalSearchScope scope) { - if (project.isDefault() || DumbService.isDumb(project)) return null; + if (project.isDefault() || (DumbService.isDumb(project) && !Registry.is("dumb.aware.run.configurations"))) return null; final PsiManager psiManager = PsiManager.getInstance(project); final String shortName = StringUtil.getShortName(mainClassName); final String packageName = StringUtil.getPackageName(mainClassName); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java index fa6da3b67cc8..c3d520cade0f 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -27,6 +27,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.DumbService; +import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootAdapter; import com.intellij.openapi.roots.ModuleRootEvent; @@ -1096,12 +1097,19 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo } else { try { + DumbService.getInstance(myProject).setAlternativeResolveEnabled(true); settings.checkSettings(); icon = ProgramRunnerUtil.getConfigurationIcon(settings, false); } + catch (IndexNotReadyException e) { + icon = ProgramRunnerUtil.getConfigurationIcon(settings, !Registry.is("dumb.aware.run.configurations")); + } catch (RuntimeConfigurationException ignored) { icon = ProgramRunnerUtil.getConfigurationIcon(settings, true); } + finally { + DumbService.getInstance(myProject).setAlternativeResolveEnabled(false); + } } myIconCalcTime.put(uniqueID, System.currentTimeMillis() - startTime); return icon;