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 0dc7ca1236f0..285637bf33f0 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,7 +10,7 @@ - + @@ -93,23 +93,15 @@ - + - + - + - - - - - - - - - + @@ -117,12 +109,28 @@ - + - + - + + + + + + + + + + + + + + + + + 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 4621d76f0f61..889b45e23b10 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -22,6 +22,7 @@ import com.intellij.compiler.MalformedPatternException; import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; import com.intellij.compiler.server.BuildManager; import com.intellij.openapi.compiler.CompilerBundle; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; @@ -39,6 +40,7 @@ import java.util.Locale; import java.util.StringTokenizer; public class CompilerUIConfigurable implements SearchableConfigurable, Configurable.NoScroll { + private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.options.CompilerUIConfigurable"); private JPanel myPanel; private final Project myProject; @@ -49,8 +51,11 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura private JCheckBox myCbAutoShowFirstError; private JCheckBox myCbUseExternalBuild; private JCheckBox myCbEnableAutomake; - private JTextField myTextField1; - private JTextField myTextField2; + private JCheckBox myCbParallelCompilation; + private JTextField myHeapSizeField; + private JTextField myVMOptionsField; + private JLabel myHeapSizeLabel; + private JLabel myVMOptionsLabel; public CompilerUIConfigurable(final Project project) { myProject = project; @@ -64,7 +69,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura myCbUseExternalBuild.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - myCbEnableAutomake.setEnabled(myCbUseExternalBuild.isSelected()); + updateExternalMakeOptionControls(myCbUseExternalBuild.isSelected()); } }); } @@ -78,7 +83,11 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura myCbAssertNotNull.setSelected(configuration.isAddNotNullAssertions()); myCbUseExternalBuild.setSelected(workspaceConfiguration.USE_COMPILE_SERVER); myCbEnableAutomake.setSelected(workspaceConfiguration.MAKE_PROJECT_ON_SAVE); - myCbEnableAutomake.setEnabled(myCbUseExternalBuild.isSelected()); + myCbParallelCompilation.setSelected(workspaceConfiguration.PARALLEL_COMPILATION); + myHeapSizeField.setText(String.valueOf(workspaceConfiguration.COMPILER_PROCESS_HEAP_SIZE)); + final String options = workspaceConfiguration.COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS; + myVMOptionsField.setText(options == null? "" : options.trim()); + updateExternalMakeOptionControls(myCbUseExternalBuild.isSelected()); configuration.convertPatterns(); @@ -105,6 +114,14 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura boolean wasUsingExternalMake = workspaceConfiguration.USE_COMPILE_SERVER; workspaceConfiguration.USE_COMPILE_SERVER = myCbUseExternalBuild.isSelected(); workspaceConfiguration.MAKE_PROJECT_ON_SAVE = myCbEnableAutomake.isSelected(); + workspaceConfiguration.PARALLEL_COMPILATION = myCbParallelCompilation.isSelected(); + try { + workspaceConfiguration.COMPILER_PROCESS_HEAP_SIZE = Integer.parseInt(myHeapSizeField.getText().trim()); + } + catch (NumberFormatException ignored) { + LOG.info(ignored); + } + workspaceConfiguration.COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS = myVMOptionsField.getText().trim(); configuration.setAddNotNullAssertions(myCbAssertNotNull.isSelected()); configuration.removeResourceFilePatterns(); @@ -180,6 +197,9 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura isModified |= ComparingUtils.isModified(myCbAutoShowFirstError, workspaceConfiguration.AUTO_SHOW_ERRORS_IN_EDITOR); isModified |= ComparingUtils.isModified(myCbUseExternalBuild, workspaceConfiguration.USE_COMPILE_SERVER); isModified |= ComparingUtils.isModified(myCbEnableAutomake, workspaceConfiguration.MAKE_PROJECT_ON_SAVE); + isModified |= ComparingUtils.isModified(myCbParallelCompilation, workspaceConfiguration.PARALLEL_COMPILATION); + isModified |= ComparingUtils.isModified(myHeapSizeField, workspaceConfiguration.COMPILER_PROCESS_HEAP_SIZE); + isModified |= ComparingUtils.isModified(myVMOptionsField, workspaceConfiguration.COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS); final CompilerConfigurationImpl compilerConfiguration = (CompilerConfigurationImpl)CompilerConfiguration.getInstance(myProject); isModified |= ComparingUtils.isModified(myCbAssertNotNull, compilerConfiguration.isAddNotNullAssertions()); @@ -212,4 +232,14 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura public void disposeUIResources() { } + + private void updateExternalMakeOptionControls(boolean enabled) { + myCbEnableAutomake.setEnabled(enabled); + myCbParallelCompilation.setEnabled(enabled); + myHeapSizeField.setEnabled(enabled); + myVMOptionsField.setEnabled(enabled); + myHeapSizeLabel.setEnabled(enabled); + myVMOptionsLabel.setEnabled(enabled); + } + } 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 6516bb9e0a25..aaeaa93baa6f 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -706,12 +706,13 @@ public class BuildManager implements ApplicationComponent{ compilerPath = new File(path); } + final CompilerWorkspaceConfiguration config = CompilerWorkspaceConfiguration.getInstance(project); final GeneralCommandLine cmdLine = new GeneralCommandLine(); final String vmExecutablePath = ((JavaSdkType)projectJdk.getSdkType()).getVMExecutablePath(projectJdk); cmdLine.setExePath(vmExecutablePath); cmdLine.addParameter("-XX:MaxPermSize=150m"); cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); - final int heapSize = Registry.intValue("compiler.process.heap.size"); + final int heapSize = config.COMPILER_PROCESS_HEAP_SIZE; final int xms = heapSize / 2; if (xms > 32) { cmdLine.addParameter("-Xms" + xms + "m"); @@ -733,8 +734,9 @@ public class BuildManager implements ApplicationComponent{ if (shouldGenerateIndex != null) { cmdLine.addParameter("-D"+ GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION +"=" + shouldGenerateIndex); } + cmdLine.addParameter("-D"+ GlobalOptions.COMPILE_PARALLEL_OPTION +"=" + Boolean.toString(config.PARALLEL_COMPILATION)); - final String additionalOptions = Registry.stringValue("compiler.process.vm.options"); + final String additionalOptions = config.COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS; if (!StringUtil.isEmpty(additionalOptions)) { final StringTokenizer tokenizer = new StringTokenizer(additionalOptions, " ", false); while (tokenizer.hasMoreTokens()) { diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index eb20465b3d28..903bf499fb1b 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -37,6 +37,9 @@ 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 PARALLEL_COMPILATION = false; + public int COMPILER_PROCESS_HEAP_SIZE = 700; + public String COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS = ""; public static CompilerWorkspaceConfiguration getInstance(Project project) { return ServiceManager.getService(project, CompilerWorkspaceConfiguration.class); diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 0bfcf1b5d211..cded157fcac5 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -150,18 +150,10 @@ compiler.max.static.constants.searches=3000 compiler.max.static.constants.searches.description=If the number of changed compile time constants exceeds this value,\ make will start full-project rebuild -compiler.process.heap.size=700 -# suppress inspection "UnusedProperty" -compiler.process.heap.size.description=Heap size value in MB for the build process. - compiler.process.32bit.vm.on.mac=true # suppress inspection "UnusedProperty" compiler.process.32bit.vm.on.mac.description=Force -d32 VM option on Mac (recommended for faster startup and lower memory footprint). -compiler.process.vm.options=-Xss2048k -Dcompile.parallel=false -Dcompile.parallel.max.threads=4 -# suppress inspection "UnusedProperty" -compiler.process.vm.options.description=Additional options for the build process' VM. - compiler.process.use.memory.temp.cache=true # suppress inspection "UnusedProperty" compiler.process.use.memory.temp.cache.description=Store temporary data in memory for faster compilation; requires larger heap size for the build process. If parallel build is enabled, the option is ignored and temp data is always stored in memory.