Merge branch 'main' into addExampleToIntl
diff --git a/pkgs/intl/CHANGELOG.md b/pkgs/intl/CHANGELOG.md
index b9b5ee2..aa42bef 100644
--- a/pkgs/intl/CHANGELOG.md
+++ b/pkgs/intl/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## 0.20.0-wip
  * Type `numberFormatSymbols` as a `Map<String, NumberSymbols>`.
+ * Type `dateTimeSymbolMap` as a `Map<String, DateSymbols>`.
  * Add example for pub.dev.
 
 ## 0.19.0
diff --git a/pkgs/intl/lib/date_symbol_data_local.dart b/pkgs/intl/lib/date_symbol_data_local.dart
index 953c15a..3e33098 100644
--- a/pkgs/intl/lib/date_symbol_data_local.dart
+++ b/pkgs/intl/lib/date_symbol_data_local.dart
@@ -37,7 +37,7 @@
 /// Returns a Map from locale names to the DateSymbols instance for
 /// that locale. Internal use only. Call initializeDateFormatting
 /// instead.
-Map<dynamic, dynamic> dateTimeSymbolMap() => {
+Map<String, DateSymbols> dateTimeSymbolMap() => {
       // Date/time formatting symbols for locale en_ISO.
       "en_ISO": DateSymbols(
           NAME: 'en_ISO',
diff --git a/pkgs/intl/tool/generate_locale_data_files.dart b/pkgs/intl/tool/generate_locale_data_files.dart
index 3175ef0..f7bdc75 100644
--- a/pkgs/intl/tool/generate_locale_data_files.dart
+++ b/pkgs/intl/tool/generate_locale_data_files.dart
@@ -53,9 +53,7 @@
 }
 
 void writeSymbolData() {
-  // TODO(#482): The implicit convertion here from dynamic to String and
-  // DateSymbols won't be needed when dateTimeSymbolMap() has more type info.
-  dateTimeSymbolMap().forEach((key, value) => writeSymbols(key, value));
+  dateTimeSymbolMap().forEach(writeSymbols);
 }
 
 void writePatternData() {
diff --git a/pkgs/intl_translation/CHANGELOG.md b/pkgs/intl_translation/CHANGELOG.md
index a03633d..e15097e 100644
--- a/pkgs/intl_translation/CHANGELOG.md
+++ b/pkgs/intl_translation/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.20.0-wip
+  * Throw if the `Intl.select` `arg` is not in the list of `args`.
+
 ## 0.19.0
   * Always generate null safe code, remove `null-safe` flag.
   * Add example for `he` locale.
diff --git a/pkgs/intl_translation/lib/src/messages/submessages/select.dart b/pkgs/intl_translation/lib/src/messages/submessages/select.dart
index e3682d4..77810dc 100644
--- a/pkgs/intl_translation/lib/src/messages/submessages/select.dart
+++ b/pkgs/intl_translation/lib/src/messages/submessages/select.dart
@@ -108,7 +108,12 @@
   List toJson() {
     var json = [];
     json.add(dartMessageName);
-    json.add(arguments.indexOf(mainArgument));
+    var indexOfArgument = arguments.indexOf(mainArgument);
+    if (indexOfArgument == -1) {
+      throw ArgumentError(
+          'The select message $dartMessageName is being passed the argument $mainArgument, which does not occur in the list of arguments $arguments.');
+    }
+    json.add(indexOfArgument);
     var attributes = {};
     for (var arg in codeAttributeNames) {
       attributes[arg] = this[arg]!.toJson();
diff --git a/pkgs/intl_translation/pubspec.yaml b/pkgs/intl_translation/pubspec.yaml
index ce977c6..a36bef4 100644
--- a/pkgs/intl_translation/pubspec.yaml
+++ b/pkgs/intl_translation/pubspec.yaml
@@ -1,5 +1,5 @@
 name: intl_translation
-version: 0.19.0
+version: 0.20.0-wip
 description: >-
   Contains code to deal with internationalized/localized messages,
   date and number formatting and parsing, bi-directional text, and