From 82babe3c1693d06284993cd78471575dee95aa66 Mon Sep 17 00:00:00 2001 From: Mark Davis Date: Thu, 23 Mar 2017 15:16:26 +0000 Subject: [PATCH] ICU-12812 clean up equals() X-SVN-Rev: 39918 --- .../com/ibm/icu/impl/locale/XCldrStub.java | 66 ++++----- .../ibm/icu/impl/locale/XLikelySubtags.java | 135 +++++++++--------- .../ibm/icu/impl/locale/XLocaleDistance.java | 82 +++++------ 3 files changed, 132 insertions(+), 151 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XCldrStub.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XCldrStub.java index 6d22a2779dd..6320ddd1430 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XCldrStub.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XCldrStub.java @@ -111,21 +111,15 @@ public class XCldrStub { } @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof Multimap)) { - return false; - } - Multimap other = (Multimap) obj; - return map.equals(other.map); + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && map.equals(((Multimap) obj).map)); } @Override public int hashCode() { - // Not designed, return an arbitrary constant -123 for now - assert false; - return -123; + return map.hashCode(); } } @@ -228,21 +222,21 @@ public class XCldrStub { } -// public static class Counter implements Iterable{ -// private Map data; -// @Override -// public Iterator iterator() { -// return data.keySet().iterator(); -// } -// public long get(T s) { -// Long result = data.get(s); -// return result != null ? result : 0L; -// } -// public void add(T item, int count) { -// Long result = data.get(item); -// data.put(item, result == null ? count : result + count); -// } -// } + // public static class Counter implements Iterable{ + // private Map data; + // @Override + // public Iterator iterator() { + // return data.keySet().iterator(); + // } + // public long get(T s) { + // Long result = data.get(s); + // return result != null ? result : 0L; + // } + // public void add(T item, int count) { + // Long result = data.get(item); + // data.put(item, result == null ? count : result + count); + // } + // } public static String join(T[] source, String separator) { StringBuilder result = new StringBuilder(); @@ -368,23 +362,23 @@ public class XCldrStub { canonicalName = new File(relativeFileName).getCanonicalPath(); } catch (Exception e1) { throw new ICUUncheckedIOException("Couldn't open file: " + file + "; relative to class: " - + className, e); + + className, e); } throw new ICUUncheckedIOException("Couldn't open file " + file + "; in path " + canonicalName + "; relative to class: " - + className, e); + + className, e); } } public static String getRelativeFileName(Class class1, String filename) { URL resource = class1 == null ? FileUtilities.class.getResource(filename) : class1.getResource(filename); - String resourceString = resource.toString(); - if (resourceString.startsWith("file:")) { - return resourceString.substring(5); - } else if (resourceString.startsWith("jar:file:")) { - return resourceString.substring(9); - } else { - throw new ICUUncheckedIOException("File not found: " + resourceString); - } + String resourceString = resource.toString(); + if (resourceString.startsWith("file:")) { + return resourceString.substring(5); + } else if (resourceString.startsWith("jar:file:")) { + return resourceString.substring(9); + } else { + throw new ICUUncheckedIOException("File not found: " + resourceString); + } } } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java index 371b2bc24d5..22fd4d269e8 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java @@ -116,26 +116,26 @@ public class XLikelySubtags { // #1 is language // #2 is script // #3 is region -// static final String pat = -// "language_id = (unicode_language_subtag)" -// + "(?:sep(unicode_script_subtag))?" -// + "(?:sep(unicode_region_subtag))?;\n" -// + "unicode_language_subtag = alpha{2,3}|alpha{5,8};\n" -// + "unicode_script_subtag = alpha{4};\n" -// + "unicode_region_subtag = alpha{2}|digit{3};\n" -// + "sep = [-_];\n" -// + "digit = [0-9];\n" -// + "alpha = [A-Za-z];\n" -// ; -// static { -// System.out.println(pat); -// System.out.println(new UnicodeRegex().compileBnf(pat)); -// } -// static final Pattern LANGUAGE_PATTERN = Pattern.compile( -// "([a-zA-Z0-9]+)" // (?:[-_]([a-zA-Z0-9]+))?(?:[-_]([a-zA-Z0-9]+))?" -// //new UnicodeRegex().compileBnf(pat) -// ); -// + // static final String pat = + // "language_id = (unicode_language_subtag)" + // + "(?:sep(unicode_script_subtag))?" + // + "(?:sep(unicode_region_subtag))?;\n" + // + "unicode_language_subtag = alpha{2,3}|alpha{5,8};\n" + // + "unicode_script_subtag = alpha{4};\n" + // + "unicode_region_subtag = alpha{2}|digit{3};\n" + // + "sep = [-_];\n" + // + "digit = [0-9];\n" + // + "alpha = [A-Za-z];\n" + // ; + // static { + // System.out.println(pat); + // System.out.println(new UnicodeRegex().compileBnf(pat)); + // } + // static final Pattern LANGUAGE_PATTERN = Pattern.compile( + // "([a-zA-Z0-9]+)" // (?:[-_]([a-zA-Z0-9]+))?(?:[-_]([a-zA-Z0-9]+))?" + // //new UnicodeRegex().compileBnf(pat) + // ); + // // TODO: fix this to check for format. Not required, since this is only called internally, but safer for the future. static LSR from(String languageIdentifier) { String[] parts = languageIdentifier.split("[-_]"); @@ -197,16 +197,13 @@ public class XLikelySubtags { } @Override public boolean equals(Object obj) { - if (this == obj) { - return false; - } - if (!(obj instanceof LSR)) { - return false; - } - LSR other = (LSR) obj; - return language.equals(other.language) + LSR other; + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && language.equals((other = (LSR) obj).language) && script.equals(other.script) - && region.equals(other.region); + && region.equals(other.region)); } @Override public int hashCode() { @@ -247,8 +244,8 @@ public class XLikelySubtags { Maker maker = Maker.TREEMAP; Map>> result = maker.make(); -// Splitter bar = Splitter.on('_'); -// int last = -1; + // Splitter bar = Splitter.on('_'); + // int last = -1; // set the base data Map internCache = new HashMap(); for (Entry sourceTarget : rawData.entrySet()) { @@ -265,13 +262,13 @@ public class XLikelySubtags { set(result, language, script, region, languageTarget, scriptTarget, regionTarget, internCache); // now add aliases Collection languageAliases = LSR.LANGUAGE_ALIASES.getAliases(language); -// if (languageAliases.isEmpty()) { -// languageAliases = Collections.singleton(language); -// } + // if (languageAliases.isEmpty()) { + // languageAliases = Collections.singleton(language); + // } Collection regionAliases = LSR.REGION_ALIASES.getAliases(region); -// if (regionAliases.isEmpty()) { -// regionAliases = Collections.singleton(region); -// } + // if (regionAliases.isEmpty()) { + // regionAliases = Collections.singleton(region); + // } for (String languageAlias : languageAliases) { for (String regionAlias : regionAliases) { if (languageAlias.equals(language) && regionAlias.equals(region)) { @@ -320,34 +317,34 @@ public class XLikelySubtags { return result; } -// private void getAliasInfo(Map, String>> aliasInfo, Multimap canonicalToAlias) { -// for (Entry, String>> e : aliasInfo.entrySet()) { -// final String alias = e.getKey(); -// if (alias.contains("_")) { -// continue; // only do simple aliasing -// } -// String canonical = getCanonical(e.getValue()); -// canonicalToAlias.put(canonical, alias); -// } -// } - -// private static String getCanonical(R2, String> aliasAndReason) { -// if (aliasAndReason == null) { -// return null; -// } -// if (aliasAndReason.get1().equals("overlong")) { -// return null; -// } -// List value = aliasAndReason.get0(); -// if (value.size() != 1) { -// return null; -// } -// final String canonical = value.iterator().next(); -// if (canonical.contains("_")) { -// return null; // only do simple aliasing -// } -// return canonical; -// } + // private void getAliasInfo(Map, String>> aliasInfo, Multimap canonicalToAlias) { + // for (Entry, String>> e : aliasInfo.entrySet()) { + // final String alias = e.getKey(); + // if (alias.contains("_")) { + // continue; // only do simple aliasing + // } + // String canonical = getCanonical(e.getValue()); + // canonicalToAlias.put(canonical, alias); + // } + // } + + // private static String getCanonical(R2, String> aliasAndReason) { + // if (aliasAndReason == null) { + // return null; + // } + // if (aliasAndReason.get1().equals("overlong")) { + // return null; + // } + // List value = aliasAndReason.get0(); + // if (value.size() != 1) { + // return null; + // } + // final String canonical = value.iterator().next(); + // if (canonical.contains("_")) { + // return null; // only do simple aliasing + // } + // return canonical; + // } private void set(Map>> langTable, final String language, final String script, final String region, final String languageTarget, final String scriptTarget, final String regionTarget, Map internCache) { @@ -363,10 +360,10 @@ public class XLikelySubtags { private void set(Map>> langTable, final String language, final String script, final String region, LSR newValue) { Map> scriptTable = Maker.TREEMAP.getSubtable(langTable, language); Map regionTable = Maker.TREEMAP.getSubtable(scriptTable, script); -// LSR oldValue = regionTable.get(region); -// if (oldValue != null) { -// int debug = 0; -// } + // LSR oldValue = regionTable.get(region); + // if (oldValue != null) { + // int debug = 0; + // } regionTable.put(region, newValue); } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLocaleDistance.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLocaleDistance.java index 9f98b3765cc..b24d70a2b33 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLocaleDistance.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLocaleDistance.java @@ -83,7 +83,7 @@ public class XLocaleDistance { ICUResourceBundle languageMatchingInfo = suppData.findTopLevel("languageMatchingInfo"); ICUResourceBundle writtenParadigmLocales = (ICUResourceBundle) languageMatchingInfo.get("written") .get("paradigmLocales"); -// paradigmLocales{ "en", "en-GB",... } + // paradigmLocales{ "en", "en-GB",... } HashSet paradigmLocales = new HashSet(Arrays.asList(writtenParadigmLocales.getStringArray())); return Collections.unmodifiableSet(paradigmLocales); } @@ -94,7 +94,7 @@ public class XLocaleDistance { ICUResourceBundle languageMatchingInfo = suppData.findTopLevel("languageMatchingInfo"); ICUResourceBundle writtenMatchVariables = (ICUResourceBundle) languageMatchingInfo.get("written") .get("matchVariable"); -// matchVariable{ americas{"019"} cnsar{"HK+MO"} ...} + // matchVariable{ americas{"019"} cnsar{"HK+MO"} ...} HashMap matchVariables = new HashMap(); for (Enumeration enumer = writtenMatchVariables.getKeys(); enumer.hasMoreElements(); ) { @@ -140,17 +140,17 @@ public class XLocaleDistance { .putAll("QO", "AQ", "BV", "CC", "CX", "GS", "HM", "IO", "TF", "UM", "AC", "CP", "DG", "TA") ; //Can't use following, because data from CLDR is discarded -// ICUResourceBundle suppData = LocaleMatcher.getICUSupplementalData(); -// UResourceBundle territoryContainment = suppData.get("territoryContainment"); -// for (int i = 0 ; i < territoryContainment.getSize(); i++) { -// UResourceBundle mapping = territoryContainment.get(i); -// String parent = mapping.getKey(); -// for (int j = 0 ; j < mapping.getSize(); j++) { -// String child = mapping.getString(j); -// containment.put(parent,child); -// System.out.println(parent + " => " + child); -// } -// } + // ICUResourceBundle suppData = LocaleMatcher.getICUSupplementalData(); + // UResourceBundle territoryContainment = suppData.get("territoryContainment"); + // for (int i = 0 ; i < territoryContainment.getSize(); i++) { + // UResourceBundle mapping = territoryContainment.get(i); + // String parent = mapping.getKey(); + // for (int j = 0 ; j < mapping.getSize(); j++) { + // String child = mapping.getString(j); + // containment.put(parent,child); + // System.out.println(parent + " => " + child); + // } + // } TreeMultimap containmentResolved = TreeMultimap.create(); fill("001", containment, containmentResolved); return ImmutableMultimap.copyOf(containmentResolved); @@ -173,8 +173,8 @@ public class XLocaleDistance { static final Multimap CONTAINER_TO_CONTAINED; static final Multimap CONTAINER_TO_CONTAINED_FINAL; static { -// Multimap containerToContainedTemp = xGetContainment(); -// fill(Region.getInstance("001"), containerToContainedTemp); + // Multimap containerToContainedTemp = xGetContainment(); + // fill(Region.getInstance("001"), containerToContainedTemp); CONTAINER_TO_CONTAINED = xGetContainment(); Multimap containerToFinalContainedBuilder = TreeMultimap.create(); @@ -235,12 +235,10 @@ public class XLocaleDistance { @Override public boolean equals(Object obj) { - if (!(obj instanceof DistanceNode)) { - return false; - } - DistanceNode other = (DistanceNode) obj; - return distance == other.distance - && this.getClass().equals(other.getClass()); + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && distance == ((DistanceNode) obj).distance); } @Override public int hashCode() { @@ -334,14 +332,10 @@ public class XLocaleDistance { } @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof IdMakerFull)) { - return false; - } - IdMakerFull other = (IdMakerFull) obj; - return intToObject.equals(other.intToObject); + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && intToObject.equals(((IdMakerFull) obj).intToObject)); } @Override public int hashCode() { @@ -359,16 +353,13 @@ public class XLocaleDistance { @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof StringDistanceNode)) { - return false; - } - StringDistanceNode other = (StringDistanceNode) obj; - return distance == other.distance + StringDistanceNode other; + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && distance == (other = (StringDistanceNode) obj).distance && Utility.equals(distanceTable, other.distanceTable) - && super.equals(other); + && super.equals(other)); } @Override public int hashCode() { @@ -438,11 +429,10 @@ public class XLocaleDistance { @Override public boolean equals(Object obj) { - if (!(obj instanceof StringDistanceTable)) { - return false; - } - StringDistanceTable other = (StringDistanceTable) obj; - return subtables.equals(other.subtables); + return this == obj || + (obj != null + && obj.getClass() == this.getClass() + && subtables.equals(((StringDistanceTable) obj).subtables)); } @Override public int hashCode() { @@ -927,9 +917,9 @@ public class XLocaleDistance { // + "\" distance=\"" // + rule[2] // + "\"/>"); -// if (rule[0].equals("en_*_*") || rule[1].equals("*_*_*")) { -// int debug = 0; -// } + // if (rule[0].equals("en_*_*") || rule[1].equals("*_*_*")) { + // int debug = 0; + // } List desiredBase = new ArrayList(bar.splitToList(rule[0])); List supportedBase = new ArrayList(bar.splitToList(rule[1])); Integer distance = 100-Integer.parseInt(rule[2]); -- 2.40.0