Version 2.11.0-228.0.dev

Merge commit '016ebdd03ae0e89398241f970281bbb2c8c36f61' into 'dev'
diff --git a/tests/language/metadata/metadata_location_part.dart b/tests/language/metadata/metadata_location_part.dart
new file mode 100644
index 0000000..ae1bb39
--- /dev/null
+++ b/tests/language/metadata/metadata_location_part.dart
@@ -0,0 +1,2 @@
+@m
+part of 'metadata_location_test.dart';
diff --git a/tests/language/metadata/metadata_location_test.dart b/tests/language/metadata/metadata_location_test.dart
new file mode 100644
index 0000000..805c06d
--- /dev/null
+++ b/tests/language/metadata/metadata_location_test.dart
@@ -0,0 +1,122 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that metadata can be located everywhere the grammar specifies that
+// it can occur, with a few variants especially for parameter locations.
+
+@m
+library metadata.location.test;
+
+@m
+import 'dart:async';
+
+@m
+export 'dart:async';
+
+@m
+part 'metadata_location_part.dart';
+
+@m
+const m = 0;
+
+@m
+void f1(@m p1, @m int p2, [@m p3, @m int? p4]) {}
+
+@m
+void f2({@m p1, @m int? p2}) {}
+
+@m
+void f3(@m p1(), @m int p2()) {}
+
+@m
+class C {
+  @m
+  var x, y, z, w;
+
+  @m
+  covariant var u, v;
+
+  @m
+  C(@m this.x, @m int this.y,
+      {@m this.z, @m int? this.w, @m this.u()?, @m int this.v()?});
+
+  @m
+  void f1(@m p1, @m int p2, [@m p3, @m int? p4]) {}
+
+  @m
+  void f2({@m p1, @m int? p2}) {}
+
+  @m
+  void f3(@m covariant p1, @m covariant int p2,
+      [@m covariant p3, @m covariant int? p4]) {}
+
+  @m
+  void f4({@m covariant p1, @m covariant int? p2}) {}
+
+  @m
+  int get prop => 0;
+
+  @m
+  set prop(int _) {}
+
+  @m
+  bool operator ==(other) => true;
+}
+
+@m
+mixin M {
+  @m
+  var x, y, z, w, u, v;
+
+  @m
+  void f1(@m p1, @m int p2, [@m p3, @m int p4 = 0]) {}
+
+  @m
+  void f2({@m p1, @m int p2 = 0}) {}
+
+  @m
+  void f3(@m covariant p1, @m covariant int p2,
+      [@m covariant p3, @m covariant int p4 = 0]) {}
+
+  @m
+  void f4({@m covariant p1, @m covariant int p2 = 0}) {}
+}
+
+@m
+extension Extension on int {
+  @m
+  void f1(@m p1, @m int p2, [@m p3, @m int p4 = 0]) {}
+
+  @m
+  void f2({@m p1, @m int p2 = 0}) {}
+}
+
+@m
+enum E {
+  @m
+  one,
+  @m
+  two,
+}
+
+void f<@m X>() {}
+
+class D<@m X> {}
+
+@m
+typedef void F<@m X>();
+
+void main() {
+  @m
+  var x;
+
+  @m
+  void f() {}
+
+  for (@m
+  int i = 0;
+      i < 1;
+      i++) {}
+  for (@m int i in []) {}
+}
diff --git a/tools/VERSION b/tools/VERSION
index 7ac5eb9..f603700 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 227
+PRERELEASE 228
 PRERELEASE_PATCH 0
\ No newline at end of file