From f5127a4f0ab9c9cd03cff5b0ba233e223a88b8c3 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Wed, 20 Jun 2012 18:22:58 +0200 Subject: [PATCH] optianally disable automake when a run configuration is active --- .../options/CompilerOptionsPanel.form | 22 +++++++++++++------ .../options/CompilerUIConfigurable.java | 10 +++++++-- .../compiler/server/BuildManager.java | 17 ++++++++++++++ .../CompilerWorkspaceConfiguration.java | 2 +- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form b/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form index 90bde58d39a5..2111e6f4d29f 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form @@ -1,6 +1,6 @@
- + @@ -10,13 +10,13 @@ - + - + @@ -55,7 +55,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -79,7 +79,7 @@ - + @@ -93,6 +93,14 @@ + + + + + + + + diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java index 8e609ec90a69..4e1093d6fa37 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -45,12 +45,14 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura private JCheckBox myCbAutoShowFirstError; private JCheckBox myCbUseCompileServer; private JCheckBox myCbMakeProjectOnSave; + private JCheckBox myCbAllowAutomakeWhileRunningApplication; public CompilerUIConfigurable(final Project project) { myProject = project; final boolean isServerOptionEnabled = Registry.is("compiler.out-of-process.build.enabled") || ApplicationManager.getApplication().isInternal(); myCbUseCompileServer.setVisible(isServerOptionEnabled); myCbMakeProjectOnSave.setVisible(isServerOptionEnabled); + myCbAllowAutomakeWhileRunningApplication.setVisible(isServerOptionEnabled); myPatternLegendLabel.setText("" + "Use ; to separate patterns and ! to negate a pattern. " + @@ -61,7 +63,9 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura myCbUseCompileServer.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - myCbMakeProjectOnSave.setEnabled(myCbUseCompileServer.isSelected()); + final boolean enabled = myCbUseCompileServer.isSelected(); + myCbMakeProjectOnSave.setEnabled(enabled); + myCbAllowAutomakeWhileRunningApplication.setEnabled(enabled); } }); } @@ -75,7 +79,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura myCbAssertNotNull.setSelected(configuration.isAddNotNullAssertions()); myCbUseCompileServer.setSelected(workspaceConfiguration.USE_COMPILE_SERVER); myCbMakeProjectOnSave.setSelected(workspaceConfiguration.MAKE_PROJECT_ON_SAVE); - myCbMakeProjectOnSave.setEnabled(workspaceConfiguration.USE_COMPILE_SERVER); + myCbAllowAutomakeWhileRunningApplication.setEnabled(workspaceConfiguration.USE_COMPILE_SERVER); configuration.convertPatterns(); @@ -102,6 +106,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura boolean wasUsing = workspaceConfiguration.USE_COMPILE_SERVER; workspaceConfiguration.USE_COMPILE_SERVER = myCbUseCompileServer.isSelected(); workspaceConfiguration.MAKE_PROJECT_ON_SAVE = myCbMakeProjectOnSave.isSelected(); + workspaceConfiguration.ALLOW_AUTOMAKE_WHILE_RUNNING_APPLICATION = myCbAllowAutomakeWhileRunningApplication.isSelected(); configuration.setAddNotNullAssertions(myCbAssertNotNull.isSelected()); configuration.removeResourceFilePatterns(); @@ -165,6 +170,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura isModified |= ComparingUtils.isModified(myCbAutoShowFirstError, workspaceConfiguration.AUTO_SHOW_ERRORS_IN_EDITOR); isModified |= ComparingUtils.isModified(myCbUseCompileServer, workspaceConfiguration.USE_COMPILE_SERVER); isModified |= ComparingUtils.isModified(myCbMakeProjectOnSave, workspaceConfiguration.MAKE_PROJECT_ON_SAVE); + isModified |= ComparingUtils.isModified(myCbAllowAutomakeWhileRunningApplication, workspaceConfiguration.ALLOW_AUTOMAKE_WHILE_RUNNING_APPLICATION); final CompilerConfigurationImpl compilerConfiguration = (CompilerConfigurationImpl)CompilerConfiguration.getInstance(myProject); isModified |= ComparingUtils.isModified(myCbAssertNotNull, compilerConfiguration.isAddNotNullAssertions()); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index e57348f4e328..f69a80666049 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -25,6 +25,8 @@ import com.intellij.execution.ExecutionManager; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.process.*; +import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.execution.ui.RunContentManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathMacros; import com.intellij.openapi.application.PathManager; @@ -292,6 +294,21 @@ public class BuildManager implements ApplicationComponent{ if (!config.useOutOfProcessBuild() || !config.MAKE_PROJECT_ON_SAVE) { continue; } + if (!config.ALLOW_AUTOMAKE_WHILE_RUNNING_APPLICATION) { + final RunContentManager contentManager = ExecutionManager.getInstance(project).getContentManager(); + boolean hasRunningProcesses = false; + for (RunContentDescriptor descriptor : contentManager.getAllDescriptors()) { + final ProcessHandler handler = descriptor.getProcessHandler(); + if (handler != null && !handler.isProcessTerminated()) { // active process + hasRunningProcesses = true; + break; + } + } + if (hasRunningProcesses) { + continue; + } + } + final List emptyList = Collections.emptyList(); final RequestFuture future = scheduleBuild( project, false, true, emptyList, emptyList, emptyList, Collections.emptyMap(), new AutoMakeMessageHandler(project) diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index 37a82ecba976..28d720d5faab 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -21,7 +21,6 @@ package com.intellij.compiler; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; -import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.registry.Registry; import com.intellij.util.xmlb.XmlSerializerUtil; @@ -40,6 +39,7 @@ public class CompilerWorkspaceConfiguration implements PersistentStateComponent< public boolean CLEAR_OUTPUT_DIRECTORY = true; public boolean USE_COMPILE_SERVER = false; public boolean MAKE_PROJECT_ON_SAVE = false; + public boolean ALLOW_AUTOMAKE_WHILE_RUNNING_APPLICATION = false; public static CompilerWorkspaceConfiguration getInstance(Project project) { return ServiceManager.getService(project, CompilerWorkspaceConfiguration.class);