mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-13 08:53:20 +00:00
ICU-12812 clean up equals()
X-SVN-Rev: 39918
This commit is contained in:
parent
f8add014b1
commit
82babe3c16
3 changed files with 131 additions and 150 deletions
|
@ -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<T> implements Iterable<T>{
|
||||
// private Map<T,Long> data;
|
||||
// @Override
|
||||
// public Iterator<T> 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<T> implements Iterable<T>{
|
||||
// private Map<T,Long> data;
|
||||
// @Override
|
||||
// public Iterator<T> 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 <T> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<String, Map<String, Map<String, LSR>>> result = maker.make();
|
||||
// Splitter bar = Splitter.on('_');
|
||||
// int last = -1;
|
||||
// Splitter bar = Splitter.on('_');
|
||||
// int last = -1;
|
||||
// set the base data
|
||||
Map<LSR,LSR> internCache = new HashMap<LSR,LSR>();
|
||||
for (Entry<String, String> sourceTarget : rawData.entrySet()) {
|
||||
|
@ -265,13 +262,13 @@ public class XLikelySubtags {
|
|||
set(result, language, script, region, languageTarget, scriptTarget, regionTarget, internCache);
|
||||
// now add aliases
|
||||
Collection<String> languageAliases = LSR.LANGUAGE_ALIASES.getAliases(language);
|
||||
// if (languageAliases.isEmpty()) {
|
||||
// languageAliases = Collections.singleton(language);
|
||||
// }
|
||||
// if (languageAliases.isEmpty()) {
|
||||
// languageAliases = Collections.singleton(language);
|
||||
// }
|
||||
Collection<String> 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, R2<List<String>, String>> aliasInfo, Multimap<String, String> canonicalToAlias) {
|
||||
// for (Entry<String, R2<List<String>, 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 void getAliasInfo(Map<String, R2<List<String>, String>> aliasInfo, Multimap<String, String> canonicalToAlias) {
|
||||
// for (Entry<String, R2<List<String>, 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<List<String>, String> aliasAndReason) {
|
||||
// if (aliasAndReason == null) {
|
||||
// return null;
|
||||
// }
|
||||
// if (aliasAndReason.get1().equals("overlong")) {
|
||||
// return null;
|
||||
// }
|
||||
// List<String> 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 static String getCanonical(R2<List<String>, String> aliasAndReason) {
|
||||
// if (aliasAndReason == null) {
|
||||
// return null;
|
||||
// }
|
||||
// if (aliasAndReason.get1().equals("overlong")) {
|
||||
// return null;
|
||||
// }
|
||||
// List<String> 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<String, Map<String, Map<String, LSR>>> langTable, final String language, final String script, final String region,
|
||||
final String languageTarget, final String scriptTarget, final String regionTarget, Map<LSR, LSR> internCache) {
|
||||
|
@ -363,10 +360,10 @@ public class XLikelySubtags {
|
|||
private void set(Map<String, Map<String, Map<String, LSR>>> langTable, final String language, final String script, final String region, LSR newValue) {
|
||||
Map<String, Map<String, LSR>> scriptTable = Maker.TREEMAP.getSubtable(langTable, language);
|
||||
Map<String, LSR> 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<String> paradigmLocales = new HashSet<String>(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<String,String> matchVariables = new HashMap<String,String>();
|
||||
for (Enumeration<String> 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<String,String> containmentResolved = TreeMultimap.create();
|
||||
fill("001", containment, containmentResolved);
|
||||
return ImmutableMultimap.copyOf(containmentResolved);
|
||||
|
@ -173,8 +173,8 @@ public class XLocaleDistance {
|
|||
static final Multimap<String,String> CONTAINER_TO_CONTAINED;
|
||||
static final Multimap<String,String> CONTAINER_TO_CONTAINED_FINAL;
|
||||
static {
|
||||
// Multimap<String, String> containerToContainedTemp = xGetContainment();
|
||||
// fill(Region.getInstance("001"), containerToContainedTemp);
|
||||
// Multimap<String, String> containerToContainedTemp = xGetContainment();
|
||||
// fill(Region.getInstance("001"), containerToContainedTemp);
|
||||
|
||||
CONTAINER_TO_CONTAINED = xGetContainment();
|
||||
Multimap<String, String> 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<String> desiredBase = new ArrayList<String>(bar.splitToList(rule[0]));
|
||||
List<String> supportedBase = new ArrayList<String>(bar.splitToList(rule[1]));
|
||||
Integer distance = 100-Integer.parseInt(rule[2]);
|
||||
|
|
Loading…
Add table
Reference in a new issue