IJ-CR-8338 [codeInspection] Update ListEditForm

GitOrigin-RevId: 60b16d88ad47f62ad56aea840e2c6b381f54f5ea
This commit is contained in:
Louis Vignier
2021-04-19 19:09:02 +03:00
committed by intellij-monorepo-bot
parent 287867e2f5
commit 0f575fbfa5
21 changed files with 91 additions and 57 deletions
@@ -5,6 +5,7 @@ import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.ui.InspectionOptionsPanel;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
@@ -13,6 +14,7 @@ import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.util.ui.UI;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -40,7 +42,14 @@ public class StaticPseudoFunctionalStyleMethodInspection extends AbstractBaseJav
@Nullable
@Override
public JComponent createOptionsPanel() {
return myOptions.createPanel();
final var panel = new InspectionOptionsPanel();
panel.addGrowing(UI.PanelFactory
.panel(myOptions.createPanel())
.withLabel(JavaBundle.message("inspection.static.pseudo.functional.style.table.label"))
.moveLabelOnTop()
.resizeY(true)
.createPanel());
return panel;
}
@NotNull
@@ -15,6 +15,7 @@
*/
package com.intellij.codeInspection.java18StreamApi;
import com.intellij.openapi.actionSystem.ActionToolbarPosition;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
@@ -129,7 +130,11 @@ public class StaticPseudoFunctionalStyleMethodOptions {
append("." + element.getMethodName(), SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
}
});
return ToolbarDecorator.createDecorator(list).disableUpDownActions().setAddAction(new AnActionButtonRunnable() {
return ToolbarDecorator
.createDecorator(list)
.disableUpDownActions()
.setToolbarPosition(ActionToolbarPosition.RIGHT)
.setAddAction(new AnActionButtonRunnable() {
@Override
public void run(AnActionButton button) {
final Project currentProject = CommonDataKeys.PROJECT.getData(button.getDataContext());
@@ -149,7 +154,8 @@ public class StaticPseudoFunctionalStyleMethodOptions {
((DefaultListModel<PipelineElement>)list.getModel()).addElement(newElement);
}
}
}).setRemoveAction(new AnActionButtonRunnable() {
})
.setRemoveAction(new AnActionButtonRunnable() {
@Override
public void run(AnActionButton button) {
final int[] indices = list.getSelectedIndices();
@@ -160,7 +166,8 @@ public class StaticPseudoFunctionalStyleMethodOptions {
myElements.removeAll(toRemove);
ListUtil.removeSelectedItems(list);
}
}).createPanel();
})
.createPanel();
}
public static class PipelineElement {
@@ -1252,6 +1252,7 @@ inspection.functional.expression.can.be.folded.display.name=Functional expressio
inspection.trivial.functional.expression.usage.display.name=Trivial usage of functional expression
inspection.magic.constant.display.name=Magic Constant
inspection.static.pseudo.functional.style.method.display.name=Pseudo functional expression using static class
inspection.static.pseudo.functional.style.table.label=Static method calls translated to the 'Stream' API:
inspection.overwritten.key.display.name=Overwritten Map, Set, or array element
inspection.collection.add.all.can.be.replaced.with.constructor.display.name=Redundant 'Collection.addAll()' call
inspection.manual.min.max.calculation.display.name=Manual min/max calculation
@@ -1561,7 +1562,8 @@ code.vision.overrides.hint={0, choice, 1#1 override|2#{0,number} overrides}
hint.text.tostring.method.could.not.be.created.from.template=''toString()'' method could not be created from template ''{0}''
hint.text.tostring.template.invalid=toString() template ''{0}'' is invalid
command.name.generate.tostring=Generate toString()
column.name.ignore.suppressions=Ignore suppressions
column.name.ignore.suppressions=Ignore Suppressions
ignored.suppressions=Ignored suppressions:
hint.text.removed.imports=Removed {0} {1, choice, 0#import|1#imports}
hint.text.added.imports=, added {0} {1, choice, 0#import|1#imports}
hint.text.rearranged.imports=Rearranged imports
@@ -15,12 +15,16 @@
*/
package com.intellij.codeInspection.ui;
import com.intellij.openapi.actionSystem.ActionToolbarPosition;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.AnActionButton;
import com.intellij.ui.AnActionButtonRunnable;
import com.intellij.ui.TableUtil;
import com.intellij.ui.ToolbarDecorator;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UI;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
@@ -34,8 +38,22 @@ public class ListEditForm {
public ListEditForm(@NlsContexts.ColumnName String title, List<String> stringList) {
table = new ListTable(new ListWrappingTableModel(stringList, title));
contentPanel = ToolbarDecorator.createDecorator(table)
.setAddAction(new AnActionButtonRunnable() {
contentPanel = setupActions(ToolbarDecorator.createDecorator(table)).createPanel();
}
public ListEditForm(@NlsContexts.ColumnName String title, @NlsContexts.Label String label, List<String> stringList) {
table = new ListTable(new ListWrappingTableModel(stringList, title));
table.setTableHeader(null);
contentPanel = setupActions(ToolbarDecorator.createDecorator(table))
.setToolbarPosition(ActionToolbarPosition.RIGHT)
.createPanel();
contentPanel = UI.PanelFactory.panel(contentPanel).withLabel(label).moveLabelOnTop().resizeY(true).createPanel();
contentPanel.setMinimumSize(JBUI.size(150, 100));
}
private @NotNull ToolbarDecorator setupActions(@NotNull ToolbarDecorator decorator) {
return decorator.setAddAction(new AnActionButtonRunnable() {
@Override
public void run(AnActionButton button) {
final ListWrappingTableModel tableModel = table.getModel();
@@ -58,7 +76,7 @@ public class ListEditForm {
}
})
.setRemoveAction(button -> TableUtil.removeSelectedItems(table))
.disableUpDownActions().createPanel();
.disableUpDownActions();
}
public JComponent getContentPanel() {
@@ -1118,10 +1118,12 @@ parameter.name.differs.from.overridden.parameter.ignore.character.option=Ignore
parameter.name.differs.from.overridden.parameter.ignore.library.option=Ignore if overridden parameter is from a library
parameter.name.differs.from.overridden.parameter.problem.descriptor=Parameter name <code>#ref</code> is different from parameter ''{0}'' overridden #loc
questionable.name.column.title=Name
questionable.name.list.label=Reported names:
standard.variable.names.problem.descriptor=Variable named <code>#ref</code> doesn''t have type ''{0}'' #loc
standard.variable.names.problem.descriptor2=Variable named <code>#ref</code> doesn''t have type ''{0}'' or ''{1}'' #loc
standard.variable.names.ignore.override.option=Ignore for parameter names identical to super method parameters
boolean.method.name.must.start.with.question.table.column.name=Boolean Method Name Prefix
boolean.method.name.must.start.with.question.table.label=Boolean method name prefixes:
conditional.expression.with.identical.branches.collapse.quickfix=Collapse conditional expression
redundant.else.unwrap.quickfix=Remove redundant 'else'
constant.conditional.expression.problem.descriptor=<code>#ref</code> can be simplified to ''{0}'' #loc
@@ -16,6 +16,7 @@
package com.siyeh.ig.maturity;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.ui.InspectionOptionsPanel;
import com.intellij.codeInspection.ui.ListEditForm;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.project.Project;
@@ -43,10 +44,10 @@ public class SuppressionAnnotationInspection extends BaseInspection {
@Override
public JComponent createOptionsPanel() {
final ListEditForm form = new ListEditForm(JavaBundle.message("column.name.ignore.suppressions"), myAllowedSuppressions);
final JComponent panel = form.getContentPanel();
panel.setPreferredSize(JBUI.size(150, 100));
return panel;
final ListEditForm form = new ListEditForm(JavaBundle.message("column.name.ignore.suppressions"), JavaBundle.message("ignored.suppressions"), myAllowedSuppressions);
final JComponent contentPanel = form.getContentPanel();
contentPanel.setMinimumSize(JBUI.size(150, 100));
return contentPanel;
}
@Override
@@ -17,13 +17,13 @@ package com.siyeh.ig.naming;
import com.intellij.codeInspection.ui.ListTable;
import com.intellij.codeInspection.ui.ListWrappingTableModel;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiType;
import com.intellij.util.ui.CheckBox;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -37,7 +37,6 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
@@ -61,34 +60,16 @@ public class BooleanMethodNameMustStartWithQuestionInspection extends BaseInspec
@Override
public JComponent createOptionsPanel() {
final JPanel panel = new JPanel(new GridBagLayout());
final var panel = new MultipleCheckboxOptionsPanel(this);
final ListTable table = new ListTable(new ListWrappingTableModel(questionList, InspectionGadgetsBundle
.message("boolean.method.name.must.start.with.question.table.column.name")));
final JPanel tablePanel = UiUtils.createAddRemovePanel(table);
final JPanel tablePanel = UiUtils.createAddRemovePanel(table, InspectionGadgetsBundle.message("boolean.method.name.must.start.with.question.table.label"), true);
panel.addGrowing(tablePanel);
final GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.fill = GridBagConstraints.BOTH;
panel.add(tablePanel, constraints);
final CheckBox checkBox1 =
new CheckBox(InspectionGadgetsBundle.message("ignore.methods.with.boolean.return.type.option"), this, "ignoreBooleanMethods");
constraints.gridy = 1;
constraints.weighty = 0.0;
panel.add(checkBox1, constraints);
final CheckBox checkBox2 =
new CheckBox(InspectionGadgetsBundle.message("ignore.boolean.methods.in.an.interface.option"), this, "ignoreInAnnotationInterface");
constraints.gridy = 2;
panel.add(checkBox2, constraints);
final CheckBox checkBox3 =
new CheckBox(InspectionGadgetsBundle.message("ignore.methods.overriding.super.method"), this, "onlyWarnOnBaseMethods");
constraints.gridy = 3;
panel.add(checkBox3, constraints);
panel.addCheckbox(InspectionGadgetsBundle.message("ignore.methods.with.boolean.return.type.option"), "ignoreBooleanMethods");
panel.addCheckbox(InspectionGadgetsBundle.message("ignore.boolean.methods.in.an.interface.option"), "ignoreInAnnotationInterface");
panel.addCheckbox(InspectionGadgetsBundle.message("ignore.methods.overriding.super.method"), "onlyWarnOnBaseMethods");
return panel;
}
@@ -17,14 +17,13 @@ package com.siyeh.ig.naming;
import com.intellij.codeInspection.ui.ListTable;
import com.intellij.codeInspection.ui.ListWrappingTableModel;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiType;
import com.intellij.util.ui.CheckBox;
import com.intellij.util.ui.FormBuilder;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -39,7 +38,6 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
@@ -60,18 +58,15 @@ public class NonBooleanMethodNameMayNotStartWithQuestionInspection extends
@Override
public JComponent createOptionsPanel() {
final JPanel panel = new JPanel(new BorderLayout());
final var panel = new MultipleCheckboxOptionsPanel(this);
final ListTable table = new ListTable(new ListWrappingTableModel(questionList, InspectionGadgetsBundle
.message("boolean.method.name.must.start.with.question.table.column.name")));
final JPanel tablePanel = UiUtils.createAddRemovePanel(table);
final JPanel tablePanel = UiUtils.createAddRemovePanel(table, InspectionGadgetsBundle.message("boolean.method.name.must.start.with.question.table.label"), true);
panel.addGrowing(tablePanel);
final CheckBox checkBox1 =
new CheckBox(InspectionGadgetsBundle.message("ignore.methods.with.boolean.return.type.option"), this, "ignoreBooleanMethods");
final CheckBox checkBox2 =
new CheckBox(InspectionGadgetsBundle.message("ignore.methods.overriding.super.method"), this, "onlyWarnOnBaseMethods");
panel.add(tablePanel, BorderLayout.CENTER);
panel.add(FormBuilder.createFormBuilder().addComponent(checkBox1).addComponent(checkBox2).getPanel(), BorderLayout.SOUTH);
panel.addCheckbox(InspectionGadgetsBundle.message("ignore.methods.with.boolean.return.type.option"), "ignoreBooleanMethods");
panel.addCheckbox(InspectionGadgetsBundle.message("ignore.methods.overriding.super.method"), "onlyWarnOnBaseMethods");
return panel;
}
@@ -58,7 +58,7 @@ public class QuestionableNameInspection extends BaseInspection {
public JComponent createOptionsPanel() {
final ListTable table =
new ListTable(new ListWrappingTableModel(nameList, InspectionGadgetsBundle.message("questionable.name.column.title")));
return UiUtils.createAddRemovePanel(table);
return UiUtils.createAddRemovePanel(table, InspectionGadgetsBundle.message("questionable.name.list.label"), true);
}
@Override
@@ -1151,7 +1151,8 @@ python.execute.cell.in.console=Execute Cell in Console
python.template.select.file.type=Select File Type
python.execution.is.still.running=Previous execution is still running
INSP.settings.pep8.ignore.errors=Ignore errors
INSP.settings.pep8.ignore.errors=Ignore Errors
INSP.settings.pep8.ignore.errors.label=Ignored errors:
INSP.settings.bdd.behave.specific=BDD Behave-specific inspection
INSP.settings.bdd.step.definition.arguments=BDD step definition arguments inspection
python.compatibility.inspection.advertiser.notifications.group.title=Python compatibility inspection advertiser
@@ -458,6 +458,7 @@ INSP.pep8.ignore.base.class=Ignore Base Class
INSP.pep8.ignore.method.names.for.descendants.of.class=Ignore method names for descendants of class
INSP.stub.packages.compatibility.ignore=Ignore ''{0}'' compatibility
INSP.stub.packages.compatibility.ignored.packages=Ignored stub packages
INSP.stub.packages.compatibility.ignored.packages.label=Ignored stub packages:
INSP.stub.packages.compatibility.incompatible.packages.message=''{0}{1}{2}'' is incompatible with ''{3}{4}{5}''. Expected ''{6}'' version: [{7}]
INSP.arguments.not.declared.but.provided.by.decorator=Following arguments are not declared but provided by decorator: {0}
INSP.pep8.coding.style.violation=PEP 8 coding style violation
@@ -721,6 +722,7 @@ INSP.decorators.method.only.decorator.on.method.outside.class=Decorator {0} on a
# PyPackageRequirementsInspection
INSP.NAME.requirements=Package requirements
INSP.requirements.column.name.ignore.packages=Ignore Packages
INSP.requirements.ignore.packages.label=Ignored packages:
INSP.requirements.package.requirements.not.satisfied=Package {1,choice,1#requirement|2#requirements} {0} {1,choice,1#is|2#are} not satisfied
INSP.requirements.package.containing.module.not.listed.in.project.requirements=Package containing module ''{0}'' is not listed in the project requirements
QFIX.NAME.install.requirements=Install {0,choice,1#requirement|2#requirements}
@@ -826,6 +828,7 @@ INSP.unresolved.refs.class.object.has.no.attribute=''{0}'' object has no attribu
INSP.unresolved.refs.import.resolves.to.its.containing.file=Import resolves to its containing file
INSP.unresolved.refs.class.does.not.define.operator=Class ''{0}'' does not define ''{1}'', so the ''{2}'' operator cannot be used on its instances
INSP.unresolved.refs.column.name.ignore.references=Ignore References
INSP.unresolved.refs.ignore.references.label=Ignored references:
unresolved.docstring.param.reference=Function ''{0}'' does not have a parameter ''{1}''
unresolved.import.reference=No module named ''{0}''
@@ -968,6 +971,7 @@ INSP.protocol.element.type.incompatible.with.protocol=Type of ''{0}'' is incompa
INSP.NAME.shadowing.builtins=Shadowing built-ins
INSP.shadowing.builtins.shadows.built.in.name=Shadows built-in name ''{0}''
INSP.shadowing.builtins.column.name.ignore.built.ins=Ignore Built-Ins
INSP.shadowing.builtins.ignore.built.ins.label=Ignored built-ins:
QFIX.NAME.ignore.shadowed.built.in.name=Ignore shadowed built-in name
QFIX.ignore.shadowed.built.in.name=Ignore shadowed built-in name "{0}"
@@ -113,6 +113,10 @@ public class PythonUiService {
return null;
}
public JComponent createListEditForm(@ColumnName String title, @NlsContexts.Label String label, List<String> stringList) {
return null;
}
public JComponent onePixelSplitter(boolean b, JComponent first, JComponent second) {
return null;
}
@@ -62,7 +62,7 @@ public class PyShadowingBuiltinsInspection extends PyInspection {
@Override
public JComponent createOptionsPanel() {
return PythonUiService.getInstance().createListEditForm(PyPsiBundle.message("INSP.shadowing.builtins.column.name.ignore.built.ins"), ignoredNames);
return PythonUiService.getInstance().createListEditForm(PyPsiBundle.message("INSP.shadowing.builtins.column.name.ignore.built.ins"), PyPsiBundle.message("INSP.shadowing.builtins.ignore.built.ins.label"), ignoredNames);
}
@NotNull
@@ -3,6 +3,7 @@ python.rest.specify.output.directory.name=Please specify an output directory nam
python.rest.no.sdk.specified=No sdk specified
python.rest.specify.input.file.name=Please specify an input file name.
python.rest.inspections.role.ignore.roles=Ignore Roles
python.rest.inspections.role.ignore.roles.label=Ignored roles:
python.rest.inspection.message.not.defined.role=Not defined role ''{0}''
python.rest.docutils.run.cfg.default.name=Docutils Task in {0}
python.rest.sphinx.run.cfg.default.name=Sphinx Task in {0}
@@ -145,7 +145,7 @@ public class RestRoleInspection extends RestInspection {
@Override
public JComponent createOptionsPanel() {
ListEditForm form = new ListEditForm(PythonRestBundle.message("python.rest.inspections.role.ignore.roles"), ignoredRoles);
ListEditForm form = new ListEditForm(PythonRestBundle.message("python.rest.inspections.role.ignore.roles"), PythonRestBundle.message("python.rest.inspections.role.ignore.roles.label"), ignoredRoles);
return form.getContentPanel();
}
}
@@ -250,6 +250,12 @@ public final class PythonUiServiceImpl extends PythonUiService {
return form.getContentPanel();
}
@Override
public JComponent createListEditForm(@NlsContexts.ColumnName String title, @NlsContexts.Label String label, List<String> stringList) {
final ListEditForm form = new ListEditForm(title, label, stringList);
return form.getContentPanel();
}
@Override
@NotNull
public JComponent createComboBoxWithLabel(@NotNull @NlsContexts.Label String label,
@@ -59,6 +59,7 @@ private class PyStubPackagesAdvertiser : PyInspection() {
var ignoredPackages: MutableList<String> = mutableListOf()
override fun createOptionsPanel(): JComponent = ListEditForm(PyPsiBundle.message("INSP.stub.packages.compatibility.ignored.packages"),
PyPsiBundle.message("INSP.stub.packages.compatibility.ignored.packages.label"),
ignoredPackages).contentPanel
override fun buildVisitor(holder: ProblemsHolder,
@@ -52,6 +52,7 @@ class PyStubPackagesCompatibilityInspection : PyInspection() {
var ignoredStubPackages: MutableList<String> = mutableListOf()
override fun createOptionsPanel(): JComponent = ListEditForm(PyPsiBundle.message("INSP.stub.packages.compatibility.ignored.packages"),
PyPsiBundle.message("INSP.stub.packages.compatibility.ignored.packages.label"),
ignoredStubPackages).contentPanel
override fun buildVisitor(holder: ProblemsHolder,
@@ -63,7 +63,7 @@ public class PyPackageRequirementsInspection extends PyInspection {
@Override
public JComponent createOptionsPanel() {
final ListEditForm form = new ListEditForm(PyPsiBundle.message("INSP.requirements.column.name.ignore.packages"), ignoredPackages);
final ListEditForm form = new ListEditForm(PyPsiBundle.message("INSP.requirements.column.name.ignore.packages"), PyPsiBundle.message("INSP.requirements.ignore.packages.label"), ignoredPackages);
return form.getContentPanel();
}
@@ -36,7 +36,7 @@ public class PyPep8Inspection extends PyInspection implements ExternalAnnotatorB
@Override
public JComponent createOptionsPanel() {
ListEditForm form = new ListEditForm(PyBundle.message("INSP.settings.pep8.ignore.errors"), ignoredErrors);
ListEditForm form = new ListEditForm(PyBundle.message("INSP.settings.pep8.ignore.errors"), PyBundle.message("INSP.settings.pep8.ignore.errors.label"), ignoredErrors);
return form.getContentPanel();
}
@@ -69,6 +69,7 @@ public class PyUnresolvedReferencesInspection extends PyUnresolvedReferencesInsp
@Override
public JComponent createOptionsPanel() {
final ListEditForm form = new ListEditForm(PyPsiBundle.message("INSP.unresolved.refs.column.name.ignore.references"),
PyPsiBundle.message("INSP.unresolved.refs.ignore.references.label"),
ignoredIdentifiers);
return form.getContentPanel();
}