From 79b9bf1b343e6b3ca35f3270e1cba1dc413e7a81 Mon Sep 17 00:00:00 2001 From: Georgii Ustinov Date: Tue, 30 Jul 2024 14:30:49 +0300 Subject: [PATCH] [Java] Add 3 state combobox to compile modules in parallel in CompilerUIConfigurableKt IDEA-352162 GitOrigin-RevId: 5262222db58cb535dd1055d7cc01c9c8269d818f --- .../options/CompilerUIConfigurableKt.kt | 25 ++++++++++++++----- .../messages/JavaCompilerBundle.properties | 3 +++ .../CompilerWorkspaceConfiguration.java | 2 ++ .../compiler/JpsParallelCompilationOption.kt | 16 ++++++++++++ 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 java/compiler/openapi/src/com/intellij/compiler/JpsParallelCompilationOption.kt diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurableKt.kt b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurableKt.kt index 7cd44c5daf5c..e4d5e7f2a3f0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurableKt.kt +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurableKt.kt @@ -6,6 +6,7 @@ import com.intellij.codeInsight.NullableNotNullManager import com.intellij.compiler.CompilerConfiguration import com.intellij.compiler.CompilerConfigurationImpl import com.intellij.compiler.CompilerWorkspaceConfiguration +import com.intellij.compiler.JpsParallelCompilationOption import com.intellij.compiler.impl.javaCompiler.javac.JavacConfiguration import com.intellij.compiler.options.CompilerOptionsFilter.Setting import com.intellij.compiler.options.CompilerUIConfigurable.applyResourcePatterns @@ -25,10 +26,7 @@ import com.intellij.util.execution.ParametersListUtil import com.intellij.util.ui.UIUtil import org.jetbrains.annotations.NonNls import java.util.* -import javax.swing.JButton -import javax.swing.JCheckBox -import javax.swing.JComponent -import javax.swing.JTextField +import javax.swing.* class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), SearchableConfigurable { private val disabledSettings: MutableSet = EnumSet.noneOf(Setting::class.java) @@ -44,6 +42,8 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se private lateinit var cbEnableAutomake: JCheckBox private lateinit var cbParallelCompilation: JCheckBox + private lateinit var comboboxJpsParallelCompilation: JComboBox + lateinit var sharedHeapSizeField: JTextField lateinit var sharedVMOptionsField: ExpandableTextField lateinit var heapSizeField: JTextField @@ -101,6 +101,13 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se cbRebuildOnDependencyChange = checkBox(JavaCompilerBundle.message("settings.rebuild.module.on.dependency.change")) .component } + row { + label(JavaCompilerBundle.message("settings.compile.independent.modules.in.parallel")) + .comment + comboboxJpsParallelCompilation = comboBox(JpsParallelCompilationOption.entries) + .comment(JavaCompilerBundle.message("settings.parallel.module.compile.may.require.larger.heap.size")) + .component + } } group(JavaCompilerBundle.message("settings.build.process.group")) { @@ -184,7 +191,7 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se Setting.AUTO_SHOW_FIRST_ERROR_IN_EDITOR to listOf(cbAutoShowFirstError), Setting.DISPLAY_NOTIFICATION_POPUP to listOf(cbDisplayNotificationPopup), Setting.AUTO_MAKE to listOf(cbEnableAutomake), - Setting.PARALLEL_COMPILATION to listOf(cbParallelCompilation), + Setting.PARALLEL_COMPILATION to listOf(cbParallelCompilation, comboboxJpsParallelCompilation), Setting.REBUILD_MODULE_ON_DEPENDENCY_CHANGE to listOf(cbRebuildOnDependencyChange), Setting.HEAP_SIZE to listOf(heapSizeField, sharedHeapSizeField), Setting.COMPILER_VM_OPTIONS to listOf(vmOptionsField, sharedVMOptionsField), @@ -217,6 +224,9 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se if (!disabledSettings.contains(Setting.PARALLEL_COMPILATION) && configuration.isParallelCompilationEnabled != cbParallelCompilation.isSelected) { configuration.isParallelCompilationEnabled = cbParallelCompilation.isSelected } + if (!disabledSettings.contains(Setting.PARALLEL_COMPILATION)) { + workspaceConfiguration.JPS_PARALLEL_COMPILATION = comboboxJpsParallelCompilation.getItemAt(comboboxJpsParallelCompilation.selectedIndex) + } if (!disabledSettings.contains(Setting.REBUILD_MODULE_ON_DEPENDENCY_CHANGE)) { workspaceConfiguration.REBUILD_ON_DEPENDENCY_CHANGE = cbRebuildOnDependencyChange.isSelected } @@ -259,6 +269,7 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se cbEnableAutomake.setSelected(workspaceConfiguration.MAKE_PROJECT_ON_SAVE) cbParallelCompilation.setSelected(configuration.isParallelCompilationEnabled()) cbRebuildOnDependencyChange.setSelected(workspaceConfiguration.REBUILD_ON_DEPENDENCY_CHANGE) + comboboxJpsParallelCompilation.selectedItem = workspaceConfiguration.JPS_PARALLEL_COMPILATION val heapSize = workspaceConfiguration.COMPILER_PROCESS_HEAP_SIZE heapSizeField.text = if (heapSize > 0) heapSize.toString() else "" // for compatibility with older projects @@ -291,7 +302,9 @@ class CompilerUIConfigurableKt(val project: Project) : DslConfigurableBase(), Se isModified = isModified || !disabledSettings.contains(Setting.AUTO_MAKE) && ComparingUtils.isModified(cbEnableAutomake, workspaceConfiguration.MAKE_PROJECT_ON_SAVE) isModified = isModified || !disabledSettings.contains(Setting.PARALLEL_COMPILATION) - && ComparingUtils.isModified(cbParallelCompilation, configuration.isParallelCompilationEnabled()) + && (ComparingUtils.isModified(cbParallelCompilation, configuration.isParallelCompilationEnabled())) + isModified = isModified || !disabledSettings.contains(Setting.PARALLEL_COMPILATION) + && (comboboxJpsParallelCompilation.selectedItem != workspaceConfiguration.JPS_PARALLEL_COMPILATION) isModified = isModified || !disabledSettings.contains(Setting.REBUILD_MODULE_ON_DEPENDENCY_CHANGE) && ComparingUtils.isModified(cbRebuildOnDependencyChange, workspaceConfiguration.REBUILD_ON_DEPENDENCY_CHANGE) isModified = isModified || !disabledSettings.contains(Setting.HEAP_SIZE) diff --git a/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties b/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties index f5ed15cf773b..2f2f328dbaaa 100644 --- a/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties +++ b/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties @@ -130,6 +130,9 @@ settings.actions.on.save.page.build.project.on.save.checkbox=Build project settings.actions.on.save.page.build.project.on.save.checkbox.comment=Not triggered while running/debugging settings.actions.on.save.page.compiler.settings.link=Compiler settings... settings.compile.independent.modules.in.parallel=Compile independent modules in parallel +settings.compile.independent.modules.in.parallel.enabled = Enabled +settings.compile.independent.modules.in.parallel.automatic = Automatic +settings.compile.independent.modules.in.parallel.disabled = Disabled settings.rebuild.module.on.dependency.change=Rebuild module on dependency change settings.size.mbytes=Mbytes settings.build.process.group=Build Process diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index 943288d27ebd..4b10becd0127 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -36,6 +36,8 @@ public final class CompilerWorkspaceConfiguration implements PersistentStateComp @Deprecated(forRemoval = true) public Boolean PARALLEL_COMPILATION = null; + public JpsParallelCompilationOption JPS_PARALLEL_COMPILATION = JpsParallelCompilationOption.AUTOMATIC; + public int COMPILER_PROCESS_HEAP_SIZE = 0; public String COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS = ""; public boolean REBUILD_ON_DEPENDENCY_CHANGE = true; diff --git a/java/compiler/openapi/src/com/intellij/compiler/JpsParallelCompilationOption.kt b/java/compiler/openapi/src/com/intellij/compiler/JpsParallelCompilationOption.kt new file mode 100644 index 000000000000..c573236d580d --- /dev/null +++ b/java/compiler/openapi/src/com/intellij/compiler/JpsParallelCompilationOption.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.compiler + +import com.intellij.openapi.compiler.JavaCompilerBundle + +enum class JpsParallelCompilationOption { + ENABLED, + AUTOMATIC, + DISABLED; + + override fun toString(): String = when (this) { + ENABLED -> JavaCompilerBundle.message("settings.compile.independent.modules.in.parallel.enabled") + AUTOMATIC -> JavaCompilerBundle.message("settings.compile.independent.modules.in.parallel.automatic") + DISABLED -> JavaCompilerBundle.message("settings.compile.independent.modules.in.parallel.disabled") + } +} \ No newline at end of file