diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index d1942e9..fe70a94 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.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.10
-
 library js_backend.backend.annotations;
 
 import 'package:kernel/ast.dart' as ir;
@@ -14,7 +12,7 @@
 import '../ir/util.dart';
 import '../kernel/dart2js_target.dart';
 import '../options.dart';
-import '../serialization/serialization.dart';
+import '../serialization/serialization_interfaces.dart';
 import '../util/enumset.dart';
 
 class PragmaAnnotation {
@@ -213,7 +211,7 @@
   Map<PragmaAnnotation, EnumSet<PragmaAnnotation>> reportedExclusions = {};
   for (PragmaAnnotation annotation
       in annotations.iterable(PragmaAnnotation.values)) {
-    Set<PragmaAnnotation> implies = PragmaAnnotation.implies[annotation];
+    Set<PragmaAnnotation>? implies = PragmaAnnotation.implies[annotation];
     if (implies != null) {
       for (PragmaAnnotation other in implies) {
         if (annotations.contains(other)) {
@@ -225,7 +223,7 @@
         }
       }
     }
-    Set<PragmaAnnotation> excludes = PragmaAnnotation.excludes[annotation];
+    Set<PragmaAnnotation>? excludes = PragmaAnnotation.excludes[annotation];
     if (excludes != null) {
       for (PragmaAnnotation other in excludes) {
         if (annotations.contains(other) &&
@@ -239,7 +237,7 @@
         }
       }
     }
-    Set<PragmaAnnotation> requires = PragmaAnnotation.requires[annotation];
+    Set<PragmaAnnotation>? requires = PragmaAnnotation.requires[annotation];
     if (requires != null) {
       for (PragmaAnnotation other in requires) {
         if (!annotations.contains(other)) {
@@ -309,30 +307,30 @@
   /// What should the compiler do with parameter type assertions in [member].
   ///
   /// If [member] is `null`, the default policy is returned.
-  CheckPolicy getParameterCheckPolicy(MemberEntity member);
+  CheckPolicy getParameterCheckPolicy(MemberEntity? member);
 
   /// What should the compiler do with implicit downcasts in [member].
   ///
   /// If [member] is `null`, the default policy is returned.
-  CheckPolicy getImplicitDowncastCheckPolicy(MemberEntity member);
+  CheckPolicy getImplicitDowncastCheckPolicy(MemberEntity? member);
 
   /// What the compiler should do with a boolean value in a condition context
   /// in [member] when the language specification says it is a runtime error for
   /// it to be null.
   ///
   /// If [member] is `null`, the default policy is returned.
-  CheckPolicy getConditionCheckPolicy(MemberEntity member);
+  CheckPolicy getConditionCheckPolicy(MemberEntity? member);
 
   /// Whether should the compiler do with explicit casts in [member].
   ///
   /// If [member] is `null`, the default policy is returned.
-  CheckPolicy getExplicitCastCheckPolicy(MemberEntity member);
+  CheckPolicy getExplicitCastCheckPolicy(MemberEntity? member);
 
   /// What should the compiler do with index bounds checks `[]`, `[]=` and
   /// `removeLast()` operations in the body of [member].
   ///
   /// If [member] is `null`, the default policy is returned.
-  CheckPolicy getIndexBoundsCheckPolicy(MemberEntity member);
+  CheckPolicy getIndexBoundsCheckPolicy(MemberEntity? member);
 }
 
 class AnnotationsDataImpl implements AnnotationsData {
@@ -378,7 +376,7 @@
   }
 
   bool _hasPragma(MemberEntity member, PragmaAnnotation annotation) {
-    EnumSet<PragmaAnnotation> set = pragmaAnnotations[member];
+    EnumSet<PragmaAnnotation>? set = pragmaAnnotations[member];
     return set != null && set.contains(annotation);
   }
 
@@ -415,7 +413,7 @@
     pragmaAnnotations
         .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
       if (set.contains(PragmaAnnotation.noInline)) {
-        f(member);
+        f(member as FunctionEntity);
       }
     });
   }
@@ -425,7 +423,7 @@
     pragmaAnnotations
         .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
       if (set.contains(PragmaAnnotation.tryInline)) {
-        f(member);
+        f(member as FunctionEntity);
       }
     });
   }
@@ -435,7 +433,7 @@
     pragmaAnnotations
         .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
       if (set.contains(PragmaAnnotation.noThrows)) {
-        f(member);
+        f(member as FunctionEntity);
       }
     });
   }
@@ -445,15 +443,15 @@
     pragmaAnnotations
         .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
       if (set.contains(PragmaAnnotation.noSideEffects)) {
-        f(member);
+        f(member as FunctionEntity);
       }
     });
   }
 
   @override
