Version 2.13.0-184.0.dev

Merge commit '628e630ca267514d810110169e95014894a35e71' into 'dev'
diff --git a/pkg/analysis_server/lib/src/collections.dart b/pkg/analysis_server/lib/src/collections.dart
index 80a5a22..b2e4fa3 100644
--- a/pkg/analysis_server/lib/src/collections.dart
+++ b/pkg/analysis_server/lib/src/collections.dart
@@ -2,14 +2,9 @@
 // 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.
 
-// @dart = 2.9
-
 /// Returns the given [list] if it is not empty, or `null` otherwise.
-List<E> nullIfEmpty<E>(List<E> list) {
-  if (list == null) {
-    return null;
-  }
-  if (list.isEmpty) {
+List<E>? nullIfEmpty<E>(List<E>? list) {
+  if (list == null || list.isEmpty) {
     return null;
   }
   return list;
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
index d7eaa90..fd493a4 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/src/utilities/extensions/element.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -45,6 +43,8 @@
       var parent = body.parent;
       if (parent is ConstructorDeclaration || parent is MethodDeclaration) {
         return true;
+      } else if (parent == null) {
+        return false;
       }
       node = parent;
     }
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/element.dart b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
index b9f85ed..440d3ef 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/element.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
@@ -2,28 +2,24 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analyzer/dart/element/element.dart';
 
 extension ClassElementExtensions on ClassElement {
   /// Return `true` if this element represents the class `Iterable` from
   /// `dart:core`.
-  bool get isDartCoreIterable =>
-      this != null && name == 'Iterable' && library.isDartCore;
+  bool get isDartCoreIterable => name == 'Iterable' && library.isDartCore;
 
   /// Return `true` if this element represents the class `List` from
   /// `dart:core`.
-  bool get isDartCoreList =>
-      this != null && name == 'List' && library.isDartCore;
+  bool get isDartCoreList => name == 'List' && library.isDartCore;
 
   /// Return `true` if this element represents the class `Map` from
   /// `dart:core`.
-  bool get isDartCoreMap => this != null && name == 'Map' && library.isDartCore;
+  bool get isDartCoreMap => name == 'Map' && library.isDartCore;
 
   /// Return `true` if this element represents the class `Set` from
   /// `dart:core`.
-  bool get isDartCoreSet => this != null && name == 'Set' && library.isDartCore;
+  bool get isDartCoreSet => name == 'Set' && library.isDartCore;
 }
 
 extension ElementExtension on Element {
@@ -53,7 +49,10 @@
     if (name != 'cast') {
       return false;
     }
-    ClassElement definingClass = enclosingElement;
+    var definingClass = enclosingElement;
+    if (definingClass is! ClassElement) {
+      return false;
+    }
     return definingClass.isDartCoreIterable ||
         definingClass.isDartCoreList ||
         definingClass.isDartCoreMap ||
@@ -66,7 +65,10 @@
     if (name != 'toList') {
       return false;
     }
-    ClassElement definingClass = enclosingElement;
+    var definingClass = enclosingElement;
+    if (definingClass is! ClassElement) {
+      return false;
+    }
     return definingClass.isDartCoreIterable || definingClass.isDartCoreList;
   }
 }
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/numeric.dart b/pkg/analysis_server/lib/src/utilities/extensions/numeric.dart
index b4f7f78..005763f 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/numeric.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/numeric.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 extension DoubleExtensions on double {
   /// Return `true` if this value is between the [lower] and [upper] bound,
   /// inclusive.
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/yaml.dart b/pkg/analysis_server/lib/src/utilities/extensions/yaml.dart
index d3bf132..dfe4983 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/yaml.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/yaml.dart
@@ -2,14 +2,12 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:yaml/yaml.dart';
 
 extension YamlNodeExtensions on YamlNode {
   /// Return the child of this node that contains the given [offset], or `null`
   /// if none of the children contains the offset.
-  YamlNode childContainingOffset(int offset) {
+  YamlNode? childContainingOffset(int offset) {
     var node = this;
     if (node is YamlList) {
       for (var element in node.nodes) {
diff --git a/pkg/analysis_server/lib/src/utilities/file_string_sink.dart b/pkg/analysis_server/lib/src/utilities/file_string_sink.dart
index a81ef8f..81f8c37 100644
--- a/pkg/analysis_server/lib/src/utilities/file_string_sink.dart
+++ b/pkg/analysis_server/lib/src/utilities/file_string_sink.dart
@@ -2,25 +2,22 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:io';
 
 /// A string sink that write into a file.
 class FileStringSink implements StringSink {
-  IOSink _sink;
+  final IOSink _sink;
 
-  FileStringSink(String path) {
-    _sink = File(path).openWrite(mode: FileMode.append);
-  }
+  FileStringSink(String path)
+      : _sink = File(path).openWrite(mode: FileMode.append);
 
   @override
-  void write(Object obj) {
+  void write(Object? obj) {
     throw UnimplementedError();
   }
 
   @override
-  void writeAll(Iterable objects, [String separator = '']) {
+  void writeAll(Iterable<dynamic> objects, [String separator = '']) {
     throw UnimplementedError();
   }
 
@@ -30,7 +27,7 @@
   }
 
   @override
-  void writeln([Object obj = '']) {
+  void writeln([Object? obj = '']) {
     var currentTimeMillis = DateTime.now().millisecondsSinceEpoch;
     _sink.writeln('$currentTimeMillis $obj');
   }
diff --git a/pkg/analysis_server/lib/src/utilities/null_string_sink.dart b/pkg/analysis_server/lib/src/utilities/null_string_sink.dart
index 9fb109c..3af2f4a 100644
--- a/pkg/analysis_server/lib/src/utilities/null_string_sink.dart
+++ b/pkg/analysis_server/lib/src/utilities/null_string_sink.dart
@@ -2,16 +2,17 @@
 // 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.
 
-// @dart = 2.9
-
 /// A string sink that ignores everything written to it.
 class NullStringSink implements StringSink {
   @override
-  void write(Object obj) {}
+  void write(Object? obj) {}
+
   @override
-  void writeAll(Iterable objects, [String separator = '']) {}
+  void writeAll(Iterable<dynamic> objects, [String separator = '']) {}
+
   @override
   void writeCharCode(int charCode) {}
+
   @override
-  void writeln([Object obj = '']) {}
+  void writeln([Object? obj = '']) {}
 }
diff --git a/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart b/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart
index bb3be93..2b715c2 100644
--- a/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart
+++ b/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 /// A [StringSink] that writes into two other [StringSink]s.
 class TeeStringSink implements StringSink {
   final StringSink sink1;
@@ -12,13 +10,13 @@
   TeeStringSink(this.sink1, this.sink2);
 
   @override
-  void write(Object obj) {
+  void write(Object? obj) {
     sink1.write(obj);
     sink2.write(obj);
   }
 
   @override
-  void writeAll(Iterable objects, [String separator = '']) {
+  void writeAll(Iterable<dynamic> objects, [String separator = '']) {
     sink1.writeAll(objects, separator);
     sink2.writeAll(objects, separator);
   }
@@ -30,7 +28,7 @@
   }
 
   @override
-  void writeln([Object obj = '']) {
+  void writeln([Object? obj = '']) {
     sink1.writeln(obj);
     sink2.writeln(obj);
   }
diff --git a/pkg/analysis_server/tool/code_completion/output_utilities.dart b/pkg/analysis_server/tool/code_completion/output_utilities.dart
index 483ba38..aef456c 100644
--- a/pkg/analysis_server/tool/code_completion/output_utilities.dart
+++ b/pkg/analysis_server/tool/code_completion/output_utilities.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:math' as math;
 
 /// Print the given [table].
@@ -13,7 +11,7 @@
   print(buffer.toString());
 }
 
-/// Return an interable that will produce all of the integer values between
+/// Return an iterable that will produce all of the integer values between
 /// [first] and [last] inclusive.
 Iterable<int> range(int first, int last) sync* {
   for (var i = first; i < last; i++) {
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 6856353..e90e6ad 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -3231,17 +3231,7 @@
 
   // Going through BreakpointLocations of all isolates and debuggers looking
   // for those that can be resolved and added code breakpoints at now.
-  //
-  // When IsolateGroups are enabled assert that we are either only one isolate
-  // or in safepoint operation scope because we are updating
-  // breakpoint_locations, which normally needs to be under a
-  // breakpoint_locations_lock, but we can't acquire that lock because
-  // somebody else(who is at a safepoint we inititated) holds it
-  // already, can't release it.
-  RELEASE_ASSERT(
-      (thread->IsMutatorThread() && !IsolateGroup::AreIsolateGroupsEnabled()) ||
-      (thread->IsMutatorThread() && isolate_group_->ContainsOnlyOneIsolate()) ||
-      isolate_group_->safepoint_handler()->IsOwnedByTheThread(thread));
+  SafepointReadRwLocker sl(thread, breakpoint_locations_lock());
   for (intptr_t i = 0; i < breakpoint_locations_.length(); i++) {
     BreakpointLocation* location = breakpoint_locations_.At(i);
     if (EnsureLocationIsInFunction(zone, function, location)) {
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index f3e2127..8f395a7 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -18,95 +18,6 @@
 LibTest/core/List/List_class_A01_t02: Slow, Pass # Does many calls
 LibTest/io/RawDatagramSocket/*: Skip # RawDatagramSocket are flacky. Skip them all until rewritten
 
-[ $fasta ]
-Language/Expressions/Shift/integer_t04/01: Crash
-Language/Expressions/Shift/integer_t04/02: Crash
-Language/Expressions/Shift/integer_t04/03: Crash
-Language/Expressions/Shift/integer_t04/04: Crash
-Language/Expressions/Shift/integer_t04/05: Crash
-Language/Expressions/Shift/integer_t04/06: Crash
-Language/Expressions/Shift/integer_t04/07: Crash
-Language/Expressions/Shift/integer_t04/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/06: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t03/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t04/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/06: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t05/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/06: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/06: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t07/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t08/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t09: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/06: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t10/none: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t11: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/01: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/02: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/03: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/04: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/05: Crash
-LanguageFeatures/Constant-update-2018/NewOperators_A01_t12/none: Crash
-LanguageFeatures/Instantiate-to-bound/class/dynamic/class_FutureOr_l1_t01: Crash
-LanguageFeatures/Instantiate-to-bound/class/dynamic/class_FutureOr_l1_t03: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01/01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01/02: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01/03: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01/04: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t01/none: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t03/01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t03/02: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_FutureOr_l1_t03/none: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l1_t04/01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l1_t04/02: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l1_t04/none: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t04/01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t04/none: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t08/01: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t08/02: Crash
-LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t08/none: Crash
-LanguageFeatures/Set-literals/disambiguating_A02_t03: Crash
-LanguageFeatures/regression/34803_t01: Crash
-LanguageFeatures/regression/34803_t02: Crash
-
 [ $compiler == dartk && $runtime == vm && $system == linux ]
 LibTest/isolate/Isolate/spawn_A06_t03: Crash
 
diff --git a/tools/VERSION b/tools/VERSION
index 13f947d..6f895ad 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 183
+PRERELEASE 184
 PRERELEASE_PATCH 0
\ No newline at end of file