From 7ddad9681ba182cc9cb15be78d819abfafd85e8a Mon Sep 17 00:00:00 2001 From: Vassiliy Kudryashov Date: Thu, 13 Dec 2012 15:42:59 +0400 Subject: [PATCH] IDEA-61945 Run and Debug commands should ignore compile errors not related to the main being run. --- .../options/CompileStepBeforeRun.java | 43 ++----- .../CompileStepBeforeRunNoErrorCheck.java | 105 ++++++++++++++++++ .../execution/BeforeRunTaskProvider.java | 7 -- .../com/intellij/execution/RunManagerEx.java | 17 +++ .../execution/impl/BeforeRunStepsPanel.java | 3 +- .../gradle/config/GradleScriptType.java | 9 +- .../plugins/groovy/gant/GantScriptType.java | 7 +- .../griffon/GriffonRunConfigurationType.java | 3 +- .../plugins/groovy/mvc/MvcFramework.java | 6 +- .../execution/MavenRunConfigurationType.java | 3 +- resources/src/idea/RichPlatformPlugin.xml | 3 +- 11 files changed, 143 insertions(+), 63 deletions(-) create mode 100644 java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRunNoErrorCheck.java diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java index ddd092fd3479..dd5baa6fa70e 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -35,7 +35,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.util.concurrency.Semaphore; -import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -71,9 +70,6 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider { - boolean myNoErrorCheck; - private MakeBeforeRunTask() { super(ID); setEnabled(true); } - - @Override - public void writeExternal(Element element) { - super.writeExternal(element); - if (myNoErrorCheck) { - element.setAttribute("no.error.check", String.valueOf(myNoErrorCheck)); - } - } - - @Override - public void readExternal(Element element) { - super.readExternal(element); - myNoErrorCheck = Boolean.parseBoolean(element.getAttributeValue("no.error.check", "false")); - } } } diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRunNoErrorCheck.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRunNoErrorCheck.java new file mode 100644 index 000000000000..c2b41f075baf --- /dev/null +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRunNoErrorCheck.java @@ -0,0 +1,105 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.compiler.options; + +import com.intellij.execution.BeforeRunTask; +import com.intellij.execution.BeforeRunTaskProvider; +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RunProfileWithCompileBeforeLaunchOption; +import com.intellij.execution.remote.RemoteConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +/** + * User: Vassiliy.Kudryashov + */ +public class CompileStepBeforeRunNoErrorCheck + extends BeforeRunTaskProvider { + public static final Key ID = Key.create("MakeNoErrorCheck"); + @NotNull private final Project myProject; + + public CompileStepBeforeRunNoErrorCheck(@NotNull Project project) { + myProject = project; + } + + public Key getId() { + return ID; + } + + @Override + public String getDescription(MakeBeforeRunTaskNoErrorCheck task) { + return ExecutionBundle.message("before.launch.compile.step.no.error.check"); + } + + @Override + public Icon getIcon() { + return AllIcons.Actions.Compile; + } + + @Override + public Icon getTaskIcon(MakeBeforeRunTaskNoErrorCheck task) { + return AllIcons.Actions.Compile; + } + + @Override + public MakeBeforeRunTaskNoErrorCheck createTask(RunConfiguration runConfiguration) { + return !(runConfiguration instanceof RemoteConfiguration) && runConfiguration instanceof RunProfileWithCompileBeforeLaunchOption + ? new MakeBeforeRunTaskNoErrorCheck() + : null; + } + + @Override + public boolean configureTask(RunConfiguration runConfiguration, MakeBeforeRunTaskNoErrorCheck task) { + return false; + } + + @Override + public boolean isConfigurable() { + return false; + } + + @Override + public String getName() { + return ExecutionBundle.message("before.launch.compile.step.no.error.check"); + } + + @Override + public boolean canExecuteTask(RunConfiguration configuration, MakeBeforeRunTaskNoErrorCheck task) { + return true; + } + + @Override + public boolean executeTask(DataContext context, + RunConfiguration configuration, + ExecutionEnvironment env, + MakeBeforeRunTaskNoErrorCheck task) { + return CompileStepBeforeRun.doMake(myProject, configuration, env, true); + } + + public static class MakeBeforeRunTaskNoErrorCheck extends BeforeRunTask { + private MakeBeforeRunTaskNoErrorCheck() { + super(ID); + setEnabled(true); + } + } +} diff --git a/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java b/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java index 2f5ed5df1357..b4c84a65d3d5 100644 --- a/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java +++ b/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java @@ -57,13 +57,6 @@ public abstract class BeforeRunTaskProvider { public abstract boolean isConfigurable(); - /** - * @return true if just created task must be configured by user. - */ - public boolean skipFirstConfiguration() { - return false; - } - /** * @return 'before run' task for the configuration or null, if the task from this provider is not applicable to the specified configuration */ diff --git a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java index 0524c9b37c29..4ac1e8eec86e 100644 --- a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java +++ b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java @@ -85,4 +85,21 @@ public abstract class RunManagerEx extends RunManager { public abstract void addRunManagerListener(RunManagerListener listener); public abstract void removeRunManagerListener(RunManagerListener listener); + + public static void disableTasks(Project project, RunConfiguration settings, Key... keys) { + for (Key key : keys) { + List tasks = getInstanceEx(project).getBeforeRunTasks(settings, key); + for (BeforeRunTask task : tasks) { + task.setEnabled(false); + } + } + } + + public static int getTasksCount(Project project, RunConfiguration settings, Key... keys) { + int result = 0; + for (Key key : keys) { + result += getInstanceEx(project).getBeforeRunTasks(settings, key).size(); + } + return result; + } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java b/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java index 935d525b38a8..aee7558811b7 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java @@ -271,8 +271,7 @@ class BeforeRunStepsPanel extends JPanel { public void actionPerformed(AnActionEvent e) { BeforeRunTask task = provider.createTask(myRunConfiguration); if (task != null) { - if (!provider.skipFirstConfiguration()) - provider.configureTask(myRunConfiguration, task); + provider.configureTask(myRunConfiguration, task); if (!provider.canExecuteTask(myRunConfiguration, task)) return; } else { 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 1bdd78817ea2..cffb66fcd9ab 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java @@ -16,6 +16,7 @@ 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.configurations.JavaParameters; import com.intellij.execution.configurations.RunProfile; @@ -60,7 +61,6 @@ import javax.swing.*; import java.io.File; import java.io.IOException; import java.util.Collection; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -97,12 +97,7 @@ public class GradleScriptType extends GroovyScriptType { configuration.setScriptParameters(target); configuration.setName(configuration.getName() + "." + target); } - - final List runTasks = - RunManagerEx.getInstanceEx(file.getProject()).getBeforeRunTasks(configuration, CompileStepBeforeRun.ID); - for (CompileStepBeforeRun.MakeBeforeRunTask task : runTasks) { - task.setEnabled(false); - } + RunManagerEx.disableTasks(file.getProject(), configuration, CompileStepBeforeRun.ID, CompileStepBeforeRunNoErrorCheck.ID); } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java index 58a61ca3b3c4..fc89fef90d5d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java @@ -16,6 +16,7 @@ package org.jetbrains.plugins.groovy.gant; import com.intellij.compiler.options.CompileStepBeforeRun; +import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.Location; import com.intellij.execution.RunManagerEx; import com.intellij.openapi.module.Module; @@ -97,11 +98,7 @@ public class GantScriptType extends GroovyScriptType { configuration.setScriptParameters(target); configuration.setName(configuration.getName() + "." + target); } - final List runTasks = - RunManagerEx.getInstanceEx(file.getProject()).getBeforeRunTasks(configuration, CompileStepBeforeRun.ID); - for (CompileStepBeforeRun.MakeBeforeRunTask task : runTasks) { - task.setEnabled(false); - } + RunManagerEx.disableTasks(file.getProject(), configuration, CompileStepBeforeRun.ID, CompileStepBeforeRunNoErrorCheck.ID); } public static List additionalScopeFiles(@NotNull GroovyFile file) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonRunConfigurationType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonRunConfigurationType.java index 8041b524164e..8ea01a842244 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonRunConfigurationType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonRunConfigurationType.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.griffon; import com.intellij.compiler.options.CompileStepBeforeRun; +import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; @@ -43,7 +44,7 @@ public class GriffonRunConfigurationType implements ConfigurationType { @Override public void configureBeforeRunTaskDefaults(Key providerID, BeforeRunTask task) { - if (providerID == CompileStepBeforeRun.ID) { + if (providerID == CompileStepBeforeRun.ID || providerID == CompileStepBeforeRunNoErrorCheck.ID) { task.setEnabled(false); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java index fa5528b657cd..c3afadde2332 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.mvc; import com.intellij.compiler.options.CompileStepBeforeRun; +import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.CantRunException; import com.intellij.execution.ExecutionException; import com.intellij.execution.RunManagerEx; @@ -358,10 +359,7 @@ public abstract class MvcFramework { runManager.addConfiguration(runSettings, false); runManager.setActiveConfiguration(runSettings); - final List runTasks = runManager.getBeforeRunTasks(configuration, CompileStepBeforeRun.ID); - for (CompileStepBeforeRun.MakeBeforeRunTask task : runTasks) { - task.setEnabled(false); - } + RunManagerEx.disableTasks(module.getProject(), configuration, CompileStepBeforeRun.ID, CompileStepBeforeRunNoErrorCheck.ID); } public abstract String getFrameworkName(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java index c3557ac455ec..ccc1e1201099 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.maven.execution; import com.intellij.compiler.options.CompileStepBeforeRun; +import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; @@ -90,7 +91,7 @@ public class MavenRunConfigurationType implements ConfigurationType { @Override public void configureBeforeRunTaskDefaults(Key providerID, BeforeRunTask task) { - if (providerID == CompileStepBeforeRun.ID) { + if (providerID == CompileStepBeforeRun.ID || providerID == CompileStepBeforeRunNoErrorCheck.ID) { task.setEnabled(false); } } diff --git a/resources/src/idea/RichPlatformPlugin.xml b/resources/src/idea/RichPlatformPlugin.xml index 1e39b1352134..a39cc8a889e2 100644 --- a/resources/src/idea/RichPlatformPlugin.xml +++ b/resources/src/idea/RichPlatformPlugin.xml @@ -344,7 +344,8 @@ - + +