remove hard coded feature index

Change-Id: Ib01f2c9b1516987ec39591a5a320bab81138718d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104786
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 4eab087..3d782f0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -22,12 +22,12 @@
 
 List<bool> _buildExperimentalFlagsArray() => <bool>[
       IsEnabledByDefault.constant_update_2018,
-      IsEnabledByDefault.non_nullable,
       true, // control-flow-collections
-      true, // spread-collections
-      true, // set-literals
-      IsEnabledByDefault.triple_shift,
       IsEnabledByDefault.extension_methods,
+      IsEnabledByDefault.non_nullable,
+      true, // set-literals
+      true, // spread-collections
+      IsEnabledByDefault.triple_shift,
       false, // bogus-disabled
       true, // bogus-enabled
     ];
@@ -71,28 +71,27 @@
       IsExpired.constant_update_2018,
       'Enhanced constant expressions');
 
-  static const non_nullable = const ExperimentalFeature(
-      1,
-      EnableString.non_nullable,
-      IsEnabledByDefault.non_nullable,
-      IsExpired.non_nullable,
-      'Non Nullable by default');
-
   static const control_flow_collections = const ExperimentalFeature(
-      2,
+      1,
       EnableString.control_flow_collections,
       IsEnabledByDefault.control_flow_collections,
       IsExpired.control_flow_collections,
       'Control Flow Collections',
       firstSupportedVersion: '2.2.2');
 
-  static const spread_collections = const ExperimentalFeature(
+  static const extension_methods = const ExperimentalFeature(
+      2,
+      EnableString.extension_methods,
+      IsEnabledByDefault.extension_methods,
+      IsExpired.extension_methods,
+      'Extension Methods');
+
+  static const non_nullable = const ExperimentalFeature(
       3,
-      EnableString.spread_collections,
-      IsEnabledByDefault.spread_collections,
-      IsExpired.spread_collections,
-      'Spread Collections',
-      firstSupportedVersion: '2.2.2');
+      EnableString.non_nullable,
+      IsEnabledByDefault.non_nullable,
+      IsExpired.non_nullable,
+      'Non Nullable by default');
 
   static const set_literals = const ExperimentalFeature(
       4,
@@ -102,20 +101,21 @@
       'Set Literals',
       firstSupportedVersion: '2.2.0');
 
-  static const triple_shift = const ExperimentalFeature(
+  static const spread_collections = const ExperimentalFeature(
       5,
+      EnableString.spread_collections,
+      IsEnabledByDefault.spread_collections,
+      IsExpired.spread_collections,
+      'Spread Collections',
+      firstSupportedVersion: '2.2.2');
+
+  static const triple_shift = const ExperimentalFeature(
+      6,
       EnableString.triple_shift,
       IsEnabledByDefault.triple_shift,
       IsExpired.triple_shift,
       'Triple-shift operator');
 
-  static const extension_methods = const ExperimentalFeature(
-      6,
-      EnableString.extension_methods,
-      IsEnabledByDefault.extension_methods,
-      IsExpired.extension_methods,
-      'Extension Methods');
-
   static const bogus_disabled = const ExperimentalFeature(
       7,
       EnableString.bogus_disabled,
diff --git a/pkg/analyzer/tool/experiments/generate.dart b/pkg/analyzer/tool/experiments/generate.dart
index 497238a..d74f223 100644
--- a/pkg/analyzer/tool/experiments/generate.dart
+++ b/pkg/analyzer/tool/experiments/generate.dart
@@ -46,18 +46,6 @@
 class _ExperimentsGenerator {
   final Map experimentsYaml;
 
-  var keysInIndexOrder = [
-// TODO(danrubel): Cleanup this hardcoded list of keys
-// once all lists indexed by ExperimentalFeature.index are generated.
-    'constant-update-2018',
-    'non-nullable',
-    'control-flow-collections',
-    'spread-collections',
-    'set-literals',
-    'triple-shift',
-    'extension-methods',
-  ];
-
   List<String> keysSorted;
 
   final out = new StringBuffer('''
@@ -88,7 +76,7 @@
 
 List<bool> _buildExperimentalFlagsArray() => <bool>[
 ''');
-    for (var key in keysInIndexOrder) {
+    for (var key in keysSorted) {
       var id = keyToIdentifier(key);
       var entry = experimentsYaml[key] as YamlMap;
       bool shipped = entry['enabledIn'] != null;
@@ -161,7 +149,7 @@
 class ExperimentalFeatures {
 ''');
     int index = 0;
-    for (var key in keysInIndexOrder) {
+    for (var key in keysSorted) {
       var id = keyToIdentifier(key);
       var help = (experimentsYaml[key] as YamlMap)['help'] ?? '';
       var enabledIn = (experimentsYaml[key] as YamlMap)['enabledIn'];