From c4d259f0def9a8fd6d146ea36759d4f6ce6032b2 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 6 Apr 2017 19:34:50 +0200 Subject: [PATCH] IG: reusable & simpler UI code --- .../ui/MultipleCheckboxOptionsPanel.java | 26 +++++-- ...lOnLocalVariableOrParameterInspection.java | 75 ++++--------------- 2 files changed, 32 insertions(+), 69 deletions(-) diff --git a/platform/analysis-api/src/com/intellij/codeInspection/ui/MultipleCheckboxOptionsPanel.java b/platform/analysis-api/src/com/intellij/codeInspection/ui/MultipleCheckboxOptionsPanel.java index ca95906a316f..99d84b74ebcd 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/ui/MultipleCheckboxOptionsPanel.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/ui/MultipleCheckboxOptionsPanel.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,9 +16,11 @@ package com.intellij.codeInspection.ui; import com.intellij.codeInspection.InspectionProfileEntry; +import com.intellij.util.ui.JBInsets; import org.jetbrains.annotations.NonNls; import javax.swing.*; +import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; @@ -40,10 +42,25 @@ public class MultipleCheckboxOptionsPanel extends JPanel { } public void addCheckbox(String label, @NonNls String property) { + addCheckboxEx(label, property); + } + + public JCheckBox addCheckboxEx(String label, @NonNls String property) { final boolean selected = myOptionAccessor.getOption(property); final JCheckBox checkBox = new JCheckBox(label, selected); configureCheckbox(myOptionAccessor, property, checkBox); addComponent(checkBox); + return checkBox; + } + + public JCheckBox addDependentCheckBox(String label, @NonNls String property, JCheckBox controller) { + final JCheckBox checkBox = addCheckboxEx(label, property); + checkBox.setBorder(new EmptyBorder(new JBInsets(0, 30, 0, 0))); + controller.addChangeListener(e -> { + checkBox.setEnabled(controller.isEnabled() && controller.isSelected()); + }); + checkBox.setEnabled(controller.isEnabled() && controller.isSelected()); + return checkBox; } public void addComponent(JComponent component) { @@ -68,12 +85,6 @@ public class MultipleCheckboxOptionsPanel extends JPanel { model.addChangeListener(changeListener); } - public static void initAndConfigureCheckbox(InspectionProfileEntry owner, String property, JCheckBox checkBox) { - OptionAccessor optionAccessor = new OptionAccessor.Default(owner); - checkBox.setSelected(optionAccessor.getOption(property)); - configureCheckbox(optionAccessor, property, checkBox); - } - private static class CheckboxChangeListener implements ChangeListener { private final OptionAccessor myAccessor; private final String property; @@ -89,6 +100,5 @@ public class MultipleCheckboxOptionsPanel extends JPanel { public void stateChanged(ChangeEvent e) { myAccessor.setOption(property, model.isSelected()); } - } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryFinalOnLocalVariableOrParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryFinalOnLocalVariableOrParameterInspection.java index 51652fbb4bf8..ea23c74b7dc6 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryFinalOnLocalVariableOrParameterInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryFinalOnLocalVariableOrParameterInspection.java @@ -16,10 +16,10 @@ package com.siyeh.ig.style; import com.intellij.codeInspection.CleanupLocalInspectionTool; +import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; @@ -29,9 +29,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; + +import static com.siyeh.InspectionGadgetsBundle.message; public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseInspection implements CleanupLocalInspectionTool { @@ -47,7 +46,7 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn @Override @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message("unnecessary.final.on.local.variable.or.parameter.display.name"); + return message("unnecessary.final.on.local.variable.or.parameter.display.name"); } @Override @@ -56,73 +55,27 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn final PsiVariable variable = (PsiVariable)infos[0]; final String variableName = variable.getName(); if (variable instanceof PsiParameter) { - return InspectionGadgetsBundle.message("unnecessary.final.on.parameter.problem.descriptor", variableName); + return message("unnecessary.final.on.parameter.problem.descriptor", variableName); } else { - return InspectionGadgetsBundle.message("unnecessary.final.on.local.variable.problem.descriptor", variableName); + return message("unnecessary.final.on.local.variable.problem.descriptor", variableName); } } @Override @Nullable public JComponent createOptionsPanel() { - final JPanel panel = new JPanel(new GridBagLayout()); - final JCheckBox abstractOnlyCheckBox = - new JCheckBox(InspectionGadgetsBundle.message("unnecessary.final.on.parameter.only.interface.option"), onlyWarnOnAbstractMethods) { - @Override - public void setEnabled(boolean b) { - // hack to display correctly on initial opening of - // inspection settings (otherwise it is always enabled) - if (b) { - super.setEnabled(reportParameters); - } - else { - super.setEnabled(false); - } - } - }; - abstractOnlyCheckBox.setEnabled(true); - abstractOnlyCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - onlyWarnOnAbstractMethods = abstractOnlyCheckBox.isSelected(); - } - }); - final JCheckBox reportLocalVariablesCheckBox = - new JCheckBox(InspectionGadgetsBundle.message("unnecessary.final.report.local.variables.option"), reportLocalVariables); - final JCheckBox reportParametersCheckBox = - new JCheckBox(InspectionGadgetsBundle.message("unnecessary.final.report.parameters.option"), reportParameters); + final MultipleCheckboxOptionsPanel panel = new MultipleCheckboxOptionsPanel(this); + final JCheckBox box1 = panel.addCheckboxEx(message("unnecessary.final.report.local.variables.option"), "reportLocalVariables"); + final JCheckBox box2 = panel.addCheckboxEx(message("unnecessary.final.report.parameters.option"), "reportParameters"); + panel.addDependentCheckBox(message("unnecessary.final.on.parameter.only.interface.option"), "onlyWarnOnAbstractMethods", box2); - reportLocalVariablesCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - reportLocalVariables = reportLocalVariablesCheckBox.isSelected(); - if (!reportLocalVariables) { - reportParametersCheckBox.setSelected(true); - } - } + box1.addChangeListener(e -> { + if (!box1.isSelected()) box2.setSelected(true); }); - reportParametersCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - reportParameters = reportParametersCheckBox.isSelected(); - if (!reportParameters) { - reportLocalVariablesCheckBox.setSelected(true); - } - abstractOnlyCheckBox.setEnabled(reportParameters); - } + box2.addChangeListener(e -> { + if (!box2.isSelected()) box1.setSelected(true); }); - final GridBagConstraints constraints = new GridBagConstraints(); - constraints.anchor = GridBagConstraints.NORTHWEST; - constraints.fill = GridBagConstraints.HORIZONTAL; - constraints.weightx = 1.0; - panel.add(reportLocalVariablesCheckBox, constraints); - constraints.gridy = 1; - panel.add(reportParametersCheckBox, constraints); - constraints.insets.left = 20; - constraints.gridy = 2; - constraints.weighty = 1.0; - panel.add(abstractOnlyCheckBox, constraints); return panel; }