IG: reusable & simpler UI code

This commit is contained in:
Bas Leijdekkers
2017-04-06 20:55:29 +02:00
parent b30506e0d0
commit c4d259f0de
2 changed files with 32 additions and 69 deletions
@@ -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());
}
}
}
@@ -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;
}