-  CheckPolicy getParameterCheckPolicy(MemberEntity member) {
+  CheckPolicy getParameterCheckPolicy(MemberEntity? member) {
     if (member != null) {
-      EnumSet<PragmaAnnotation> annotations = pragmaAnnotations[member];
+      EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
       if (annotations != null) {
         if (annotations.contains(PragmaAnnotation.typesTrust)) {
           return CheckPolicy.trusted;
@@ -470,9 +468,9 @@
   }
 
   @override
-  CheckPolicy getImplicitDowncastCheckPolicy(MemberEntity member) {
+  CheckPolicy getImplicitDowncastCheckPolicy(MemberEntity? member) {
     if (member != null) {
-      EnumSet<PragmaAnnotation> annotations = pragmaAnnotations[member];
+      EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
       if (annotations != null) {
         if (annotations.contains(PragmaAnnotation.typesTrust)) {
           return CheckPolicy.trusted;
@@ -489,9 +487,9 @@
   }
 
   @override
-  CheckPolicy getConditionCheckPolicy(MemberEntity member) {
+  CheckPolicy getConditionCheckPolicy(MemberEntity? member) {
     if (member != null) {
-      EnumSet<PragmaAnnotation> annotations = pragmaAnnotations[member];
+      EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
       if (annotations != null) {
         if (annotations.contains(PragmaAnnotation.typesTrust)) {
           return CheckPolicy.trusted;
@@ -508,9 +506,9 @@
   }
 
   @override
-  CheckPolicy getExplicitCastCheckPolicy(MemberEntity member) {
+  CheckPolicy getExplicitCastCheckPolicy(MemberEntity? member) {
     if (member != null) {
-      EnumSet<PragmaAnnotation> annotations = pragmaAnnotations[member];
+      EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
       if (annotations != null) {
         if (annotations.contains(PragmaAnnotation.asTrust)) {
           return CheckPolicy.trusted;
@@ -523,9 +521,9 @@
   }
 
   @override
-  CheckPolicy getIndexBoundsCheckPolicy(MemberEntity member) {
+  CheckPolicy getIndexBoundsCheckPolicy(MemberEntity? member) {
     if (member != null) {
-      EnumSet<PragmaAnnotation> annotations = pragmaAnnotations[member];
+      EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
       if (annotations != null) {
         if (annotations.contains(PragmaAnnotation.indexBoundsTrust)) {
           return CheckPolicy.trusted;
diff --git a/pkg/compiler/lib/src/serialization/serialization_interfaces.dart b/pkg/compiler/lib/src/serialization/serialization_interfaces.dart
index ccb047e..5fac8e9 100644
--- a/pkg/compiler/lib/src/serialization/serialization_interfaces.dart
+++ b/pkg/compiler/lib/src/serialization/serialization_interfaces.dart
@@ -61,6 +61,10 @@
   void writeTypeVariable(
       covariant TypeVariableEntity value); // IndexedTypeVariable
 
+  void writeMemberMap<V>(
+      Map<MemberEntity, V>? map, void f(MemberEntity member, V value),
+      {bool allowNull = false});
+
   void writeLibrary(covariant LibraryEntity value); // IndexedLibrary
   void writeLibraryOrNull(covariant LibraryEntity? value); // IndexedLibrary
 
@@ -101,6 +105,10 @@
   ClassEntity? readClassOrNull(); // IndexedClass
   TypeVariableEntity readTypeVariable(); // IndexedTypeVariable
 
+  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member));
+  Map<K, V>? readMemberMapOrNull<K extends MemberEntity, V>(
+      V f(MemberEntity member));
+
   LibraryEntity readLibrary(); // IndexedLibrary;
   LibraryEntity? readLibraryOrNull(); // IndexedLibrary;
 
diff --git a/pkg/compiler/lib/src/serialization/sink.dart b/pkg/compiler/lib/src/serialization/sink.dart
index 8c5e1ba..cc836b4 100644
--- a/pkg/compiler/lib/src/serialization/sink.dart
+++ b/pkg/compiler/lib/src/serialization/sink.dart
@@ -810,6 +810,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSourceReader.readMemberMap].
+  @override
   void writeMemberMap<V>(
       Map<MemberEntity, V> map, void f(MemberEntity member, V value),
       {bool allowNull = false}) {
diff --git a/pkg/compiler/lib/src/serialization/source.dart b/pkg/compiler/lib/src/serialization/source.dart
index b09e780..a0e4284 100644
--- a/pkg/compiler/lib/src/serialization/source.dart
+++ b/pkg/compiler/lib/src/serialization/source.dart
@@ -975,15 +975,26 @@
   }
 
   /// Reads a map from indexed members to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
+  /// calling [f] to read each value from the data source.
   ///
   /// This is a convenience method to be used together with
   /// [DataSinkWriter.writeMemberMap].
-  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
-      {bool emptyAsNull = false}) {
+  @override
+  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member)) {
+    return readMemberMapOrNull<K, V>(f) ?? {};
+  }
+
+  /// Reads a map from indexed members to [V] values from this data source,
+  /// calling [f] to read each value from the data source.
+  /// `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeMemberMap].
+  @override
+  Map<K, V> readMemberMapOrNull<K extends MemberEntity, V>(
+      V f(MemberEntity member)) {
     int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
+    if (count == 0) return null;
     Map<K, V> map = {};
     for (int i = 0; i < count; i++) {
       MemberEntity member = readMember();
diff --git a/tools/VERSION b/tools/VERSION
index 2157b84..5affc37 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 141
+PRERELEASE 142
 PRERELEASE_PATCH 0
\ No newline at end of file
