diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java index cd1d744eb507..a4393c8dec05 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java @@ -17,9 +17,10 @@ package org.jetbrains.plugins.gradle.config; import com.intellij.compiler.options.CompileStepBeforeRun; import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; -import com.intellij.execution.*; +import com.intellij.execution.CantRunException; +import com.intellij.execution.Location; +import com.intellij.execution.RunManagerEx; import com.intellij.execution.configurations.JavaParameters; -import com.intellij.execution.configurations.RunProfile; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.externalSystem.psi.search.ExternalModuleBuildGlobalSearchScope; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; @@ -172,12 +173,10 @@ public class GradleScriptType extends GroovyRunnableScriptType { } @Override - public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) throws ExecutionException { - if (project != null && profile instanceof GroovyScriptRunConfiguration) { - GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration)profile; - String parameters = configuration.getProgramParameters(); - if (parameters != null) { - // TODO den implement + public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) { + String parameters = configuration.getProgramParameters(); + if (parameters != null) { + // TODO den implement // GradleTasksList list = GradleUtil.getToolWindowElement(GradleTasksList.class, project, ExternalSystemDataKeys.RECENT_TASKS_LIST); // if (list != null) { // ExternalSystemTaskDescriptor descriptor = new ExternalSystemTaskDescriptor(parameters, null); @@ -185,7 +184,6 @@ public class GradleScriptType extends GroovyRunnableScriptType { // list.setFirst(descriptor); // GradleLocalSettings.getInstance(project).setRecentTasks(list.getModel().getTasks()); // } - } } final GradleInstallationManager libraryManager = ServiceManager.getService(GradleInstallationManager.class); // TODO den implement @@ -203,7 +201,6 @@ public class GradleScriptType extends GroovyRunnableScriptType { // return false; // } // } - return true; } @Override diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GroovyRunnerPsiUtil.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GroovyRunnerPsiUtil.java index 07b002510a2d..967a3f02c12e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GroovyRunnerPsiUtil.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GroovyRunnerPsiUtil.java @@ -15,6 +15,7 @@ */ package org.jetbrains.plugins.groovy.lang.psi.util; +import com.intellij.openapi.project.DumbService; import com.intellij.psi.*; import com.intellij.psi.util.PsiMethodUtil; import com.intellij.psi.util.PsiTreeUtil; @@ -27,6 +28,7 @@ public class GroovyRunnerPsiUtil { @Nullable public static PsiClass getRunningClass(@Nullable PsiElement element) { if (element == null) return null; + if (DumbService.isDumb(element.getProject())) return null; final PsiFile file = element.getContainingFile(); if (!(file instanceof GroovyFile)) return null; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantRunner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantRunner.java index d75d2e38eecd..e15cfcf51834 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantRunner.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantRunner.java @@ -16,19 +16,16 @@ package org.jetbrains.plugins.groovy.gant; import com.intellij.execution.CantRunException; -import com.intellij.execution.Executor; import com.intellij.execution.configurations.JavaParameters; -import com.intellij.execution.configurations.RunProfile; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.libraries.LibraryUtil; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; -import icons.JetgroovyIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; @@ -55,20 +52,13 @@ public class GantRunner extends GroovyScriptRunner { } @Override - public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) { - if (GantUtils.getSDKInstallPath(module, project).isEmpty()) { - int result = Messages - .showOkCancelDialog("Gant is not configured. Do you want to configure it?", "Configure Gant SDK", - JetgroovyIcons.Groovy.Gant_16x16); - if (result == Messages.OK) { - ShowSettingsUtil.getInstance().editConfigurable(project, new GantConfigurable(project)); - } - if (GantUtils.getSDKInstallPath(module, project).isEmpty()) { - return false; - } + public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) throws RuntimeConfigurationException { + Project project = configuration.getProject(); + if (GantUtils.getSDKInstallPath(configuration.getModule(), project).isEmpty()) { + RuntimeConfigurationException e = new RuntimeConfigurationException("Gant is not configured"); + e.setQuickFix(() -> ShowSettingsUtil.getInstance().editConfigurable(project, new GantConfigurable(project))); + throw e; } - - return true; } private static String getGantConfPath(final String gantHome) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java index 5c8421fec2f1..8c573979dd7c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java @@ -17,14 +17,10 @@ package org.jetbrains.plugins.groovy.runner; import com.intellij.execution.CantRunException; -import com.intellij.execution.ExecutionException; -import com.intellij.execution.Executor; import com.intellij.execution.configurations.JavaParameters; -import com.intellij.execution.configurations.RunProfile; -import com.intellij.execution.runners.ExecutionUtil; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.util.ScriptFileUtil; import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.configuration.ClasspathEditor; import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.util.Comparing; @@ -52,17 +48,17 @@ public class DefaultGroovyScriptRunner extends GroovyScriptRunner { } @Override - public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) throws ExecutionException { + public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) throws RuntimeConfigurationException { + Module module = configuration.getModule(); if (module == null) { - throw new ExecutionException("Module is not specified"); + throw new RuntimeConfigurationException("Module is not specified"); } if (LibrariesUtil.getGroovyHomePath(module) == null) { - ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), profile, new ExecutionException("Groovy is not configured")); - ModulesConfigurator.showDialog(module.getProject(), module.getName(), ClasspathEditor.NAME); - return false; + RuntimeConfigurationException e = new RuntimeConfigurationException("Groovy is not configured for module '" + module.getName() + "'"); + e.setQuickFix(() -> ModulesConfigurator.showDialog(module.getProject(), module.getName(), ClasspathEditor.NAME)); + throw e; } - return true; } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java index 66991c935474..ee82e7356c51 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java @@ -15,7 +15,10 @@ */ package org.jetbrains.plugins.groovy.runner; -import com.intellij.execution.*; +import com.intellij.execution.CommonJavaRunConfigurationParameters; +import com.intellij.execution.ExecutionException; +import com.intellij.execution.Executor; +import com.intellij.execution.ExternalizablePath; import com.intellij.execution.configurations.*; import com.intellij.execution.process.OSProcessHandler; import com.intellij.execution.process.ProcessAdapter; @@ -24,7 +27,6 @@ import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.util.ProgramParametersUtil; import com.intellij.execution.util.ScriptFileUtil; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.SettingsEditor; @@ -71,7 +73,6 @@ import java.util.Map; public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration implements CommonJavaRunConfigurationParameters, RefactoringListenerProvider { - private static final Logger LOG = Logger.getInstance(GroovyScriptRunConfiguration.class); private String vmParams; private String workDir; private boolean isDebugEnabled; @@ -94,7 +95,7 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration getValidModules() { Module[] modules = ModuleManager.getInstance(getProject()).getModules(); - final GroovyScriptRunner scriptRunner = findConfiguration(); + final GroovyScriptRunner scriptRunner = getScriptRunner(); if (scriptRunner == null) { return Arrays.asList(modules); } @@ -110,21 +111,20 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration getConfigurationEditor() { @@ -295,7 +273,19 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration