Version 2.12.0-284.0.dev

Merge commit '0427342228a37acb72477acca57438c2dc38b25f' into 'dev'
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 31698ee..4fa69d3 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -23,6 +23,9 @@
   /// Feature information for extension methods.
   static final extension_methods = ExperimentalFeatures.extension_methods;
 
+  /// Feature information for generic metadata.
+  static final generic_metadata = ExperimentalFeatures.generic_metadata;
+
   /// Feature information for spread collections.
   static final spread_collections = ExperimentalFeatures.spread_collections;
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 9103fc1..8e3687f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -16,6 +16,7 @@
   EnableString.control_flow_collections:
       ExperimentalFeatures.control_flow_collections,
   EnableString.extension_methods: ExperimentalFeatures.extension_methods,
+  EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
   EnableString.non_nullable: ExperimentalFeatures.non_nullable,
   EnableString.nonfunction_type_aliases:
       ExperimentalFeatures.nonfunction_type_aliases,
@@ -38,6 +39,9 @@
   /// String to enable the experiment "extension-methods"
   static const String extension_methods = 'extension-methods';
 
+  /// String to enable the experiment "generic-metadata"
+  static const String generic_metadata = 'generic-metadata';
+
   /// String to enable the experiment "non-nullable"
   static const String non_nullable = 'non-nullable';
 
@@ -91,8 +95,19 @@
     releaseVersion: Version.parse('2.6.0'),
   );
 
-  static final non_nullable = ExperimentalFeature(
+  static final generic_metadata = ExperimentalFeature(
     index: 3,
+    enableString: EnableString.generic_metadata,
+    isEnabledByDefault: IsEnabledByDefault.generic_metadata,
+    isExpired: IsExpired.generic_metadata,
+    documentation:
+        'Allow annotations to accept type arguments; also allow generic function types as type arguments',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final non_nullable = ExperimentalFeature(
+    index: 4,
     enableString: EnableString.non_nullable,
     isEnabledByDefault: IsEnabledByDefault.non_nullable,
     isExpired: IsExpired.non_nullable,
@@ -102,7 +117,7 @@
   );
 
   static final nonfunction_type_aliases = ExperimentalFeature(
-    index: 4,
+    index: 5,
     enableString: EnableString.nonfunction_type_aliases,
     isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
     isExpired: IsExpired.nonfunction_type_aliases,
@@ -112,7 +127,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 5,
+    index: 6,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -122,7 +137,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 6,
+    index: 7,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -132,7 +147,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 7,
+    index: 8,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -142,7 +157,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 8,
+    index: 9,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -152,7 +167,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 9,
+    index: 10,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -174,6 +189,9 @@
   /// Default state of the experiment "extension-methods"
   static const bool extension_methods = true;
 
+  /// Default state of the experiment "generic-metadata"
+  static const bool generic_metadata = false;
+
   /// Default state of the experiment "non-nullable"
   static const bool non_nullable = true;
 
@@ -209,6 +227,9 @@
   /// Expiration status of the experiment "extension-methods"
   static const bool extension_methods = false;
 
+  /// Expiration status of the experiment "generic-metadata"
+  static const bool generic_metadata = false;
+
   /// Expiration status of the experiment "non-nullable"
   static const bool non_nullable = false;
 
@@ -244,6 +265,9 @@
   bool get extension_methods =>
       isEnabled(ExperimentalFeatures.extension_methods);
 
+  /// Current state for the flag "generic-metadata"
+  bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
+
   /// Current state for the flag "non-nullable"
   bool get non_nullable => isEnabled(ExperimentalFeatures.non_nullable);
 
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index dfdef38..f2f282f 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -16,6 +16,7 @@
   constantUpdate2018,
   controlFlowCollections,
   extensionMethods,
+  genericMetadata,
   nonNullable,
   nonfunctionTypeAliases,
   setLiterals,
@@ -30,6 +31,7 @@
 const Version enableConstantUpdate2018Version = const Version(2, 0);
 const Version enableControlFlowCollectionsVersion = const Version(2, 0);
 const Version enableExtensionMethodsVersion = const Version(2, 6);
+const Version enableGenericMetadataVersion = const Version(2, 12);
 const Version enableNonNullableVersion = const Version(2, 12);
 const Version enableNonfunctionTypeAliasesVersion = const Version(2, 12);
 const Version enableSetLiteralsVersion = const Version(2, 0);
@@ -48,6 +50,8 @@
       return ExperimentalFlag.controlFlowCollections;
     case "extension-methods":
       return ExperimentalFlag.extensionMethods;
+    case "generic-metadata":
+      return ExperimentalFlag.genericMetadata;
     case "non-nullable":
       return ExperimentalFlag.nonNullable;
     case "nonfunction-type-aliases":
@@ -71,6 +75,7 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.controlFlowCollections: true,
   ExperimentalFlag.extensionMethods: true,
+  ExperimentalFlag.genericMetadata: false,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: false,
   ExperimentalFlag.setLiterals: true,
@@ -85,6 +90,7 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.controlFlowCollections: true,
   ExperimentalFlag.extensionMethods: false,
+  ExperimentalFlag.genericMetadata: false,
   ExperimentalFlag.nonNullable: false,
   ExperimentalFlag.nonfunctionTypeAliases: false,
   ExperimentalFlag.setLiterals: true,
@@ -99,6 +105,7 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
+  ExperimentalFlag.genericMetadata: const Version(2, 12),
   ExperimentalFlag.nonNullable: const Version(2, 12),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 12),
   ExperimentalFlag.setLiterals: const Version(2, 0),
@@ -113,6 +120,7 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
+  ExperimentalFlag.genericMetadata: const Version(2, 12),
   ExperimentalFlag.nonNullable: const Version(2, 10),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 12),
   ExperimentalFlag.setLiterals: const Version(2, 0),
diff --git a/tools/VERSION b/tools/VERSION
index 0513cb3..a403296 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 283
+PRERELEASE 284
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 99f8c15..823773d 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -115,6 +115,10 @@
 
   value-class:
     help: "Value class"
+
+  generic-metadata:
+    help: "Allow annotations to accept type arguments; also allow generic function types as type arguments"
+
 #
 # Flags below this line are shipped, retired, or rejected, cannot be specified
 # on the command line, and will eventually be removed.