Merge branch 'master' into skip_ffi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 750d93d..5fcade6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,6 @@
  * Add an analysis_options.yaml and fix or suppress all the complaints from it.
  * Add unit tests using dart:ffi to compare formatting output to ICU.
  * Bump SDK requirements up to 2.5.0 for dart:ffi availability.
- * Canonicalize the locale in the Intl.defaultLocale setter, so e.g. 'en-US'
-   will get turned into the correct 'en_US'
  * Attempt to compensate for erratic errors in DateTime creation better, and add
    tests for the compensation.
  * Add a MessageFormat class. It can prepares strings for display to users,
diff --git a/analysis_options.yaml b/analysis_options.yaml
index e98bb02..76203fd 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,3 +1,89 @@
 analyzer:
   exclude:
-     - test/number_format_compact_icu_test.dart # broken due to ffi instability
+     - test/number_format_compact_icu_test.dart # TODO(240): Update for FFI changes
+
+errors:
+    dead_code: error
+    override_on_non_overriding_method: error
+    unused_element: error
+    unused_import: error
+    unused_local_variable: error
+linter:
+  rules:
+    - always_declare_return_types
+    - avoid_classes_with_only_static_members
+    - avoid_empty_else
+    - avoid_function_literals_in_foreach_calls
+    - avoid_init_to_null
+    - avoid_null_checks_in_equality_operators
+    - avoid_relative_lib_imports
+    - avoid_renaming_method_parameters
+    - avoid_return_types_on_setters
+    - avoid_returning_null_for_void
+    - avoid_shadowing_type_parameters
+    - avoid_single_cascade_in_expression_statements
+    - avoid_types_as_parameter_names
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - constant_identifier_names
+    - control_flow_in_finally
+    - curly_braces_in_flow_control_structures
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - file_names
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    - literal_only_boolean_expressions
+    - no_duplicate_case_values
+    - non_constant_identifier_names
+    - null_closures
+    - omit_local_variable_types
+    - only_throw_errors
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_adjacent_string_concatenation
+    - prefer_conditional_assignment
+    - prefer_const_constructors
+    - prefer_contains
+    - prefer_equal_for_default_values
+    - prefer_final_fields
+    - prefer_generic_function_type_aliases
+    - prefer_initializing_formals
+    - prefer_interpolation_to_compose_strings
+    - prefer_iterable_whereType
+    - prefer_is_empty
+    - prefer_is_not_empty
+    - prefer_null_aware_operators
+    - prefer_single_quotes
+    - prefer_typing_uninitialized_variables
+    - recursive_getters
+    - slash_for_doc_comments
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unawaited_futures
+    - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_getters_setters
+    - unnecessary_lambdas
+    - unnecessary_new
+    - unnecessary_null_aware_assignments
+    - unnecessary_null_in_if_null_operators
+    - unnecessary_parenthesis
+    - unnecessary_statements
+    - unnecessary_this
+    - unrelated_type_equality_checks
+    - use_function_type_syntax_for_parameters
+    - use_rethrow_when_possible
+    - valid_regexps
+    - void_checks
diff --git a/lib/intl.dart b/lib/intl.dart
index 7dc6f30..f4120c7 100644
--- a/lib/intl.dart
+++ b/lib/intl.dart
@@ -99,7 +99,7 @@
   }
 
   static set defaultLocale(String newLocale) {
-    _defaultLocale = newLocale == null ? null : canonicalizedLocale(newLocale);
+    _defaultLocale = newLocale;
   }
 
   static String _defaultLocale;
diff --git a/lib/src/intl_helpers.dart b/lib/src/intl_helpers.dart
index 57edee8..a807d97 100644
--- a/lib/src/intl_helpers.dart
+++ b/lib/src/intl_helpers.dart
@@ -22,8 +22,10 @@
   final F fallbackData;
   UninitializedLocaleData(this.message, this.fallbackData);
 
+  bool _isFallback(String key) => Intl.canonicalizedLocale(key) == 'en_US';
+
   F operator [](String key) =>
-      (key == 'en_US') ? fallbackData : _throwException();
+      _isFallback(key) ? fallbackData : _throwException();
 
   /// If a message is looked up before any locale initialization, record it,
   /// and throw an exception with that information once the locale is
@@ -66,7 +68,7 @@
 
   List<String> get keys => _throwException() as List<String>;
 
-  bool containsKey(String key) => (key == 'en_US') ? true : _throwException();
+  bool containsKey(String key) => _isFallback(key) ? true : _throwException();
 
   F _throwException() {
     throw LocaleDataException('Locale data has not been initialized'