From c0001a269329f96a3055b0600934423d54b0231d Mon Sep 17 00:00:00 2001
From: Tom Bishop
Date: Wed, 20 Nov 2024 15:12:50 -0500
Subject: [PATCH] CLDR-7428 Freeze collators; new class CollatorHelper (#4207)
---
.../unicode/cldr/unittest/web/TestAll.java | 69 -------------------
.../java/org/unicode/cldr/draft/Misc.java | 7 +-
.../org/unicode/cldr/icu/ExtractICUData.java | 12 +---
.../org/unicode/cldr/icu/LDMLComparator.java | 9 +--
.../org/unicode/cldr/tool/CLDRModify.java | 4 +-
.../org/unicode/cldr/tool/ChartCollation.java | 2 -
.../cldr/tool/ChartLanguageGroups.java | 8 +--
.../unicode/cldr/tool/CheckAnnotations.java | 6 +-
.../org/unicode/cldr/tool/CompareData.java | 9 ---
.../org/unicode/cldr/tool/CompareEmoji.java | 9 +--
.../cldr/tool/ConvertLanguageData.java | 10 +--
.../org/unicode/cldr/tool/CountItems.java | 8 +--
.../unicode/cldr/tool/ExtractMessages.java | 3 +-
.../cldr/tool/FormattedFileWriter.java | 5 +-
.../unicode/cldr/tool/GenerateComparison.java | 3 +-
.../cldr/tool/GenerateSidewaysView.java | 18 ++---
.../unicode/cldr/tool/GenerateStatistics.java | 5 +-
.../cldr/tool/GenerateTransformCharts.java | 12 ++--
.../unicode/cldr/tool/MakeTransliterator.java | 3 +-
.../main/java/org/unicode/cldr/tool/Misc.java | 4 +-
.../java/org/unicode/cldr/tool/ShowData.java | 9 ---
.../org/unicode/cldr/tool/TablePrinter.java | 3 +-
.../org/unicode/cldr/util/CLDRConfig.java | 35 +---------
.../unicode/cldr/util/CollationMapMaker.java | 3 +-
.../org/unicode/cldr/util/CollatorHelper.java | 67 ++++++++++++++++++
.../java/org/unicode/cldr/util/DtdData.java | 2 +-
.../java/org/unicode/cldr/util/Emoji.java | 2 +-
.../org/unicode/cldr/util/MapComparator.java | 19 +----
.../cldr/util/ReferenceStringSearch.java | 3 +-
.../cldr/util/SimpleUnicodeSetFormatter.java | 2 +-
.../org/unicode/cldr/util/TestUtilities.java | 7 +-
.../cldr/util/UnicodeSetPrettyPrinter.java | 8 +--
.../cldr/util/VerifyCompactNumbers.java | 2 +-
.../org/unicode/cldr/util/VerifyZones.java | 2 +-
.../org/unicode/cldr/util/VettingViewer.java | 2 +-
.../org/unicode/cldr/util/VoteResolver.java | 5 +-
.../TestCollationStringByteConverter.java | 6 +-
.../org/unicode/cldr/unittest/TestHelper.java | 6 +-
.../unittest/TestReferenceStringSearch.java | 10 +--
39 files changed, 138 insertions(+), 261 deletions(-)
create mode 100644 tools/cldr-code/src/main/java/org/unicode/cldr/util/CollatorHelper.java
diff --git a/tools/cldr-apps/src/test/java/org/unicode/cldr/unittest/web/TestAll.java b/tools/cldr-apps/src/test/java/org/unicode/cldr/unittest/web/TestAll.java
index f2c65735bb4..5fdaea6cbb8 100644
--- a/tools/cldr-apps/src/test/java/org/unicode/cldr/unittest/web/TestAll.java
+++ b/tools/cldr-apps/src/test/java/org/unicode/cldr/unittest/web/TestAll.java
@@ -7,8 +7,6 @@
import com.ibm.icu.dev.test.TestFmwk.TestGroup;
import com.ibm.icu.dev.test.TestLog;
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.RuleBasedCollator;
import java.io.File;
import java.io.PrintWriter;
import java.sql.SQLException;
@@ -16,12 +14,8 @@
import org.unicode.cldr.test.CheckCLDR;
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRConfig.Environment;
-import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.StandardCodes;
-import org.unicode.cldr.util.SupplementalDataInfo;
import org.unicode.cldr.web.CLDRProgressIndicator;
import org.unicode.cldr.web.DBUtils;
import org.unicode.cldr.web.SurveyLog;
@@ -128,13 +122,6 @@ public TestAll() {
public static class WebTestInfo {
private static WebTestInfo INSTANCE = null;
- private SupplementalDataInfo supplementalDataInfo;
- private StandardCodes sc;
- private Factory cldrFactory;
- private CLDRFile english;
- private CLDRFile root;
- private RuleBasedCollator col;
-
public static WebTestInfo getInstance() {
synchronized (WebTestInfo.class) {
if (INSTANCE == null) {
@@ -145,62 +132,6 @@ public static WebTestInfo getInstance() {
}
private WebTestInfo() {}
-
- public SupplementalDataInfo getSupplementalDataInfo() {
- synchronized (this) {
- if (supplementalDataInfo == null) {
- supplementalDataInfo =
- SupplementalDataInfo.getInstance(CLDRPaths.SUPPLEMENTAL_DIRECTORY);
- }
- }
- return supplementalDataInfo;
- }
-
- public StandardCodes getStandardCodes() {
- synchronized (this) {
- if (sc == null) {
- sc = StandardCodes.make();
- }
- }
- return sc;
- }
-
- public Factory getCldrFactory() {
- synchronized (this) {
- if (cldrFactory == null) {
- cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
- }
- }
- return cldrFactory;
- }
-
- public CLDRFile getEnglish() {
- synchronized (this) {
- if (english == null) {
- english = getCldrFactory().make("en", true);
- }
- }
- return english;
- }
-
- public CLDRFile getRoot() {
- synchronized (this) {
- if (root == null) {
- root = getCldrFactory().make("root", true);
- }
- }
- return root;
- }
-
- public Collator getCollator() {
- synchronized (this) {
- if (col == null) {
- col = (RuleBasedCollator) Collator.getInstance();
- col.setNumericCollation(true);
- }
- }
- return col;
- }
}
static boolean dbSetup = false;
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/draft/Misc.java b/tools/cldr-code/src/main/java/org/unicode/cldr/draft/Misc.java
index 04f964c8ee0..208b904941e 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/draft/Misc.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/draft/Misc.java
@@ -36,6 +36,7 @@
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRFile.WinningChoice;
import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.LanguageTagParser;
import org.unicode.cldr.util.LocaleIDParser;
@@ -143,7 +144,9 @@ private static void showDefaultContent(String... strings) {
private static void showSortKey() {
String[] tests = "a ä A ぁ あ ァ ァ ア ア ㋐".split(" ");
- RuleBasedCollator c = (RuleBasedCollator) Collator.getInstance(ULocale.ENGLISH);
+ // TODO: freeze the Collator; problematic since changed in innermost for loop below
+ // Reference: https://unicode-org.atlassian.net/browse/CLDR-7428
+ RuleBasedCollator c = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
c.setStrength(RuleBasedCollator.QUATERNARY);
c.setCaseLevel(true);
c.setHiraganaQuaternary(true);
@@ -319,7 +322,7 @@ private static void showExemplarSize() {
String[] locales =
"en ru nl en-GB fr de it pl pt-BR es tr th ja zh-CN zh-TW ko ar bg sr uk ca hr cs da fil fi hu id lv lt no pt-PT ro sk sl es-419 sv vi el iw fa hi am af et is ms sw zu bn mr ta eu fr-CA gl zh-HK ur gu kn ml te"
.split(" ");
- Set nameAndInfo = new TreeSet<>(info.getCollator());
+ Set nameAndInfo = new TreeSet<>(CollatorHelper.EMOJI_COLLATOR);
for (String localeCode : locales) {
String baseLanguage = ltp.set(localeCode).getLanguage();
R2, String> temp = lang2replacement.get(baseLanguage);
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/icu/ExtractICUData.java b/tools/cldr-code/src/main/java/org/unicode/cldr/icu/ExtractICUData.java
index d436c0bc965..f9ee6673215 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/icu/ExtractICUData.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/icu/ExtractICUData.java
@@ -12,9 +12,7 @@
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.lang.UProperty;
import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.RuleBasedCollator;
import com.ibm.icu.text.Transliterator;
-import com.ibm.icu.util.ULocale;
import com.ibm.icu.util.UResourceBundle;
import java.io.BufferedReader;
import java.io.File;
@@ -35,6 +33,7 @@
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.PathUtilities;
import org.unicode.cldr.util.PatternCache;
import org.unicode.cldr.util.SimpleFactory;
@@ -411,8 +410,7 @@ static void testProps() {
{UProperty.DOUBLE_START, UProperty.DOUBLE_START},
{UProperty.STRING_START, UProperty.STRING_LIMIT},
};
- Collator col = Collator.getInstance(ULocale.ROOT);
- ((RuleBasedCollator) col).setNumericCollation(true);
+ Collator col = CollatorHelper.ROOT_NUMERIC;
Map> alpha = new TreeMap<>(col);
for (int range = 0; range < ranges.length; ++range) {
@@ -465,12 +463,6 @@ static void testProps() {
}
out.println("");
}
- Collator c = Collator.getInstance(ULocale.ENGLISH);
- ((RuleBasedCollator) c).setNumericCollation(true);
-
- // int enumValue = UCharacter.getIntPropertyValue(codePoint, propEnum);
- // return UCharacter.getPropertyValueName(propEnum,enumValue, (int)nameChoice);
-
}
private static String getName(int index, String valueName, String shortValueName) {
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/icu/LDMLComparator.java b/tools/cldr-code/src/main/java/org/unicode/cldr/icu/LDMLComparator.java
index 4bb2b6d1e10..c8acf50117c 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/icu/LDMLComparator.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/icu/LDMLComparator.java
@@ -13,7 +13,6 @@
import com.ibm.icu.text.Collator;
import com.ibm.icu.text.DecimalFormat;
import com.ibm.icu.text.Normalizer;
-import com.ibm.icu.text.RuleBasedCollator;
import com.ibm.icu.util.ULocale;
import java.io.File;
import java.io.FileOutputStream;
@@ -28,6 +27,7 @@
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.LDMLUtilities;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
@@ -114,12 +114,7 @@ public static void main(String[] args) {
}
static Collator getDefaultCollation() {
- // if (DEFAULT_COLLATION != null) return DEFAULT_COLLATION;
- RuleBasedCollator temp = (RuleBasedCollator) Collator.getInstance(ULocale.ENGLISH);
- temp.setStrength(Collator.IDENTICAL);
- temp.setNumericCollation(true);
- // DEFAULT_COLLATION = temp;
- return temp;
+ return CollatorHelper.ROOT_NUMERIC_IDENTICAL;
}
Hashtable optionTable = new Hashtable<>();
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CLDRModify.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CLDRModify.java
index a76bfbc9c87..c3f7317d03b 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CLDRModify.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CLDRModify.java
@@ -55,6 +55,7 @@
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CLDRTool;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.DateTimeCanonicalizer;
import org.unicode.cldr.util.DateTimeCanonicalizer.DateTimePatternType;
import org.unicode.cldr.util.DowngradePaths;
@@ -3309,8 +3310,7 @@ private static int stepsFromRoot(String origLoc) {
/** Internal */
public static void testJavaSemantics() {
- Collator caseInsensitive = Collator.getInstance(ULocale.ROOT);
- caseInsensitive.setStrength(Collator.SECONDARY);
+ Collator caseInsensitive = CollatorHelper.ROOT_SECONDARY;
Set setWithCaseInsensitive = new TreeSet<>(caseInsensitive);
setWithCaseInsensitive.addAll(Arrays.asList(new String[] {"a", "b", "c"}));
Set plainSet = new TreeSet<>();
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartCollation.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartCollation.java
index b97bf06d9fc..425cf126feb 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartCollation.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartCollation.java
@@ -258,8 +258,6 @@ private void addCollator(Map data, String type, RuleBasedCollator
dataItem.collator = col;
}
- // RuleBasedCollator ROOT = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
-
private class Subchart extends Chart {
private static final String HIGH_COLLATION_PRIMARY = "\uFFFF";
String title;
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartLanguageGroups.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartLanguageGroups.java
index 086dbaebe6c..a7d4d8e5ff2 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartLanguageGroups.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartLanguageGroups.java
@@ -3,8 +3,6 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.Multimap;
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.util.ULocale;
import java.io.IOException;
import java.util.Collection;
import java.util.Comparator;
@@ -76,8 +74,6 @@ public String getExplanation() {
+ "The data doesn't completely match wikipedia’s; there are some patches for CLDR languages.
\n";
}
- Collator ENGLISH_ORDER = Collator.getInstance(ULocale.ENGLISH);
-
@Override
public void writeContents(FormattedFileWriter pw) throws IOException {
@@ -112,7 +108,9 @@ private void show(Multimap lg, String parent, TablePrinter table
new Comparator>() {
@Override
public int compare(Pair o1, Pair o2) {
- int diff = ENGLISH_ORDER.compare(o1.getFirst(), o2.getFirst());
+ int diff =
+ CollatorHelper.ROOT_COLLATOR.compare(
+ o1.getFirst(), o2.getFirst());
if (diff != 0) {
return diff;
}
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CheckAnnotations.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CheckAnnotations.java
index 16e640dcbdd..cdb25c9ea4e 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CheckAnnotations.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CheckAnnotations.java
@@ -4,14 +4,12 @@
import java.util.TreeSet;
import org.unicode.cldr.util.Annotations;
import org.unicode.cldr.util.Annotations.AnnotationSet;
-import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.CollatorHelper;
public class CheckAnnotations {
public static void main(String[] args) {
AnnotationSet data = Annotations.getDataSet("en");
- CLDRConfig config = CLDRConfig.getInstance();
- // UnicodeMap data2 = Annotations.getData("de");
- Set sorted = new TreeSet<>(config.getCollator());
+ Set sorted = new TreeSet<>(CollatorHelper.EMOJI_COLLATOR);
int i = 0;
boolean needMore = true;
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareData.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareData.java
index a911228360d..a170825defd 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareData.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareData.java
@@ -1,9 +1,6 @@
package org.unicode.cldr.tool;
import com.ibm.icu.dev.util.UOption;
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.RuleBasedCollator;
-import com.ibm.icu.util.ULocale;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -30,12 +27,6 @@ public class CompareData {
String[] directoryList = {"main", "collation", "segmentations"};
- static RuleBasedCollator uca = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
-
- {
- uca.setNumericCollation(true);
- }
-
static PrettyPath prettyPathMaker = new PrettyPath();
static CLDRFile english;
static Set locales;
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareEmoji.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareEmoji.java
index ab807fd4067..3e5693f9398 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareEmoji.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CompareEmoji.java
@@ -4,7 +4,6 @@
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
-import com.ibm.icu.text.Collator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -16,6 +15,7 @@
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.Emoji;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.SimpleFactory;
@@ -29,11 +29,12 @@ public class CompareEmoji {
static final Factory FACTORY_DERIVED = SimpleFactory.make(paths, ".*");
private static final Joiner BAR_JOINER = Joiner.on(" | ");
- private static final Collator collator = CLDRConfig.getInstance().getCollator();
+
private static final String base =
"/Users/markdavis/github/private/DATA/cldr-private/emoji_diff/";
private static final Set sorted =
- ImmutableSet.copyOf(Emoji.getAllRgi().addAllTo(new TreeSet<>(collator)));
+ ImmutableSet.copyOf(
+ Emoji.getAllRgi().addAllTo(new TreeSet<>(CollatorHelper.EMOJI_COLLATOR)));
enum Status {
regular,
@@ -155,7 +156,7 @@ public static Map> loadItems(
continue;
}
String key = split[0];
- Set values = new TreeSet<>(collator);
+ Set values = new TreeSet<>(CollatorHelper.EMOJI_COLLATOR);
for (int i = 1; i < split.length; ++i) {
values.add(split[i]);
}
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ConvertLanguageData.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ConvertLanguageData.java
index 63607e5be21..08e61d4f566 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ConvertLanguageData.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ConvertLanguageData.java
@@ -6,9 +6,7 @@
import com.ibm.icu.impl.Relation;
import com.ibm.icu.impl.Row;
import com.ibm.icu.impl.Row.R2;
-import com.ibm.icu.text.Collator;
import com.ibm.icu.text.NumberFormat;
-import com.ibm.icu.text.RuleBasedCollator;
import com.ibm.icu.text.UTF16;
import com.ibm.icu.util.ULocale;
import java.io.BufferedReader;
@@ -42,6 +40,7 @@
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.Iso639Data;
import org.unicode.cldr.util.Iso639Data.Scope;
@@ -1924,11 +1923,6 @@ public String toString() {
public static class GeneralCollator implements Comparator {
static UTF16.StringComparator cpCompare = new UTF16.StringComparator(true, false, 0);
- static RuleBasedCollator UCA = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
-
- static {
- UCA.setNumericCollation(true);
- }
@Override
public int compare(String s1, String s2) {
@@ -1937,7 +1931,7 @@ public int compare(String s1, String s2) {
} else if (s2 == null) {
return 1;
}
- int result = UCA.compare(s1, s2);
+ int result = CollatorHelper.ROOT_NUMERIC.compare(s1, s2);
if (result != 0) return result;
return cpCompare.compare(s1, s2);
}
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CountItems.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CountItems.java
index 1912babd5c5..a0200b9ad3c 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CountItems.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CountItems.java
@@ -19,7 +19,6 @@
import com.ibm.icu.text.RuleBasedCollator;
import com.ibm.icu.text.Transform;
import com.ibm.icu.text.UnicodeSet;
-import com.ibm.icu.util.ULocale;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -45,6 +44,7 @@
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.Iso639Data;
import org.unicode.cldr.util.IsoCurrencyParser;
@@ -66,8 +66,7 @@
/** Simple program to count the amount of data in CLDR. Internal Use. */
public class CountItems {
- private static final Collator ROOT_PRIMARY_COLLATOR =
- Collator.getInstance(ULocale.ROOT).setStrength2(Collator.PRIMARY);
+ private static final Collator ROOT_PRIMARY_COLLATOR = CollatorHelper.ROOT_PRIMARY;
static final String needsTranslationString =
"America/Buenos_Aires " // America/Rio_Branco
@@ -318,8 +317,7 @@ public static void genSupplementalZoneData() throws IOException {
}
public static void genSupplementalZoneData(boolean skipUnaliased) throws IOException {
- RuleBasedCollator col = (RuleBasedCollator) Collator.getInstance();
- col.setNumericCollation(true);
+ RuleBasedCollator col = CollatorHelper.ROOT_NUMERIC;
StandardCodes sc = StandardCodes.make();
Map zone_country = sc.getZoneToCounty();
Map> country_zone = sc.getCountryToZoneSet();
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ExtractMessages.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ExtractMessages.java
index 9db2199884c..3fd97cc8c16 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ExtractMessages.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ExtractMessages.java
@@ -205,10 +205,11 @@ public void handlePathValue(String path, String value) {
}
}
- public static Collator col = Collator.getInstance(ULocale.ENGLISH);
+ public static Collator col = Collator.getInstance(ULocale.ROOT); // freeze below
static {
col.setStrength(Collator.SECONDARY);
+ col = col.freeze();
}
private static OtherHandler otherHandler = new OtherHandler();
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/FormattedFileWriter.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/FormattedFileWriter.java
index e02fec0b9ce..50f389630bb 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/FormattedFileWriter.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/FormattedFileWriter.java
@@ -2,7 +2,6 @@
import com.ibm.icu.text.Collator;
import com.ibm.icu.util.ICUUncheckedIOException;
-import com.ibm.icu.util.ULocale;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -16,11 +15,11 @@
import org.unicode.cldr.util.ArrayComparator;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
public class FormattedFileWriter extends java.io.Writer {
public static final String CHART_TARGET_DIR = CLDRPaths.CHART_DIRECTORY + "/supplemental/";
- public static final Collator COL =
- Collator.getInstance(ULocale.ROOT).setStrength2(Collator.IDENTICAL);
+ public static final Collator COL = CollatorHelper.ROOT_IDENTICAL;
// public static final PairComparator PC = new PairComparator(COL, null);
public static final ArrayComparator PC = new ArrayComparator(COL);
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateComparison.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateComparison.java
index 9bb41380744..4019c5ba1b8 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateComparison.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateComparison.java
@@ -17,6 +17,7 @@
import org.unicode.cldr.util.CLDRFile.Status;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.Counter;
import org.unicode.cldr.util.EscapingUtilities;
import org.unicode.cldr.util.Factory;
@@ -29,7 +30,7 @@ public class GenerateComparison {
private static PrettyPath prettyPathMaker;
- private static Collator collator = Collator.getInstance();
+ private static Collator collator = CollatorHelper.ROOT_COLLATOR;
static class EnglishRowComparator implements Comparator> {
private static Comparator unicode = new UTF16.StringComparator(true, false, 0);
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateSidewaysView.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateSidewaysView.java
index 99d76e44af3..7166e514950 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateSidewaysView.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/GenerateSidewaysView.java
@@ -17,7 +17,6 @@
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.lang.UScript;
import com.ibm.icu.text.BreakIterator;
-import com.ibm.icu.text.Collator;
import com.ibm.icu.text.Normalizer;
import com.ibm.icu.text.RuleBasedCollator;
import com.ibm.icu.text.RuleBasedNumberFormat;
@@ -48,6 +47,7 @@
import org.unicode.cldr.util.CLDRFile.Status;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.CollatorHelper;
import org.unicode.cldr.util.DtdData;
import org.unicode.cldr.util.DtdData.Attribute;
import org.unicode.cldr.util.DtdData.AttributeStatus;
@@ -141,24 +141,16 @@ static int getFirstScript(UnicodeSet exemplars) {
static Comparator