From 264f23ffdfc98ae5ee817c5f1e8979d69f701d9c Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 28 Sep 2017 16:57:48 +0200 Subject: [PATCH] naming conventions: provide equals/hashcode for custom beans --- .../naming/NamingConventionBean.java | 2 ++ .../NamingConventionWithFallbackBean.java | 21 +++++++++++++++++-- .../ig/naming/ConstantNamingConvention.java | 17 +++++++++++++++ .../StaticVariableNamingConvention.java | 17 +++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionBean.java b/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionBean.java index 811b9385d696..9cb9404efa63 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionBean.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionBean.java @@ -15,6 +15,8 @@ import java.util.regex.Pattern; /** * @see NamingConventionWithFallbackBean for default fallbacks + * + * When beans have custom fields, ensure to provide {@link #equals(Object)}/{@link #hashCode()} for correct serialization */ public class NamingConventionBean { public String m_regex; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionWithFallbackBean.java b/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionWithFallbackBean.java index ff86d62136ed..a7b919215327 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionWithFallbackBean.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/naming/NamingConventionWithFallbackBean.java @@ -3,13 +3,12 @@ // found in the LICENSE file. package com.intellij.codeInspection.naming; -import com.intellij.psi.PsiNameIdentifierOwner; import com.intellij.util.ui.UIUtil; import javax.swing.*; import java.awt.*; -public class NamingConventionWithFallbackBean extends NamingConventionBean { +public class NamingConventionWithFallbackBean extends NamingConventionBean { public boolean inheritDefaultSettings = false; public NamingConventionWithFallbackBean(String regex, int minLength, int maxLength, String... predefinedNames) { @@ -20,6 +19,24 @@ public class NamingConventionWithFallbackBean return inheritDefaultSettings; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NamingConventionWithFallbackBean)) return false; + if (!super.equals(o)) return false; + + NamingConventionWithFallbackBean bean = (NamingConventionWithFallbackBean)o; + + if (inheritDefaultSettings != bean.inheritDefaultSettings) return false; + + return true; + } + + @Override + public int hashCode() { + return 31 * super.hashCode() + (inheritDefaultSettings ? 1 : 0); + } + @Override public JComponent createOptionsPanel() { JPanel panel = new JPanel(new BorderLayout()); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/ConstantNamingConvention.java b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/ConstantNamingConvention.java index fae9731899e3..f2271557c588 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/ConstantNamingConvention.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/ConstantNamingConvention.java @@ -84,5 +84,22 @@ public class ConstantNamingConvention extends NamingConvention { return panel; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ConstantNamingConventionBean)) return false; + if (!super.equals(o)) return false; + + ConstantNamingConventionBean bean = (ConstantNamingConventionBean)o; + + if (onlyCheckImmutables != bean.onlyCheckImmutables) return false; + + return true; + } + + @Override + public int hashCode() { + return 31 * super.hashCode() + (onlyCheckImmutables ? 1 : 0); + } } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/StaticVariableNamingConvention.java b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/StaticVariableNamingConvention.java index ca7870f82a2e..30b517b64e6f 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/StaticVariableNamingConvention.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/StaticVariableNamingConvention.java @@ -86,5 +86,22 @@ public class StaticVariableNamingConvention extends NamingConvention { return panel; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ConstantNamingConventionBean)) return false; + if (!super.equals(o)) return false; + + ConstantNamingConventionBean bean = (ConstantNamingConventionBean)o; + + if (checkMutableFinals != bean.checkMutableFinals) return false; + + return true; + } + + @Override + public int hashCode() { + return 31 * super.hashCode() + (checkMutableFinals ? 1 : 0); + } } } \ No newline at end of file