From 49810e84cba112d541330c38977cdbd849c5c53c Mon Sep 17 00:00:00 2001 From: Louis Vignier Date: Thu, 21 Mar 2024 16:45:40 +0100 Subject: [PATCH] [compiler] Use UI DSL in EclipseCompilerConfigurable #IDEA-334671 GitOrigin-RevId: ce44d827c2b5ee4f7b30e8506a446e35a32d39a8 --- .../eclipse/EclipseCompilerConfigurable.form | 105 ------------------ .../eclipse/EclipseCompilerConfigurable.java | 71 ++++-------- .../eclipse/EclipseCompilerConfigurableUi.kt | 79 +++++++++++++ .../messages/JavaCompilerBundle.properties | 4 +- 4 files changed, 105 insertions(+), 154 deletions(-) delete mode 100644 java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.form create mode 100644 java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurableUi.kt diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.form b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.form deleted file mode 100644 index 16adbef74945..000000000000 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.form +++ /dev/null @@ -1,105 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.java index e5d5dac5f127..371df60ad698 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurable.java @@ -1,47 +1,24 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.compiler.impl.javaCompiler.eclipse; -import com.intellij.compiler.impl.javaCompiler.CompilerModuleOptionsComponent; import com.intellij.compiler.options.ComparingUtils; -import com.intellij.ide.highlighter.ArchiveFileType; -import com.intellij.openapi.compiler.JavaCompilerBundle; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.fileTypes.FileTypeRegistry; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.ui.RawCommandLineEditor; import org.jetbrains.jps.model.java.compiler.EclipseCompilerOptions; import javax.swing.*; public class EclipseCompilerConfigurable implements Configurable { private final Project myProject; - private JPanel myPanel; - private JCheckBox myCbDeprecation; - private JCheckBox myCbDebuggingInfo; - private JCheckBox myCbGenerateNoWarnings; - private RawCommandLineEditor myAdditionalOptionsField; - private JCheckBox myCbProceedOnErrors; - private CompilerModuleOptionsComponent myOptionsOverride; - private TextFieldWithBrowseButton myPathToEcjField; + private EclipseCompilerConfigurableUi myUi; private final EclipseCompilerOptions myCompilerSettings; public EclipseCompilerConfigurable(Project project, EclipseCompilerOptions options) { myProject = project; myCompilerSettings = options; - myAdditionalOptionsField.setDialogCaption(JavaCompilerBundle.message("java.compiler.option.additional.command.line.parameters")); - myAdditionalOptionsField.setDescriptor(null, false); - myPathToEcjField.addBrowseFolderListener( - JavaCompilerBundle.message("path.to.ecj.compiler.tool"), null, project, - new FileChooserDescriptor(true, false, true, true, false, false).withFileFilter(file -> FileTypeRegistry.getInstance().isFileOfType(file, ArchiveFileType.INSTANCE)) - ); - } - - private void createUIComponents() { - myOptionsOverride = new CompilerModuleOptionsComponent(myProject); + myUi = new EclipseCompilerConfigurableUi(project); } @Override @@ -51,44 +28,44 @@ public class EclipseCompilerConfigurable implements Configurable { @Override public JComponent createComponent() { - return myPanel; + return myUi.getPanel(); } @Override public boolean isModified() { boolean isModified = false; - isModified |= ComparingUtils.isModified(myCbDeprecation, myCompilerSettings.DEPRECATION); - isModified |= ComparingUtils.isModified(myCbDebuggingInfo, myCompilerSettings.DEBUGGING_INFO); - isModified |= ComparingUtils.isModified(myCbGenerateNoWarnings, myCompilerSettings.GENERATE_NO_WARNINGS); - isModified |= ComparingUtils.isModified(myCbProceedOnErrors, myCompilerSettings.PROCEED_ON_ERROR); - isModified |= ComparingUtils.isModified(myPathToEcjField, FileUtil.toSystemDependentName(myCompilerSettings.ECJ_TOOL_PATH)); - isModified |= ComparingUtils.isModified(myAdditionalOptionsField, myCompilerSettings.ADDITIONAL_OPTIONS_STRING); - isModified |= !myOptionsOverride.getModuleOptionsMap().equals(myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE); + isModified |= ComparingUtils.isModified(myUi.deprecationCb, myCompilerSettings.DEPRECATION); + isModified |= ComparingUtils.isModified(myUi.debuggingInfoCb, myCompilerSettings.DEBUGGING_INFO); + isModified |= ComparingUtils.isModified(myUi.generateNoWarningsCb, myCompilerSettings.GENERATE_NO_WARNINGS); + isModified |= ComparingUtils.isModified(myUi.proceedOnErrorsCb, myCompilerSettings.PROCEED_ON_ERROR); + isModified |= ComparingUtils.isModified(myUi.pathToEcjField, FileUtil.toSystemDependentName(myCompilerSettings.ECJ_TOOL_PATH)); + isModified |= ComparingUtils.isModified(myUi.additionalOptionsField, myCompilerSettings.ADDITIONAL_OPTIONS_STRING); + isModified |= !myUi.optionsOverrideComponent.getModuleOptionsMap().equals(myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE); return isModified; } @Override public void apply() throws ConfigurationException { - myCompilerSettings.DEPRECATION = myCbDeprecation.isSelected(); - myCompilerSettings.DEBUGGING_INFO = myCbDebuggingInfo.isSelected(); - myCompilerSettings.GENERATE_NO_WARNINGS = myCbGenerateNoWarnings.isSelected(); - myCompilerSettings.PROCEED_ON_ERROR = myCbProceedOnErrors.isSelected(); - myCompilerSettings.ECJ_TOOL_PATH = FileUtil.toSystemIndependentName(myPathToEcjField.getText().trim()); - myCompilerSettings.ADDITIONAL_OPTIONS_STRING = myAdditionalOptionsField.getText(); + myCompilerSettings.DEPRECATION = myUi.deprecationCb.isSelected(); + myCompilerSettings.DEBUGGING_INFO = myUi.debuggingInfoCb.isSelected(); + myCompilerSettings.GENERATE_NO_WARNINGS = myUi.generateNoWarningsCb.isSelected(); + myCompilerSettings.PROCEED_ON_ERROR = myUi.proceedOnErrorsCb.isSelected(); + myCompilerSettings.ECJ_TOOL_PATH = FileUtil.toSystemIndependentName(myUi.pathToEcjField.getText().trim()); + myCompilerSettings.ADDITIONAL_OPTIONS_STRING = myUi.additionalOptionsField.getText(); myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE.clear(); - myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE.putAll(myOptionsOverride.getModuleOptionsMap()); + myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE.putAll(myUi.optionsOverrideComponent.getModuleOptionsMap()); } @Override public void reset() { - myCbDeprecation.setSelected(myCompilerSettings.DEPRECATION); - myCbDebuggingInfo.setSelected(myCompilerSettings.DEBUGGING_INFO); - myCbGenerateNoWarnings.setSelected(myCompilerSettings.GENERATE_NO_WARNINGS); - myCbProceedOnErrors.setSelected(myCompilerSettings.PROCEED_ON_ERROR); - myPathToEcjField.setText(FileUtil.toSystemDependentName(myCompilerSettings.ECJ_TOOL_PATH)); - myAdditionalOptionsField.setText(myCompilerSettings.ADDITIONAL_OPTIONS_STRING); - myOptionsOverride.setModuleOptionsMap(myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE); + myUi.deprecationCb.setSelected(myCompilerSettings.DEPRECATION); + myUi.debuggingInfoCb.setSelected(myCompilerSettings.DEBUGGING_INFO); + myUi.generateNoWarningsCb.setSelected(myCompilerSettings.GENERATE_NO_WARNINGS); + myUi.proceedOnErrorsCb.setSelected(myCompilerSettings.PROCEED_ON_ERROR); + myUi.pathToEcjField.setText(FileUtil.toSystemDependentName(myCompilerSettings.ECJ_TOOL_PATH)); + myUi.additionalOptionsField.setText(myCompilerSettings.ADDITIONAL_OPTIONS_STRING); + myUi.optionsOverrideComponent.setModuleOptionsMap(myCompilerSettings.ADDITIONAL_OPTIONS_OVERRIDE); } } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurableUi.kt b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurableUi.kt new file mode 100644 index 000000000000..25facca637c9 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/eclipse/EclipseCompilerConfigurableUi.kt @@ -0,0 +1,79 @@ +// 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.impl.javaCompiler.eclipse + +import com.intellij.compiler.impl.javaCompiler.CompilerModuleOptionsComponent +import com.intellij.ide.highlighter.ArchiveFileType +import com.intellij.openapi.compiler.JavaCompilerBundle +import com.intellij.openapi.fileChooser.FileChooserDescriptor +import com.intellij.openapi.fileTypes.FileTypeRegistry +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.DialogPanel +import com.intellij.openapi.ui.TextFieldWithBrowseButton +import com.intellij.ui.RawCommandLineEditor +import com.intellij.ui.dsl.builder.* +import javax.swing.JCheckBox + +class EclipseCompilerConfigurableUi(project: Project) { + lateinit var debuggingInfoCb: JCheckBox + lateinit var deprecationCb: JCheckBox + lateinit var generateNoWarningsCb: JCheckBox + lateinit var additionalOptionsField: RawCommandLineEditor + lateinit var proceedOnErrorsCb: JCheckBox + lateinit var optionsOverrideComponent: CompilerModuleOptionsComponent + lateinit var pathToEcjField: TextFieldWithBrowseButton + + val panel: DialogPanel = panel { + group(JavaCompilerBundle.message("eclipse.options.group.title")) { + row { + debuggingInfoCb = checkBox(JavaCompilerBundle.message("java.compiler.option.generate.debugging.info")) + .component + } + row { + deprecationCb = checkBox(JavaCompilerBundle.message("java.compiler.option.report.deprecated")) + .component + } + row { + generateNoWarningsCb = checkBox(JavaCompilerBundle.message("java.compiler.option.generate.no.warnings")) + .component + } + row { + proceedOnErrorsCb = checkBox(JavaCompilerBundle.message("eclipse.compiler.proceed.on.errors.option")) + .component + } + .bottomGap(BottomGap.SMALL) + row { + pathToEcjField = textFieldWithBrowseButton() + .align(AlignX.FILL) + .applyToComponent { + addBrowseFolderListener( + JavaCompilerBundle.message("path.to.ecj.compiler.tool"), null, project, + object : FileChooserDescriptor(true, false, true, true, false, false) {}.withFileFilter { file -> + FileTypeRegistry.getInstance().isFileOfType(file, ArchiveFileType.INSTANCE) + } + ) + } + .label(JavaCompilerBundle.message("eclipse.compiler.path.label"), LabelPosition.TOP) + .comment(JavaCompilerBundle.message("eclipse.compiler.path.comment")) + .component + } + row { + additionalOptionsField = cell(RawCommandLineEditor()) + .align(AlignX.FILL) + .applyToComponent { + setDescriptor(null, false) + } + .label(JavaCompilerBundle.message("java.compiler.option.additional.command.line.parameters"), LabelPosition.TOP) + .comment(JavaCompilerBundle.message("settings.recommended.in.paths")) + .component + } + .bottomGap(BottomGap.SMALL) + row { + optionsOverrideComponent = cell(CompilerModuleOptionsComponent(project)) + .align(AlignX.FILL) + .resizableColumn() + .component + } + .resizableRow() + } + } +} diff --git a/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties b/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties index 28c2814de750..b4c7a7ee7c7e 100644 --- a/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties +++ b/java/compiler/openapi/resources/messages/JavaCompilerBundle.properties @@ -213,8 +213,8 @@ dialog.title.packaging.choose.library=Choose Library node.excluded.flag.tooltip=Excluded macro.output.path=Output path button.add=&Add... -eclipse.compiler.cross.platform.help.message=('/' recommended in paths for cross-platform configurations) -eclipse.compiler.path.leave.empty.help.message=Path to ECJ batch compiler tool (leave empty to use bundled): +eclipse.compiler.path.label=Path to ECJ batch compiler tool: +eclipse.compiler.path.comment=Leave empty to use bundled eclipse.compiler.proceed.on.errors.option=Proceed on errors progress.title.cancelling.running.builds=Cancelling Running Builds abnormal.build.process.termination=Abnormal build process termination