Java: show template chooser even when only generating hashCode() method (IDEA-358888)

GitOrigin-RevId: ea75062115e3f0bece21921b795b7ef92058960c
This commit is contained in:
Bas Leijdekkers
2024-09-24 16:20:27 +02:00
committed by intellij-monorepo-bot
parent df62ea6d28
commit 7438be23bf
3 changed files with 50 additions and 33 deletions

View File

@@ -180,6 +180,15 @@ public class GenerateEqualsWizard extends AbstractGenerateEqualsWizard<PsiClass,
public GenerateEqualsWizard(Project project, @NotNull PsiClass aClass, boolean needEquals, boolean needHashCode) {
super(project, new JavaGenerateEqualsWizardBuilder(aClass, needEquals, needHashCode));
if (needEquals && needHashCode) {
setTitle(JavaBundle.message("generate.equals.hashcode.wizard.title"));
}
else if (needEquals) {
setTitle(JavaBundle.message("generate.equals.wizard.title"));
}
else if (needHashCode) {
setTitle(JavaBundle.message("generate.hashcode.wizard.title"));
}
}
public PsiField[] getEqualsFields() {
@@ -243,19 +252,17 @@ public class GenerateEqualsWizard extends AbstractGenerateEqualsWizard<PsiClass,
@Override
protected void addSteps() {
if (myEqualsPanel != null) {
addStep(new TemplateChooserStep(myClass, EqualsHashCodeTemplatesManager.getInstance()) {
@Override
protected void setErrorText(@NlsContexts.DialogMessage @Nullable String errorText, JComponent component) {
GenerateEqualsWizard.this.setErrorText(errorText, component);
}
addStep(new TemplateChooserStep(myClass, EqualsHashCodeTemplatesManager.getInstance(), myEqualsPanel != null) {
@Override
protected void setErrorText(@NlsContexts.DialogMessage @Nullable String errorText, JComponent component) {
GenerateEqualsWizard.this.setErrorText(errorText, component);
}
@Override
protected boolean isDisposed() {
return GenerateEqualsWizard.this.isDisposed();
}
});
}
@Override
protected boolean isDisposed() {
return GenerateEqualsWizard.this.isDisposed();
}
});
super.addSteps();
}

View File

@@ -40,9 +40,15 @@ public abstract class TemplateChooserStep extends StepAdapter {
private final JComponent myPanel;
private final ComboBox<String> myComboBox;
private final EqualsHashCodeTemplatesManagerBase myTemplatesManager;
private final boolean myShowEqualsOptions;
private @Nullable Set<String> myInvalidTemplates = null;
protected TemplateChooserStep(PsiElement contextElement, EqualsHashCodeTemplatesManagerBase templatesManager) {
this(contextElement, templatesManager, true);
}
protected TemplateChooserStep(PsiElement contextElement, EqualsHashCodeTemplatesManagerBase templatesManager, boolean showEqualsOptions) {
myShowEqualsOptions = showEqualsOptions;
myPanel = new JPanel(new VerticalFlowLayout());
final JPanel templateChooserPanel = new JPanel(new BorderLayout());
final JLabel templateChooserLabel = new JLabel(JavaBundle.message("generate.equals.hashcode.template"));
@@ -129,26 +135,28 @@ public abstract class TemplateChooserStep extends StepAdapter {
boolean useInstanceof = CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER;
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
JLabel label = new JLabel(JavaBundle.message("generate.equals.hashcode.type.comparison.label"));
label.setBorder(JBUI.Borders.emptyTop(UIUtil.LARGE_VGAP));
panel.add(label);
ContextHelpLabel contextHelp = ContextHelpLabel.create(JavaBundle.message("generate.equals.hashcode.comparison.table"));
contextHelp.setBorder(JBUI.Borders.empty(UIUtil.LARGE_VGAP, 2, 0, 0));
panel.add(contextHelp);
JRadioButton instanceofButton =
new JRadioButton(JavaBundle.message("generate.equals.hashcode.instanceof.type.comparison"), useInstanceof);
instanceofButton.setBorder(JBUI.Borders.emptyLeft(16));
JRadioButton getClassButton =
new JRadioButton(JavaBundle.message("generate.equals.hashcode.getclass.type.comparison"), !useInstanceof);
getClassButton.setBorder(JBUI.Borders.emptyLeft(16));
ButtonGroup group = new ButtonGroup();
group.add(instanceofButton);
group.add(getClassButton);
instanceofButton.addActionListener(e -> CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER = true);
getClassButton.addActionListener(e -> CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER = false);
stepPanel.add(panel);
stepPanel.add(instanceofButton);
stepPanel.add(getClassButton);
if (myShowEqualsOptions) {
JLabel label = new JLabel(JavaBundle.message("generate.equals.hashcode.type.comparison.label"));
label.setBorder(JBUI.Borders.emptyTop(UIUtil.LARGE_VGAP));
panel.add(label);
ContextHelpLabel contextHelp = ContextHelpLabel.create(JavaBundle.message("generate.equals.hashcode.comparison.table"));
contextHelp.setBorder(JBUI.Borders.empty(UIUtil.LARGE_VGAP, 2, 0, 0));
panel.add(contextHelp);
JRadioButton instanceofButton =
new JRadioButton(JavaBundle.message("generate.equals.hashcode.instanceof.type.comparison"), useInstanceof);
instanceofButton.setBorder(JBUI.Borders.emptyLeft(16));
JRadioButton getClassButton =
new JRadioButton(JavaBundle.message("generate.equals.hashcode.getclass.type.comparison"), !useInstanceof);
getClassButton.setBorder(JBUI.Borders.emptyLeft(16));
ButtonGroup group = new ButtonGroup();
group.add(instanceofButton);
group.add(getClassButton);
instanceofButton.addActionListener(e -> CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER = true);
getClassButton.addActionListener(e -> CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER = false);
stepPanel.add(panel);
stepPanel.add(instanceofButton);
stepPanel.add(getClassButton);
}
final JCheckBox gettersCheckbox = createUseGettersInsteadOfFieldsCheckbox();
if (gettersCheckbox != null) {

View File

@@ -294,8 +294,10 @@ generate.equals.hashcode.internal.error=Internal error
generate.equals.hashcode.non.null.fields.chooser.title=Select all non-null &fields
generate.equals.hashcode.template=&Template:
generate.equals.hashcode.use.getters=Use &getters when available
generate.equals.hashcode.warning.hashcode.for.arrays.is.not.supported=hashCode () for arrays is not supported
generate.equals.hashcode.warning.hashcode.for.arrays.is.not.supported=hashCode() for arrays is not supported
generate.equals.hashcode.wizard.title=Generate equals() and hashCode()
generate.equals.wizard.title=Generate equals()
generate.hashcode.wizard.title=Generate hashCode()
generate.equals.template.title=Equals Template:
generate.equals.warning.equals.for.nested.arrays.not.supported=equals() for nested arrays is not supported
generate.equals.warning.generated.equals.could.be.incorrect=Generated equals() for Object[] can be incorrect