Version 2.18.0-137.0.dev

Merge commit '254b7882a1fba105eaea05f40a8b24d9244210e3' into 'dev'
diff --git a/DEPS b/DEPS
index 58b79b6..c058eae 100644
--- a/DEPS
+++ b/DEPS
@@ -153,7 +153,7 @@
   "term_glyph_rev": "d0f205c67ea70eea47b9f41c8440129a72a9c86e",
   "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
   "test_process_rev": "3e695bcfeab551473ddc288970f345f30e5e1375",
-  "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
+  "test_reflective_loader_rev": "8d0de01bbe852fea1f8e33aba907abcba50a8a1e",
   "test_rev": "d54846bc2b5cfa4e1445fda85c5e48a00940aa68",
   "typed_data_rev": "8b19e29bcf4077147de4d67adeabeb48270c65eb",
   "usage_rev": "e85d575d6decb921c57a43b9844bba3607479f56",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index fc99416..35444e1 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -6333,6 +6333,15 @@
     problemMessage: r"""Can't use string interpolation in a URI.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidAugmentSuper = messageInvalidAugmentSuper;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidAugmentSuper = const MessageCode(
+    "InvalidAugmentSuper",
+    problemMessage:
+        r"""'augment super' is only allowed in member augmentations.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidAwaitFor = messageInvalidAwaitFor;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 437ae8a..a10e793 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -1748,6 +1748,12 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    listener?.handleAugmentSuperExpression(augmentToken, superToken, context);
+  }
+
+  @override
   void handleSymbolVoid(Token token) {
     listener?.handleSymbolVoid(token);
   }
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index f72d10b..107f7da 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -1770,6 +1770,11 @@
     logEvent("SuperExpression");
   }
 
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    logEvent("AugmentSuperExpression");
+  }
+
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {}
 
   void endSwitchCase(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
index 99e4582..3946e24 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
@@ -227,6 +227,7 @@
     reportExtraneousModifier(externalToken);
     reportExtraneousModifier(requiredToken);
     reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(augmentToken);
     return token;
   }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 89a8755..0fd1cc0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -5826,6 +5826,9 @@
         return parseThisExpression(token, context);
       } else if (identical(value, "super")) {
         return parseSuperExpression(token, context);
+      } else if (identical(value, "augment") &&
+          optional('super', token.next!.next!)) {
+        return parseAugmentSuperExpression(token, context);
       } else if (identical(value, "new")) {
         return parseNewExpression(token);
       } else if (identical(value, "const")) {
@@ -5965,6 +5968,21 @@
     return token;
   }
 
+  Token parseAugmentSuperExpression(Token token, IdentifierContext context) {
+    Token augmentToken = token = token.next!;
+    assert(optional('augment', token));
+    Token superToken = token = token.next!;
+    assert(optional('super', token));
+    listener.handleAugmentSuperExpression(augmentToken, superToken, context);
+    Token next = token.next!;
+    if (optional('(', next)) {
+      listener.handleNoTypeArguments(next);
+      token = parseArguments(token);
+      listener.handleSend(augmentToken, token.next!);
+    }
+    return token;
+  }
+
   /// This method parses the portion of a list literal starting with the left
   /// square bracket.
   ///
@@ -6948,7 +6966,9 @@
     Token? varFinalOrConst;
 
     if (isModifier(next)) {
-      if (optional('var', next) ||
+      if (optional('augment', next) && optional('super', next.next!)) {
+        return parseExpressionStatement(start);
+      } else if (optional('var', next) ||
           optional('final', next) ||
           optional('const', next)) {
         varFinalOrConst = token = token.next!;
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
index e3c0fe5..8c4ec6d 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
@@ -1087,6 +1087,361 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class IncomingMessage implements Message, ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    IncomingMessage.canParse,
+    IncomingMessage.fromJson,
+  );
+
+  IncomingMessage({
+    this.clientRequestTime,
+    required this.jsonrpc,
+    required this.method,
+    this.params,
+  });
+  static IncomingMessage fromJson(Map<String, Object?> json) {
+    if (RequestMessage.canParse(json, nullLspJsonReporter)) {
+      return RequestMessage.fromJson(json);
+    }
+    if (NotificationMessage.canParse(json, nullLspJsonReporter)) {
+      return NotificationMessage.fromJson(json);
+    }
+    final clientRequestTimeJson = json['clientRequestTime'];
+    final clientRequestTime = clientRequestTimeJson as int?;
+    final jsonrpcJson = json['jsonrpc'];
+    final jsonrpc = jsonrpcJson as String;
+    final methodJson = json['method'];
+    final method = Method.fromJson(methodJson as String);
+    final paramsJson = json['params'];
+    final params = paramsJson;
+    return IncomingMessage(
+      clientRequestTime: clientRequestTime,
+      jsonrpc: jsonrpc,
+      method: method,
+      params: params,
+    );
+  }
+
+  final int? clientRequestTime;
+  final String jsonrpc;
+  final Method method;
+  final Object? params;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (clientRequestTime != null) {
+      __result['clientRequestTime'] = clientRequestTime;
+    }
+    __result['jsonrpc'] = jsonrpc;
+    __result['method'] = method.toJson();
+    if (params != null) {
+      __result['params'] = params;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('clientRequestTime');
+      try {
+        final clientRequestTime = obj['clientRequestTime'];
+        if (clientRequestTime != null && !(clientRequestTime is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('jsonrpc');
+      try {
+        if (!obj.containsKey('jsonrpc')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final jsonrpc = obj['jsonrpc'];
+        if (jsonrpc == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(jsonrpc is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('method');
+      try {
+        if (!obj.containsKey('method')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final method = obj['method'];
+        if (method == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(Method.canParse(method, reporter))) {
+          reporter.reportError('must be of type Method');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type IncomingMessage');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is IncomingMessage && other.runtimeType == IncomingMessage) {
+      return clientRequestTime == other.clientRequestTime &&
+          jsonrpc == other.jsonrpc &&
+          method == other.method &&
+          params == other.params &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        clientRequestTime,
+        jsonrpc,
+        method,
+        params,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
+class Message implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    Message.canParse,
+    Message.fromJson,
+  );
+
+  Message({
+    this.clientRequestTime,
+    required this.jsonrpc,
+  });
+  static Message fromJson(Map<String, Object?> json) {
+    if (IncomingMessage.canParse(json, nullLspJsonReporter)) {
+      return IncomingMessage.fromJson(json);
+    }
+    if (ResponseMessage.canParse(json, nullLspJsonReporter)) {
+      return ResponseMessage.fromJson(json);
+    }
+    final clientRequestTimeJson = json['clientRequestTime'];
+    final clientRequestTime = clientRequestTimeJson as int?;
+    final jsonrpcJson = json['jsonrpc'];
+    final jsonrpc = jsonrpcJson as String;
+    return Message(
+      clientRequestTime: clientRequestTime,
+      jsonrpc: jsonrpc,
+    );
+  }
+
+  final int? clientRequestTime;
+  final String jsonrpc;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (clientRequestTime != null) {
+      __result['clientRequestTime'] = clientRequestTime;
+    }
+    __result['jsonrpc'] = jsonrpc;
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('clientRequestTime');
+      try {
+        final clientRequestTime = obj['clientRequestTime'];
+        if (clientRequestTime != null && !(clientRequestTime is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('jsonrpc');
+      try {
+        if (!obj.containsKey('jsonrpc')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final jsonrpc = obj['jsonrpc'];
+        if (jsonrpc == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(jsonrpc is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type Message');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is Message && other.runtimeType == Message) {
+      return clientRequestTime == other.clientRequestTime &&
+          jsonrpc == other.jsonrpc &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        clientRequestTime,
+        jsonrpc,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
+class NotificationMessage implements IncomingMessage, ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    NotificationMessage.canParse,
+    NotificationMessage.fromJson,
+  );
+
+  NotificationMessage({
+    this.clientRequestTime,
+    required this.jsonrpc,
+    required this.method,
+    this.params,
+  });
+  static NotificationMessage fromJson(Map<String, Object?> json) {
+    final clientRequestTimeJson = json['clientRequestTime'];
+    final clientRequestTime = clientRequestTimeJson as int?;
+    final jsonrpcJson = json['jsonrpc'];
+    final jsonrpc = jsonrpcJson as String;
+    final methodJson = json['method'];
+    final method = Method.fromJson(methodJson as String);
+    final paramsJson = json['params'];
+    final params = paramsJson;
+    return NotificationMessage(
+      clientRequestTime: clientRequestTime,
+      jsonrpc: jsonrpc,
+      method: method,
+      params: params,
+    );
+  }
+
+  final int? clientRequestTime;
+  final String jsonrpc;
+  final Method method;
+  final Object? params;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (clientRequestTime != null) {
+      __result['clientRequestTime'] = clientRequestTime;
+    }
+    __result['jsonrpc'] = jsonrpc;
+    __result['method'] = method.toJson();
+    if (params != null) {
+      __result['params'] = params;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('clientRequestTime');
+      try {
+        final clientRequestTime = obj['clientRequestTime'];
+        if (clientRequestTime != null && !(clientRequestTime is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('jsonrpc');
+      try {
+        if (!obj.containsKey('jsonrpc')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final jsonrpc = obj['jsonrpc'];
+        if (jsonrpc == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(jsonrpc is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('method');
+      try {
+        if (!obj.containsKey('method')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final method = obj['method'];
+        if (method == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(Method.canParse(method, reporter))) {
+          reporter.reportError('must be of type Method');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type NotificationMessage');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is NotificationMessage &&
+        other.runtimeType == NotificationMessage) {
+      return clientRequestTime == other.clientRequestTime &&
+          jsonrpc == other.jsonrpc &&
+          method == other.method &&
+          params == other.params &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        clientRequestTime,
+        jsonrpc,
+        method,
+        params,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 class Outline implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     Outline.canParse,
@@ -1598,6 +1953,432 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class RequestMessage implements IncomingMessage, ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    RequestMessage.canParse,
+    RequestMessage.fromJson,
+  );
+
+  RequestMessage({
+    this.clientRequestTime,
+    required this.id,
+    required this.jsonrpc,
+    required this.method,
+    this.params,
+  });
+  static RequestMessage fromJson(Map<String, Object?> json) {
+    final clientRequestTimeJson = json['clientRequestTime'];
+    final clientRequestTime = clientRequestTimeJson as int?;
+    final idJson = json['id'];
+    final id = idJson is int
+        ? Either2<int, String>.t1(idJson)
+        : (idJson is String
+            ? Either2<int, String>.t2(idJson)
+            : (throw '''$idJson was not one of (int, String)'''));
+    final jsonrpcJson = json['jsonrpc'];
+    final jsonrpc = jsonrpcJson as String;
+    final methodJson = json['method'];
+    final method = Method.fromJson(methodJson as String);
+    final paramsJson = json['params'];
+    final params = paramsJson;
+    return RequestMessage(
+      clientRequestTime: clientRequestTime,
+      id: id,
+      jsonrpc: jsonrpc,
+      method: method,
+      params: params,
+    );
+  }
+
+  final int? clientRequestTime;
+  final Either2<int, String> id;
+  final String jsonrpc;
+  final Method method;
+  final Object? params;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (clientRequestTime != null) {
+      __result['clientRequestTime'] = clientRequestTime;
+    }
+    __result['id'] = id;
+    __result['jsonrpc'] = jsonrpc;
+    __result['method'] = method.toJson();
+    if (params != null) {
+      __result['params'] = params;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('clientRequestTime');
+      try {
+        final clientRequestTime = obj['clientRequestTime'];
+        if (clientRequestTime != null && !(clientRequestTime is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('id');
+      try {
+        if (!obj.containsKey('id')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final id = obj['id'];
+        if (id == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((id is int || id is String))) {
+          reporter.reportError('must be of type Either2<int, String>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('jsonrpc');
+      try {
+        if (!obj.containsKey('jsonrpc')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final jsonrpc = obj['jsonrpc'];
+        if (jsonrpc == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(jsonrpc is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('method');
+      try {
+        if (!obj.containsKey('method')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final method = obj['method'];
+        if (method == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(Method.canParse(method, reporter))) {
+          reporter.reportError('must be of type Method');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type RequestMessage');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is RequestMessage && other.runtimeType == RequestMessage) {
+      return clientRequestTime == other.clientRequestTime &&
+          id == other.id &&
+          jsonrpc == other.jsonrpc &&
+          method == other.method &&
+          params == other.params &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        clientRequestTime,
+        id,
+        jsonrpc,
+        method,
+        params,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
+class ResponseError implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    ResponseError.canParse,
+    ResponseError.fromJson,
+  );
+
+  ResponseError({
+    required this.code,
+    this.data,
+    required this.message,
+  });
+  static ResponseError fromJson(Map<String, Object?> json) {
+    final codeJson = json['code'];
+    final code = ErrorCodes.fromJson(codeJson as int);
+    final dataJson = json['data'];
+    final data = dataJson as String?;
+    final messageJson = json['message'];
+    final message = messageJson as String;
+    return ResponseError(
+      code: code,
+      data: data,
+      message: message,
+    );
+  }
+
+  final ErrorCodes code;
+
+  /// A string that contains additional information about the error. Can be
+  /// omitted.
+  final String? data;
+  final String message;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['code'] = code.toJson();
+    if (data != null) {
+      __result['data'] = data;
+    }
+    __result['message'] = message;
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('code');
+      try {
+        if (!obj.containsKey('code')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final code = obj['code'];
+        if (code == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(ErrorCodes.canParse(code, reporter))) {
+          reporter.reportError('must be of type ErrorCodes');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('data');
+      try {
+        final data = obj['data'];
+        if (data != null && !(data is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('message');
+      try {
+        if (!obj.containsKey('message')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final message = obj['message'];
+        if (message == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(message is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type ResponseError');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is ResponseError && other.runtimeType == ResponseError) {
+      return code == other.code &&
+          data == other.data &&
+          message == other.message &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        code,
+        data,
+        message,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
+class ResponseMessage implements Message, ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    ResponseMessage.canParse,
+    ResponseMessage.fromJson,
+  );
+
+  ResponseMessage({
+    this.clientRequestTime,
+    this.error,
+    this.id,
+    required this.jsonrpc,
+    this.result,
+  });
+  static ResponseMessage fromJson(Map<String, Object?> json) {
+    final clientRequestTimeJson = json['clientRequestTime'];
+    final clientRequestTime = clientRequestTimeJson as int?;
+    final errorJson = json['error'];
+    final error = errorJson != null
+        ? ResponseError.fromJson(errorJson as Map<String, Object?>)
+        : null;
+    final idJson = json['id'];
+    final id = idJson == null
+        ? null
+        : (idJson is int
+            ? Either2<int, String>.t1(idJson)
+            : (idJson is String
+                ? Either2<int, String>.t2(idJson)
+                : (throw '''$idJson was not one of (int, String)''')));
+    final jsonrpcJson = json['jsonrpc'];
+    final jsonrpc = jsonrpcJson as String;
+    final resultJson = json['result'];
+    final result = resultJson;
+    return ResponseMessage(
+      clientRequestTime: clientRequestTime,
+      error: error,
+      id: id,
+      jsonrpc: jsonrpc,
+      result: result,
+    );
+  }
+
+  final int? clientRequestTime;
+  final ResponseError? error;
+  final Either2<int, String>? id;
+  final String jsonrpc;
+  final Object? result;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (clientRequestTime != null) {
+      __result['clientRequestTime'] = clientRequestTime;
+    }
+    __result['id'] = id;
+    __result['jsonrpc'] = jsonrpc;
+    if (error != null && result != null) {
+      throw 'result and error cannot both be set';
+    } else if (error != null) {
+      __result['error'] = error;
+    } else {
+      __result['result'] = result;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('clientRequestTime');
+      try {
+        final clientRequestTime = obj['clientRequestTime'];
+        if (clientRequestTime != null && !(clientRequestTime is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('error');
+      try {
+        final error = obj['error'];
+        if (error != null && !(ResponseError.canParse(error, reporter))) {
+          reporter.reportError('must be of type ResponseError');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('id');
+      try {
+        if (!obj.containsKey('id')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final id = obj['id'];
+        if (id != null && !((id is int || id is String))) {
+          reporter.reportError('must be of type Either2<int, String>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('jsonrpc');
+      try {
+        if (!obj.containsKey('jsonrpc')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final jsonrpc = obj['jsonrpc'];
+        if (jsonrpc == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(jsonrpc is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type ResponseMessage');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is ResponseMessage && other.runtimeType == ResponseMessage) {
+      return clientRequestTime == other.clientRequestTime &&
+          error == other.error &&
+          id == other.id &&
+          jsonrpc == other.jsonrpc &&
+          result == other.result &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        clientRequestTime,
+        error,
+        id,
+        jsonrpc,
+        result,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 class SnippetTextEdit implements TextEdit, ToJsonable {
   static const jsonHandler = LspJsonHandler(
     SnippetTextEdit.canParse,
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 4f05563..84ccaac 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -23783,105 +23783,6 @@
   bool operator ==(Object o) => o is MarkupKind && o._value == _value;
 }
 
-class Message implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    Message.canParse,
-    Message.fromJson,
-  );
-
-  Message({
-    this.clientRequestTime,
-    required this.jsonrpc,
-  });
-  static Message fromJson(Map<String, Object?> json) {
-    if (RequestMessage.canParse(json, nullLspJsonReporter)) {
-      return RequestMessage.fromJson(json);
-    }
-    if (NotificationMessage.canParse(json, nullLspJsonReporter)) {
-      return NotificationMessage.fromJson(json);
-    }
-    if (ResponseMessage.canParse(json, nullLspJsonReporter)) {
-      return ResponseMessage.fromJson(json);
-    }
-    final clientRequestTimeJson = json['clientRequestTime'];
-    final clientRequestTime = clientRequestTimeJson as int?;
-    final jsonrpcJson = json['jsonrpc'];
-    final jsonrpc = jsonrpcJson as String;
-    return Message(
-      clientRequestTime: clientRequestTime,
-      jsonrpc: jsonrpc,
-    );
-  }
-
-  final int? clientRequestTime;
-  final String jsonrpc;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (clientRequestTime != null) {
-      __result['clientRequestTime'] = clientRequestTime;
-    }
-    __result['jsonrpc'] = jsonrpc;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('clientRequestTime');
-      try {
-        final clientRequestTime = obj['clientRequestTime'];
-        if (clientRequestTime != null && !(clientRequestTime is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('jsonrpc');
-      try {
-        if (!obj.containsKey('jsonrpc')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final jsonrpc = obj['jsonrpc'];
-        if (jsonrpc == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(jsonrpc is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type Message');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is Message && other.runtimeType == Message) {
-      return clientRequestTime == other.clientRequestTime &&
-          jsonrpc == other.jsonrpc &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        clientRequestTime,
-        jsonrpc,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class MessageActionItem implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     MessageActionItem.canParse,
@@ -27218,137 +27119,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class NotificationMessage implements Message, IncomingMessage, ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    NotificationMessage.canParse,
-    NotificationMessage.fromJson,
-  );
-
-  NotificationMessage({
-    this.clientRequestTime,
-    required this.jsonrpc,
-    required this.method,
-    this.params,
-  });
-  static NotificationMessage fromJson(Map<String, Object?> json) {
-    final clientRequestTimeJson = json['clientRequestTime'];
-    final clientRequestTime = clientRequestTimeJson as int?;
-    final jsonrpcJson = json['jsonrpc'];
-    final jsonrpc = jsonrpcJson as String;
-    final methodJson = json['method'];
-    final method = Method.fromJson(methodJson as String);
-    final paramsJson = json['params'];
-    final params = paramsJson;
-    return NotificationMessage(
-      clientRequestTime: clientRequestTime,
-      jsonrpc: jsonrpc,
-      method: method,
-      params: params,
-    );
-  }
-
-  final int? clientRequestTime;
-  final String jsonrpc;
-
-  /// The method to be invoked.
-  final Method method;
-
-  /// The notification's params.
-  final Object? params;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (clientRequestTime != null) {
-      __result['clientRequestTime'] = clientRequestTime;
-    }
-    __result['jsonrpc'] = jsonrpc;
-    __result['method'] = method.toJson();
-    if (params != null) {
-      __result['params'] = params;
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('clientRequestTime');
-      try {
-        final clientRequestTime = obj['clientRequestTime'];
-        if (clientRequestTime != null && !(clientRequestTime is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('jsonrpc');
-      try {
-        if (!obj.containsKey('jsonrpc')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final jsonrpc = obj['jsonrpc'];
-        if (jsonrpc == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(jsonrpc is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('method');
-      try {
-        if (!obj.containsKey('method')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final method = obj['method'];
-        if (method == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(Method.canParse(method, reporter))) {
-          reporter.reportError('must be of type Method');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type NotificationMessage');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is NotificationMessage &&
-        other.runtimeType == NotificationMessage) {
-      return clientRequestTime == other.clientRequestTime &&
-          jsonrpc == other.jsonrpc &&
-          method == other.method &&
-          params == other.params &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        clientRequestTime,
-        jsonrpc,
-        method,
-        params,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class OptionalVersionedTextDocumentIdentifier
     implements TextDocumentIdentifier, ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -30843,168 +30613,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class RequestMessage implements Message, IncomingMessage, ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    RequestMessage.canParse,
-    RequestMessage.fromJson,
-  );
-
-  RequestMessage({
-    this.clientRequestTime,
-    required this.id,
-    required this.jsonrpc,
-    required this.method,
-    this.params,
-  });
-  static RequestMessage fromJson(Map<String, Object?> json) {
-    final clientRequestTimeJson = json['clientRequestTime'];
-    final clientRequestTime = clientRequestTimeJson as int?;
-    final idJson = json['id'];
-    final id = idJson is int
-        ? Either2<int, String>.t1(idJson)
-        : (idJson is String
-            ? Either2<int, String>.t2(idJson)
-            : (throw '''$idJson was not one of (int, String)'''));
-    final jsonrpcJson = json['jsonrpc'];
-    final jsonrpc = jsonrpcJson as String;
-    final methodJson = json['method'];
-    final method = Method.fromJson(methodJson as String);
-    final paramsJson = json['params'];
-    final params = paramsJson;
-    return RequestMessage(
-      clientRequestTime: clientRequestTime,
-      id: id,
-      jsonrpc: jsonrpc,
-      method: method,
-      params: params,
-    );
-  }
-
-  final int? clientRequestTime;
-
-  /// The request id.
-  final Either2<int, String> id;
-  final String jsonrpc;
-
-  /// The method to be invoked.
-  final Method method;
-
-  /// The method's params.
-  final Object? params;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (clientRequestTime != null) {
-      __result['clientRequestTime'] = clientRequestTime;
-    }
-    __result['id'] = id;
-    __result['jsonrpc'] = jsonrpc;
-    __result['method'] = method.toJson();
-    if (params != null) {
-      __result['params'] = params;
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('clientRequestTime');
-      try {
-        final clientRequestTime = obj['clientRequestTime'];
-        if (clientRequestTime != null && !(clientRequestTime is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('id');
-      try {
-        if (!obj.containsKey('id')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final id = obj['id'];
-        if (id == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((id is int || id is String))) {
-          reporter.reportError('must be of type Either2<int, String>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('jsonrpc');
-      try {
-        if (!obj.containsKey('jsonrpc')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final jsonrpc = obj['jsonrpc'];
-        if (jsonrpc == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(jsonrpc is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('method');
-      try {
-        if (!obj.containsKey('method')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final method = obj['method'];
-        if (method == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(Method.canParse(method, reporter))) {
-          reporter.reportError('must be of type Method');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type RequestMessage');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is RequestMessage && other.runtimeType == RequestMessage) {
-      return clientRequestTime == other.clientRequestTime &&
-          id == other.id &&
-          jsonrpc == other.jsonrpc &&
-          method == other.method &&
-          params == other.params &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        clientRequestTime,
-        id,
-        jsonrpc,
-        method,
-        params,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class ResourceOperationKind implements ToJsonable {
   const ResourceOperationKind._(this._value);
   const ResourceOperationKind.fromJson(this._value);
@@ -31042,286 +30650,6 @@
       o is ResourceOperationKind && o._value == _value;
 }
 
-class ResponseError implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ResponseError.canParse,
-    ResponseError.fromJson,
-  );
-
-  ResponseError({
-    required this.code,
-    this.data,
-    required this.message,
-  });
-  static ResponseError fromJson(Map<String, Object?> json) {
-    final codeJson = json['code'];
-    final code = ErrorCodes.fromJson(codeJson as int);
-    final dataJson = json['data'];
-    final data = dataJson as String?;
-    final messageJson = json['message'];
-    final message = messageJson as String;
-    return ResponseError(
-      code: code,
-      data: data,
-      message: message,
-    );
-  }
-
-  /// A number indicating the error type that occurred.
-  final ErrorCodes code;
-
-  /// A string that contains additional information about the error. Can be
-  /// omitted.
-  final String? data;
-
-  /// A string providing a short description of the error.
-  final String message;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['code'] = code.toJson();
-    if (data != null) {
-      __result['data'] = data;
-    }
-    __result['message'] = message;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('code');
-      try {
-        if (!obj.containsKey('code')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final code = obj['code'];
-        if (code == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(ErrorCodes.canParse(code, reporter))) {
-          reporter.reportError('must be of type ErrorCodes');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('data');
-      try {
-        final data = obj['data'];
-        if (data != null && !(data is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('message');
-      try {
-        if (!obj.containsKey('message')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final message = obj['message'];
-        if (message == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(message is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type ResponseError');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ResponseError && other.runtimeType == ResponseError) {
-      return code == other.code &&
-          data == other.data &&
-          message == other.message &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        code,
-        data,
-        message,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
-class ResponseMessage implements Message, ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ResponseMessage.canParse,
-    ResponseMessage.fromJson,
-  );
-
-  ResponseMessage({
-    this.clientRequestTime,
-    this.error,
-    this.id,
-    required this.jsonrpc,
-    this.result,
-  });
-  static ResponseMessage fromJson(Map<String, Object?> json) {
-    final clientRequestTimeJson = json['clientRequestTime'];
-    final clientRequestTime = clientRequestTimeJson as int?;
-    final errorJson = json['error'];
-    final error = errorJson != null
-        ? ResponseError.fromJson(errorJson as Map<String, Object?>)
-        : null;
-    final idJson = json['id'];
-    final id = idJson == null
-        ? null
-        : (idJson is int
-            ? Either2<int, String>.t1(idJson)
-            : (idJson is String
-                ? Either2<int, String>.t2(idJson)
-                : (throw '''$idJson was not one of (int, String)''')));
-    final jsonrpcJson = json['jsonrpc'];
-    final jsonrpc = jsonrpcJson as String;
-    final resultJson = json['result'];
-    final result = resultJson;
-    return ResponseMessage(
-      clientRequestTime: clientRequestTime,
-      error: error,
-      id: id,
-      jsonrpc: jsonrpc,
-      result: result,
-    );
-  }
-
-  final int? clientRequestTime;
-
-  /// The error object in case a request fails.
-  final ResponseError? error;
-
-  /// The request id.
-  final Either2<int, String>? id;
-  final String jsonrpc;
-
-  /// The result of a request. This member is REQUIRED on success. This member
-  /// MUST NOT exist if there was an error invoking the method.
-  final Object? result;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (clientRequestTime != null) {
-      __result['clientRequestTime'] = clientRequestTime;
-    }
-    __result['id'] = id;
-    __result['jsonrpc'] = jsonrpc;
-    if (error != null && result != null) {
-      throw 'result and error cannot both be set';
-    } else if (error != null) {
-      __result['error'] = error;
-    } else {
-      __result['result'] = result;
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('clientRequestTime');
-      try {
-        final clientRequestTime = obj['clientRequestTime'];
-        if (clientRequestTime != null && !(clientRequestTime is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('error');
-      try {
-        final error = obj['error'];
-        if (error != null && !(ResponseError.canParse(error, reporter))) {
-          reporter.reportError('must be of type ResponseError');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('id');
-      try {
-        if (!obj.containsKey('id')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final id = obj['id'];
-        if (id != null && !((id is int || id is String))) {
-          reporter.reportError('must be of type Either2<int, String>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('jsonrpc');
-      try {
-        if (!obj.containsKey('jsonrpc')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final jsonrpc = obj['jsonrpc'];
-        if (jsonrpc == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(jsonrpc is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type ResponseMessage');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ResponseMessage && other.runtimeType == ResponseMessage) {
-      return clientRequestTime == other.clientRequestTime &&
-          error == other.error &&
-          id == other.id &&
-          jsonrpc == other.jsonrpc &&
-          result == other.result &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        clientRequestTime,
-        error,
-        id,
-        jsonrpc,
-        result,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class SaveOptions implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     SaveOptions.canParse,
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
index 5b4d3b1..57cce17 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
@@ -8,6 +8,8 @@
 import 'package:analysis_server/src/lsp/json_parsing.dart';
 import 'package:analysis_server/src/protocol/protocol_internal.dart';
 
+import 'protocol_custom_generated.dart';
+
 const jsonRpcVersion = '2.0';
 
 const NullJsonHandler = LspJsonHandler<Null>(_alwaysTrue, _alwaysNull);
@@ -264,14 +266,6 @@
   }
 }
 
-/// A base class containing the fields common to RequestMessage and
-/// NotificationMessage to simplify handling.
-abstract class IncomingMessage {
-  int? get clientRequestTime;
-  Method get method;
-  dynamic get params;
-}
-
 /// A helper to allow handlers to declare both a JSON validation function and
 /// parse function.
 class LspJsonHandler<T> {
diff --git a/pkg/analysis_server/lib/src/analytics/percentile_calculator.dart b/pkg/analysis_server/lib/src/analytics/percentile_calculator.dart
index b1a313c..d818ab5 100644
--- a/pkg/analysis_server/lib/src/analytics/percentile_calculator.dart
+++ b/pkg/analysis_server/lib/src/analytics/percentile_calculator.dart
@@ -35,16 +35,17 @@
       return 0;
     }
     var targetIndex = _valueCount * percentile / 100;
-    var values = _counts.keys.toList()..sort();
+    var entries = _counts.entries.toList()
+      ..sort((first, second) => first.key.compareTo(second.key));
     // The number of values represented by walking the counts.
     var accumulation = 0;
-    for (var i = 0; i < values.length; i++) {
-      var value = values[i];
-      accumulation += _counts[value]!;
+    for (var i = 0; i < entries.length; i++) {
+      var entry = entries[i];
+      accumulation += entry.value;
       if (accumulation >= targetIndex) {
         // We've now accounted for [targetIndex] values, which includes the
         // median value.
-        return value;
+        return entry.key;
       }
     }
     throw StateError('');
@@ -53,6 +54,7 @@
   /// Return a string that is suitable for sending to the analytics service.
   String toAnalyticsString() {
     var buffer = StringBuffer();
+    buffer.write(_valueCount);
     buffer.write('[');
     for (var p = 5; p <= 100; p += 5) {
       if (p > 5) {
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index bbcd39b..dbc2832 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -350,21 +350,19 @@
         if (message is ResponseMessage) {
           handleClientResponse(message);
         } else if (message is IncomingMessage) {
-          final incomingMessage = message as IncomingMessage;
-
           // Record performance information for the request.
           final performance = OperationPerformanceImpl('<root>');
           await performance.runAsync('request', (performance) async {
             final requestPerformance = RequestPerformance(
-              operation: incomingMessage.method.toString(),
+              operation: message.method.toString(),
               performance: performance,
-              requestLatency: incomingMessage.timeSinceRequest,
+              requestLatency: message.timeSinceRequest,
             );
             recentPerformance.requests.add(requestPerformance);
 
             final messageInfo = MessageInfo(
               performance: performance,
-              timeSinceRequest: incomingMessage.timeSinceRequest,
+              timeSinceRequest: message.timeSinceRequest,
             );
 
             if (message is RequestMessage) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index 439f0f4..769ed53 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -14,7 +15,7 @@
 class CreateConstructor extends CorrectionProducer {
   /// The name of the constructor being created.
   /// TODO(migration) We set this node when we have the change.
-  late ConstructorName _constructorName;
+  late String _constructorName;
 
   @override
   List<Object> get fixArguments => [_constructorName];
@@ -24,6 +25,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
+    var node = this.node;
     final argumentList = node.parent is ArgumentList ? node.parent : node;
     if (argumentList is ArgumentList) {
       var instanceCreation = argumentList.parent;
@@ -31,28 +33,32 @@
         await _proposeFromInstanceCreation(builder, instanceCreation);
       }
     } else {
-      await _proposeFromConstructorName(builder);
+      if (node is SimpleIdentifier) {
+        var parent = node.parent;
+        if (parent is ConstructorName) {
+          await _proposeFromConstructorName(builder, node, parent);
+          return;
+        }
+      }
+      var parent = node.thisOrAncestorOfType<EnumConstantDeclaration>();
+      if (parent != null) {
+        await _proposeFromEnumConstantDeclaration(builder, parent.name, parent);
+      }
     }
   }
 
-  Future<void> _proposeFromConstructorName(ChangeBuilder builder) async {
-    var name = node;
-    if (name is! SimpleIdentifier) {
-      return;
-    }
-
+  Future<void> _proposeFromConstructorName(ChangeBuilder builder,
+      SimpleIdentifier name, ConstructorName constructorName) async {
     InstanceCreationExpression? instanceCreation;
-    if (name.parent is ConstructorName) {
-      _constructorName = name.parent as ConstructorName;
-      if (_constructorName.name == name) {
-        // Type.name
-        if (_constructorName.parent is InstanceCreationExpression) {
-          instanceCreation =
-              _constructorName.parent as InstanceCreationExpression;
-          // new Type.name()
-          if (instanceCreation.constructorName != _constructorName) {
-            return;
-          }
+    _constructorName = constructorName.toSource();
+    if (constructorName.name == name) {
+      var grandParent = constructorName.parent;
+      // Type.name
+      if (grandParent is InstanceCreationExpression) {
+        instanceCreation = grandParent;
+        // new Type.name()
+        if (grandParent.constructorName != constructorName) {
+          return;
         }
       }
     }
@@ -63,7 +69,7 @@
     }
 
     // prepare target interface type
-    var targetType = _constructorName.type.type;
+    var targetType = constructorName.type.type;
     if (targetType is! InterfaceType) {
       return;
     }
@@ -91,28 +97,65 @@
       return;
     }
 
-    var targetFile = targetElement.source.fullName;
-    final instanceCreation_final = instanceCreation;
-    await builder.addDartFileEdit(targetFile, (builder) {
-      builder.addInsertion(targetLocation.offset, (builder) {
-        builder.write(targetLocation.prefix);
-        builder.writeConstructorDeclaration(targetElement.name,
-            argumentList: instanceCreation_final.argumentList,
-            constructorName: name,
-            constructorNameGroupName: 'NAME');
-        builder.write(targetLocation.suffix);
-      });
-      if (targetFile == file) {
-        builder.addLinkedPosition(range.node(name), 'NAME');
-      }
-    });
+    await _write(builder, name, targetElement, targetLocation,
+        constructorName: name, argumentList: instanceCreation.argumentList);
+  }
+
+  Future<void> _proposeFromEnumConstantDeclaration(ChangeBuilder builder,
+      SimpleIdentifier name, EnumConstantDeclaration parent) async {
+    var grandParent = parent.parent;
+    if (grandParent is! EnumDeclaration) {
+      return;
+    }
+    var targetElement = grandParent.declaredElement;
+    if (targetElement == null) {
+      return;
+    }
+
+    // prepare target interface type
+    var targetResult = await sessionHelper.getElementDeclaration(targetElement);
+    if (targetResult == null) {
+      return;
+    }
+
+    var targetNode = targetResult.node;
+    if (targetNode is! EnumDeclaration) {
+      return;
+    }
+
+    var targetUnit = targetResult.resolvedUnit;
+    if (targetUnit == null) {
+      return;
+    }
+
+    // prepare location
+    var targetLocation = CorrectionUtils(targetUnit)
+        .prepareEnumNewConstructorLocation(targetNode);
+    if (targetLocation == null) {
+      return;
+    }
+
+    var arguments = parent.arguments;
+    _constructorName =
+        '${targetNode.name}${arguments?.constructorSelector ?? ''}';
+
+    await _write(
+      builder,
+      name,
+      targetElement,
+      targetLocation,
+      isConst: true,
+      constructorName: arguments?.constructorSelector?.name,
+      argumentList: arguments?.argumentList,
+    );
   }
 
   Future<void> _proposeFromInstanceCreation(ChangeBuilder builder,
       InstanceCreationExpression instanceCreation) async {
-    _constructorName = instanceCreation.constructorName;
+    var constructorName = instanceCreation.constructorName;
+    _constructorName = constructorName.toSource();
     // should be synthetic default constructor
-    var constructorElement = _constructorName.staticElement;
+    var constructorElement = constructorName.staticElement;
     if (constructorElement == null ||
         !constructorElement.isDefaultConstructor ||
         !constructorElement.isSynthetic) {
@@ -153,4 +196,30 @@
       });
     });
   }
+
+  Future<void> _write(
+    ChangeBuilder builder,
+    SimpleIdentifier name,
+    ClassElement targetElement,
+    InsertionLocation targetLocation, {
+    SimpleIdentifier? constructorName,
+    bool isConst = false,
+    ArgumentList? argumentList,
+  }) async {
+    var targetFile = targetElement.source.fullName;
+    await builder.addDartFileEdit(targetFile, (builder) {
+      builder.addInsertion(targetLocation.offset, (builder) {
+        builder.write(targetLocation.prefix);
+        builder.writeConstructorDeclaration(targetElement.name,
+            isConst: isConst,
+            argumentList: argumentList,
+            constructorName: constructorName,
+            constructorNameGroupName: 'NAME');
+        builder.write(targetLocation.suffix);
+      });
+      if (targetFile == file) {
+        builder.addLinkedPosition(range.node(name), 'NAME');
+      }
+    });
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index 2faa043..5ceef0d 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -327,7 +327,7 @@
   status: needsEvaluation
 CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
   status: needsEvaluation
-CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR: 
+CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR:
   status: noFix
   since: 2.17
 CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
@@ -956,15 +956,12 @@
   status: hasFix
 CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT:
   status: hasFix
-  issue: https://github.com/dart-lang/sdk/issues/47643
 CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
-  status: needsFix
+  status: hasFix
   since: 2.17
-  issue: https://github.com/dart-lang/sdk/issues/48481
 CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
-  status: needsFix
+  status: hasFix
   since: 2.17
-  issue: https://github.com/dart-lang/sdk/issues/48481
 CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER:
   status: hasFix
 CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD:
@@ -1881,7 +1878,7 @@
 LintCode.use_decorated_box:
   status: needsEvaluation
 LintCode.use_enums:
-    status: hasFix
+  status: hasFix
 LintCode.use_full_hex_values_for_flutter_colors:
   status: hasFix
 LintCode.use_function_type_syntax_for_parameters:
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index dcb96bf..69727ef 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -230,6 +230,7 @@
 /// Computer for Dart "fix all in file" fixes.
 class FixInFileProcessor {
   final DartFixContext context;
+
   FixInFileProcessor(this.context);
 
   Future<List<Fix>> compute() async {
@@ -1090,6 +1091,12 @@
       AddEnumConstant.new,
       ChangeTo.getterOrSetter,
     ],
+    CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED: [
+      CreateConstructor.new,
+    ],
+    CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED: [
+      CreateConstructor.new,
+    ],
     CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: [
       ChangeTo.getterOrSetter,
       CreateGetter.new,
diff --git a/pkg/analysis_server/test/src/analytics/percentile_calculator_test.dart b/pkg/analysis_server/test/src/analytics/percentile_calculator_test.dart
index a6a1047..657961b 100644
--- a/pkg/analysis_server/test/src/analytics/percentile_calculator_test.dart
+++ b/pkg/analysis_server/test/src/analytics/percentile_calculator_test.dart
@@ -8,12 +8,12 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(PercentileTest);
+    defineReflectiveTests(PercentileCalculatorTest);
   });
 }
 
 @reflectiveTest
-class PercentileTest {
+class PercentileCalculatorTest {
   var calculator = PercentileCalculator();
 
   void test_clear() {
@@ -22,12 +22,12 @@
     }
     calculator.clear();
     expect(calculator.toAnalyticsString(),
-        '[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]');
+        '0[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]');
   }
 
   void test_toAnalyticsString_empty() {
     expect(calculator.toAnalyticsString(),
-        '[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]');
+        '0[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]');
   }
 
   void test_toAnalyticsString_evenDistribution() {
@@ -35,6 +35,6 @@
       calculator.addValue(i);
     }
     expect(calculator.toAnalyticsString(),
-        '[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]');
+        '100[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]');
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
index 196a197..c00ab29 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
@@ -168,4 +168,56 @@
 ''');
     assertLinkedGroup(change.linkedEditGroups[0], ['named(int ', 'named(1']);
   }
+
+  Future<void> test_undefined_enum_constructor_named() async {
+    await resolveTestCode('''
+enum E {
+  c.x();
+  const E.y();
+}
+''');
+    await assertHasFix('''
+enum E {
+  c.x();
+  const E.y();
+
+  const E.x();
+}
+''', matchFixMessage: "Create constructor 'E.x'");
+  }
+
+  Future<void> test_undefined_enum_constructor_unnamed() async {
+    await resolveTestCode('''
+enum E {
+  c;
+  const E.x();
+}
+''');
+    await assertHasFix('''
+enum E {
+  c;
+  const E.x();
+
+  const E();
+}
+''', matchFixMessage: "Create constructor 'E'");
+  }
+
+  @FailingTest(reason: 'parameter types should be inferred')
+  Future<void> test_undefined_enum_constructor_unnamed_parameters() async {
+    await resolveTestCode('''
+enum E {
+  c(1);
+  const E.x();
+}
+''');
+    await assertHasFix('''
+enum E {
+  c(1);
+  const E.x();
+
+  const E(int i);
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index d01feea..3ed9228 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -4,7 +4,6 @@
 
 import 'package:dart_style/dart_style.dart';
 
-import 'typescript.dart';
 import 'typescript_parser.dart';
 
 final formatter = DartFormatter();
@@ -786,7 +785,6 @@
   buffer.writeIndented('class ${interface.nameWithTypeArgs} ');
   final allBaseTypes =
       interface.baseTypes.map((t) => t.dartTypeWithTypeArgs).toList();
-  allBaseTypes.addAll(getSpecialBaseTypes(interface));
   allBaseTypes.add('ToJsonable');
   if (allBaseTypes.isNotEmpty) {
     buffer.writeIndented('implements ${allBaseTypes.join(', ')} ');
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index 57b545b..92e5880 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -196,15 +196,23 @@
 
   Field field(
     String name, {
+    String? comment,
     required String type,
     bool array = false,
     bool canBeUndefined = false,
   }) {
-    var fieldType =
+    final fieldType =
         array ? ArrayType(Type.identifier(type)) : Type.identifier(type);
+    final commentNode =
+        comment != null ? Comment(Token(TokenType.COMMENT, comment)) : null;
 
-    return Field(null, Token.identifier(name), fieldType,
-        allowsNull: false, allowsUndefined: canBeUndefined);
+    return Field(
+      commentNode,
+      Token.identifier(name),
+      fieldType,
+      allowsNull: false,
+      allowsUndefined: canBeUndefined,
+    );
   }
 
   final customTypes = <AstNode>[
@@ -218,6 +226,72 @@
       Token.identifier('LSPObject'),
       Type.Any,
     ),
+    interface('Message', [
+      field('jsonrpc', type: 'string'),
+      field('clientRequestTime', type: 'int', canBeUndefined: true),
+    ]),
+    interface(
+      'IncomingMessage',
+      [
+        field('method', type: 'Method'),
+        field('params', type: 'LSPAny', canBeUndefined: true),
+      ],
+      baseType: 'Message',
+    ),
+    interface(
+      'RequestMessage',
+      [
+        Field(
+          null,
+          Token.identifier('id'),
+          UnionType([Type.identifier('int'), Type.identifier('string')]),
+          allowsNull: false,
+          allowsUndefined: false,
+        )
+      ],
+      baseType: 'IncomingMessage',
+    ),
+    interface(
+      'NotificationMessage',
+      [],
+      baseType: 'IncomingMessage',
+    ),
+    interface(
+      'ResponseMessage',
+      [
+        Field(
+          null,
+          Token.identifier('id'),
+          UnionType([Type.identifier('int'), Type.identifier('string')]),
+          allowsNull: true,
+          allowsUndefined: false,
+        ),
+        field('result', type: 'LSPAny', canBeUndefined: true),
+        field('error', type: 'ResponseError', canBeUndefined: true),
+      ],
+      baseType: 'Message',
+    ),
+    interface(
+      'ResponseError',
+      [
+        field('code', type: 'ErrorCodes'),
+        field('message', type: 'string'),
+        // This is Object? normally, but since this class can be serialised
+        // we will crash if it data is set to something that can't be converted to
+        // JSON (for ex. Uri) so this forces anyone setting this to convert to a
+        // String.
+        field(
+          'data',
+          type: 'string',
+          canBeUndefined: true,
+          comment:
+              'A string that contains additional information about the error. '
+              'Can be omitted.',
+        ),
+      ],
+    ),
+    TypeAlias(null, Token.identifier('DocumentUri'), Type.identifier('string')),
+
     interface('DartDiagnosticServer', [field('port', type: 'int')]),
     interface('AnalyzerStatusParams', [field('isAnalyzing', type: 'boolean')]),
     interface('PublishClosingLabelsParams', [
@@ -326,34 +400,6 @@
   return customTypes;
 }
 
-/// Gets additional custom fields to be added to LSP Spec classes.
-///
-/// Non-standard fields should generally be avoided and must always allow
-/// undefined.
-List<Field> getCustomFields(String interfaceName) {
-  final additionalFields = <String, List<Field>>{
-    // Allow clients to pass a "clientRequestTime" against any incomine message
-    // so that we can capture latency information for requests for performance
-    // measurements.
-    'Message': [
-      Field(
-        null,
-        Token.identifier('clientRequestTime'),
-        Type.identifier('int'),
-        allowsNull: false,
-        allowsUndefined: true,
-      ),
-    ],
-  };
-
-  final fields = additionalFields[interfaceName] ?? [];
-  assert(
-    fields.every((field) => field.allowsUndefined),
-    'Any additional non-standard LSP field must allow undefined',
-  );
-  return fields;
-}
-
 Future<List<AstNode>> getSpecClasses(ArgResults args) async {
   var download = args[argDownload] as bool;
   if (download) {
@@ -366,7 +412,6 @@
       .map(parseString)
       .expand((f) => f)
       .where(includeTypeDefinitionInOutput)
-      .map(withCustomFields)
       .toList();
 
   // Generate an enum for all of the request methods to avoid strings.
@@ -417,26 +462,6 @@
   return true;
 }
 
-/// Returns [node] with any additional custom fields.
-AstNode withCustomFields(AstNode node) {
-  if (node is! Interface) {
-    return node;
-  }
-
-  final customFields = getCustomFields(node.name);
-  if (customFields.isEmpty) {
-    return node;
-  }
-
-  return Interface(
-    node.commentNode,
-    node.nameToken,
-    node.typeArgs,
-    node.baseTypes,
-    [...node.members, ...customFields],
-  );
-}
-
 /// Fetches and in-lines any includes that appear in [spec] in the form
 /// `{% include_relative types/uri.md %}`.
 Future<String> _fetchIncludes(String spec, Uri baseUri) async {
diff --git a/pkg/analysis_server/tool/lsp_spec/typescript.dart b/pkg/analysis_server/tool/lsp_spec/typescript.dart
index 0027724..0ca98c3 100644
--- a/pkg/analysis_server/tool/lsp_spec/typescript.dart
+++ b/pkg/analysis_server/tool/lsp_spec/typescript.dart
@@ -43,21 +43,6 @@
   return comment.trim();
 }
 
-/// Improves comments in generated code to support where types may have been
-/// altered (for ex. with [getImprovedType] above).
-String? getImprovedComment(String interfaceName, String fieldName) {
-  const improvedComments = <String, Map<String, String>>{
-    'ResponseError': {
-      'data':
-          '// A string that contains additional information about the error. Can be omitted.',
-    },
-  };
-
-  final interface = improvedComments[interfaceName];
-
-  return interface != null ? interface[fieldName] : null;
-}
-
 /// Improves types in generated code, including:
 ///
 /// - Fixes up some enum types that are not as specific as they could be in the
@@ -96,22 +81,6 @@
     'FoldingRange': {
       'kind': 'FoldingRangeKind',
     },
-    'ResponseError': {
-      'code': 'ErrorCodes',
-      // This is Object? normally, but since this class can be serialised
-      // we will crash if it data is set to something that can't be converted to
-      // JSON (for ex. Uri) so this forces anyone setting this to convert to a
-      // String.
-      'data': 'String',
-    },
-    'NotificationMessage': {
-      'method': 'Method',
-      'params': 'object',
-    },
-    'RequestMessage': {
-      'method': 'Method',
-      'params': 'object',
-    },
     'SymbolInformation': {
       'kind': 'SymbolKind',
     },
@@ -134,26 +103,30 @@
   return interface != null ? interface[fieldName] : null;
 }
 
-List<String> getSpecialBaseTypes(Interface interface) {
-  if (interface.name == 'RequestMessage' ||
-      interface.name == 'NotificationMessage') {
-    return ['IncomingMessage'];
-  } else {
-    return [];
-  }
-}
-
 /// Removes types that are in the spec that we don't want to emit.
 bool includeTypeDefinitionInOutput(AstNode node) {
-  // InitializeError is not used for v3.0 (Feb 2017) and by dropping it we don't
-  // have to handle any cases where both a namespace and interfaces are declared
-  // with the same name.
-  return node.name != 'InitializeError' &&
-      // We don't use `InitializeErrorCodes` as it contains only one error code
-      // that has been deprecated and we've never used.
-      node.name != 'InitializeErrorCodes' &&
-      // We don't emit MarkedString because it gets mapped to a simple String
-      // when getting the .dartType for it.
-      // .startsWith() because there are inline types that will be generated.
-      !node.name.startsWith('MarkedString');
+  const ignoredTypes = {
+    // InitializeError is not used for v3.0 (Feb 2017) and by dropping it we don't
+    // have to handle any cases where both a namespace and interfaces are declared
+    // with the same name.
+    'InitializeError',
+    // We don't use `InitializeErrorCodes` as it contains only one error code
+    // that has been deprecated and we've never used.
+    'InitializeErrorCodes',
+    // Handled in custom classes now in preperation for JSON meta model which
+    // does not specify them.
+    'Message',
+    'RequestMessage',
+    'NotificationMessage',
+    'ResponseMessage',
+    'ResponseError',
+  };
+  const ignoredPrefixes = {
+    // We don't emit MarkedString because it gets mapped to a simple String
+    // when getting the .dartType for it.
+    'MarkedString'
+  };
+  final shouldIgnore = ignoredTypes.contains(node.name) ||
+      ignoredPrefixes.any((ignore) => node.name.startsWith(ignore));
+  return !shouldIgnore;
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/typescript_parser.dart b/pkg/analysis_server/tool/lsp_spec/typescript_parser.dart
index d2b2eab..d074460 100644
--- a/pkg/analysis_server/tool/lsp_spec/typescript_parser.dart
+++ b/pkg/analysis_server/tool/lsp_spec/typescript_parser.dart
@@ -378,12 +378,6 @@
     type = _type(containerName, name.lexeme,
         includeUndefined: canBeUndefined, improveTypes: true);
 
-    // Overwrite comment if we have an improved one.
-    final improvedComment = getImprovedComment(containerName, name.lexeme);
-    leadingComment = improvedComment != null
-        ? Comment(Token(TokenType.COMMENT, improvedComment))
-        : leadingComment;
-
     // Some fields have weird comments like this in the spec:
     //     {@link MessageType}
     // These seem to be the correct type of the field, while the field is
diff --git a/pkg/analyzer/analysis_options.yaml b/pkg/analyzer/analysis_options.yaml
index 6a2cacc..2b2890a 100644
--- a/pkg/analyzer/analysis_options.yaml
+++ b/pkg/analyzer/analysis_options.yaml
@@ -39,3 +39,4 @@
     - depend_on_referenced_packages
     - unawaited_futures
     - unnecessary_parenthesis
+    - use_super_parameters
diff --git a/pkg/analyzer/lib/exception/exception.dart b/pkg/analyzer/lib/exception/exception.dart
index d7cf039..34c2cf8 100644
--- a/pkg/analyzer/lib/exception/exception.dart
+++ b/pkg/analyzer/lib/exception/exception.dart
@@ -96,8 +96,8 @@
 /// This is still considered an exceptional situation and will be sent to crash
 /// reporting.
 class SilentException extends CaughtException {
-  SilentException(String message, Object exception, StackTrace stackTrace)
-      : super.withMessage(message, exception, stackTrace);
+  SilentException(String super.message, super.exception, super.stackTrace)
+      : super.withMessage();
 
   /// Create a [SilentException] to wrap a [CaughtException], adding a
   /// [message].
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index b55664e..4f6a36f 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -328,8 +328,7 @@
 
 /// An in-memory implementation of [File].
 class _MemoryFile extends _MemoryResource implements File {
-  _MemoryFile(MemoryResourceProvider provider, String path)
-      : super(provider, path);
+  _MemoryFile(super.provider, super.path);
 
   @override
   bool get exists {
@@ -425,8 +424,7 @@
 
 /// An in-memory implementation of [Folder].
 class _MemoryFolder extends _MemoryResource implements Folder {
-  _MemoryFolder(MemoryResourceProvider provider, String path)
-      : super(provider, path);
+  _MemoryFolder(super.provider, super.path);
 
   @override
   bool get exists {
diff --git a/pkg/analyzer/lib/file_system/overlay_file_system.dart b/pkg/analyzer/lib/file_system/overlay_file_system.dart
index 710ce97..469de5d 100644
--- a/pkg/analyzer/lib/file_system/overlay_file_system.dart
+++ b/pkg/analyzer/lib/file_system/overlay_file_system.dart
@@ -119,8 +119,7 @@
 class _OverlayFile extends _OverlayResource implements File {
   /// Initialize a newly created file to have the given [provider] and to
   /// correspond to the given [file] from the provider's base resource provider.
-  _OverlayFile(OverlayResourceProvider provider, File file)
-      : super(provider, file);
+  _OverlayFile(super.provider, File super.file);
 
   @Deprecated('Use watch() instead')
   @override
@@ -234,8 +233,7 @@
   /// Initialize a newly created folder to have the given [provider] and to
   /// correspond to the given [folder] from the provider's base resource
   /// provider.
-  _OverlayFolder(OverlayResourceProvider provider, Folder folder)
-      : super(provider, folder);
+  _OverlayFolder(super.provider, Folder super.folder);
 
   @Deprecated('Use watch() instead')
   @override
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 6b75c0c..962862f 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -94,7 +94,7 @@
 
 /// A `dart:io` based implementation of [File].
 class _PhysicalFile extends _PhysicalResource implements File {
-  _PhysicalFile(io.File file) : super(file);
+  _PhysicalFile(io.File super.file);
 
   @Deprecated('Use watch() instead')
   @override
@@ -207,7 +207,7 @@
 
 /// A `dart:io` based implementation of [Folder].
 class _PhysicalFolder extends _PhysicalResource implements Folder {
-  _PhysicalFolder(io.Directory directory) : super(directory);
+  _PhysicalFolder(io.Directory super.directory);
 
   @Deprecated('Use watch() instead')
   @override
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
index c12b308..01d99e3 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
@@ -37,14 +37,11 @@
   const AnalysisOptionsErrorCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsErrorCode.${uniqueName ?? name}',
@@ -90,14 +87,11 @@
   const AnalysisOptionsHintCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsHintCode.${uniqueName ?? name}',
@@ -240,14 +234,11 @@
   const AnalysisOptionsWarningCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsWarningCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart b/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
index 07cad9d..cc59e96 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
@@ -275,9 +275,9 @@
   /// The string at [previousStringIndex] requested the opposite.
   final bool requestedValue;
 
-  ConflictingFlags(int stringIndex, this.previousStringIndex, this.feature,
+  ConflictingFlags(super.stringIndex, this.previousStringIndex, this.feature,
       this.requestedValue)
-      : super._(stringIndex);
+      : super._();
 
   @override
   String get flag => feature.stringForValue(requestedValue);
@@ -381,7 +381,7 @@
   /// Information about the feature associated with the error.
   final ExperimentalFeature feature;
 
-  IllegalUseOfExpiredFlag(int flagIndex, this.feature) : super._(flagIndex);
+  IllegalUseOfExpiredFlag(super.flagIndex, this.feature) : super._();
 
   @override
   String get flag => feature.stringForValue(!feature.isEnabledByDefault);
@@ -405,7 +405,7 @@
   /// Information about the feature associated with the warning.
   final ExperimentalFeature feature;
 
-  UnnecessaryUseOfExpiredFlag(int flagIndex, this.feature) : super._(flagIndex);
+  UnnecessaryUseOfExpiredFlag(super.flagIndex, this.feature) : super._();
 
   @override
   String get flag => feature.stringForValue(feature.isEnabledByDefault);
@@ -423,7 +423,7 @@
   @override
   final String flag;
 
-  UnrecognizedFlag(int flagIndex, this.flag) : super._(flagIndex);
+  UnrecognizedFlag(super.flagIndex, this.flag) : super._();
 
   @override
   bool get isError => true;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart b/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
index f87ee8e..5de8ccb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
@@ -64,8 +64,7 @@
 
 /// [FileContentCache] that caches never.
 class _FileContentCacheEphemeral extends FileContentCache {
-  _FileContentCacheEphemeral(ResourceProvider resourceProvider)
-      : super._(resourceProvider);
+  _FileContentCacheEphemeral(super.resourceProvider) : super._();
 
   @override
   FileContent get(String path) {
@@ -77,8 +76,7 @@
 class _FileContentCacheImpl extends FileContentCache {
   final Map<String, FileContent> _pathToFile = {};
 
-  _FileContentCacheImpl(ResourceProvider resourceProvider)
-      : super._(resourceProvider);
+  _FileContentCacheImpl(super.resourceProvider) : super._();
 
   @override
   FileContent get(String path) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 1bd5c9c..2e35c85 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -126,13 +126,15 @@
 
   UnlinkedUnit? _unlinked2;
 
+  FileStateKind? _kind;
+
   /// Files that reference this file.
   final List<FileState> referencingFiles = [];
 
   List<FileState?>? _importedFiles;
   List<FileState?>? _exportedFiles;
-  List<FileState?>? _partedFiles;
-  List<FileState>? _libraryFiles;
+  List<FileState?> _partedFiles = [];
+  List<FileState> _libraryFiles = [];
 
   Set<FileState>? _directReferencedFiles;
   Set<FileState>? _directReferencedLibraries;
@@ -242,16 +244,17 @@
         _unlinked2!.partOfUriDirective != null;
   }
 
+  FileStateKind get kind => _kind!;
+
   /// If the file [isPart], return a currently know library the file is a part
   /// of. Return `null` if a library is not known, for example because we have
   /// not processed a library file yet.
   FileState? get library {
-    _fsState.readPartsForLibraries();
-    List<FileState>? libraries = _fsState._partToLibraries[this];
-    if (libraries == null || libraries.isEmpty) {
-      return null;
+    final kind = _kind;
+    if (kind is PartKnownFileStateKind) {
+      return kind.library;
     } else {
-      return libraries.first;
+      return null;
     }
   }
 
@@ -268,10 +271,7 @@
   /// The list of files files that this library consists of, i.e. this library
   /// file itself and its [partedFiles].
   List<FileState> get libraryFiles {
-    return _libraryFiles ??= [
-      this,
-      ...partedFiles.whereNotNull(),
-    ];
+    return _libraryFiles;
   }
 
   /// Return information about line in the file.
@@ -279,20 +279,7 @@
 
   /// The list of files this library file references as parts.
   List<FileState?> get partedFiles {
-    return _partedFiles ??= _unlinked2!.parts.map((uri) {
-      return _fileForRelativeUri(uri).map(
-        (file) {
-          if (file != null) {
-            file.referencingFiles.add(this);
-            _fsState._partToLibraries
-                .putIfAbsent(file, () => <FileState>[])
-                .add(this);
-          }
-          return file;
-        },
-        (_) => null,
-      );
-    }).toList();
+    return _partedFiles;
   }
 
   /// The external names referenced by the file.
@@ -410,21 +397,14 @@
       _libraryCycle?.invalidate();
 
       // If this is a part, invalidate the libraries.
-      var libraries = _fsState._partToLibraries[this];
-      if (libraries != null) {
-        for (var library in libraries) {
-          library.libraryCycle.invalidate();
+      final kind = _kind;
+      if (kind is PartKnownFileStateKind) {
+        for (final library in kind._libraries) {
+          library._libraryCycle?.invalidate();
         }
       }
     }
 
-    // This file is potentially not a library for its previous parts anymore.
-    if (_partedFiles != null) {
-      for (var part in _partedFiles!) {
-        _fsState._partToLibraries[part]?.remove(this);
-      }
-    }
-
     // It is possible that this file does not reference these files.
     _stopReferencingByThisFile();
 
@@ -434,10 +414,9 @@
     _directReferencedFiles = null;
     _directReferencedLibraries = null;
 
-    // Read parts on demand.
-    _fsState._librariesWithoutPartsRead.add(this);
-    _partedFiles = null;
-    _libraryFiles = null;
+    // Read parts eagerly to link parts to libraries.
+    _updateKind();
+    _updatePartedFiles();
 
     // Update mapping from subtyped names to files.
     for (var name in _driverUnlinkedUnit!.subtypedNames) {
@@ -581,6 +560,114 @@
     removeForOne(_partedFiles);
   }
 
+  void _updateKind() {
+    /// This file is a part (was not part, or no kind at all).
+    /// Now we might be able to update its kind to a known part.
+    void updateLibrariesWithThisPart() {
+      for (final maybeLibrary in _fsState._pathToFile.values) {
+        if (maybeLibrary.kind is LibraryFileStateKind) {
+          if (maybeLibrary.partedFiles.contains(this)) {
+            maybeLibrary._updatePartedFiles();
+            maybeLibrary._libraryCycle?.invalidate();
+          }
+        }
+      }
+    }
+
+    final libraryAugmentationDirective = unlinked2.libraryAugmentationDirective;
+    final partOfNameDirective = unlinked2.partOfNameDirective;
+    final partOfUriDirective = unlinked2.partOfUriDirective;
+    if (libraryAugmentationDirective != null) {
+      // TODO(scheglov) This code does not have enough tests.
+      _kind = LibraryAugmentationUnknownFileStateKind(
+        file: this,
+        directive: libraryAugmentationDirective,
+      );
+      _fileForRelativeUri(libraryAugmentationDirective.uri);
+    } else if (unlinked2.libraryDirective != null) {
+      _kind = LibraryFileStateKind(
+        file: this,
+      );
+    } else if (partOfNameDirective != null) {
+      if (_kind is! PartKnownFileStateKind) {
+        _kind = PartUnknownNameFileStateKind(
+          file: this,
+          directive: partOfNameDirective,
+        );
+        updateLibrariesWithThisPart();
+      }
+    } else if (partOfUriDirective != null) {
+      if (_kind is! PartKnownFileStateKind) {
+        _kind = PartUnknownUriFileStateKind(
+          file: this,
+          directive: partOfUriDirective,
+        );
+        _fileForRelativeUri(partOfUriDirective.uri);
+        updateLibrariesWithThisPart();
+      }
+    } else {
+      _kind = LibraryFileStateKind(
+        file: this,
+      );
+    }
+  }
+
+  void _updatePartedFiles() {
+    // Disconnect all parts of this library.
+    for (final part in _partedFiles) {
+      if (part != null) {
+        final partKind = part.kind;
+        if (partKind is PartKnownFileStateKind) {
+          partKind._libraries.remove(this);
+          // If no libraries, switch to unknown.
+          if (partKind._libraries.isEmpty) {
+            final partOfNameDirective = part.unlinked2.partOfNameDirective;
+            final partOfUriDirective = part.unlinked2.partOfUriDirective;
+            if (partOfNameDirective != null) {
+              part._kind = PartUnknownNameFileStateKind(
+                file: part,
+                directive: partOfNameDirective,
+              );
+            } else if (partOfUriDirective != null) {
+              part._kind = PartUnknownUriFileStateKind(
+                file: part,
+                directive: partOfUriDirective,
+              );
+            }
+          }
+        }
+      }
+    }
+
+    _partedFiles = unlinked2.parts.map((uri) {
+      return _fileForRelativeUri(uri).map(
+        (part) {
+          if (part != null) {
+            part.referencingFiles.add(this);
+            // Either add this as a library, or switch from unknown.
+            final kind = part._kind;
+            if (kind is PartKnownFileStateKind) {
+              kind._libraries.add(this);
+            } else if (kind is PartUnknownNameFileStateKind ||
+                kind is PartUnknownUriFileStateKind) {
+              part._kind = PartKnownFileStateKind(
+                file: part,
+                library: this,
+              );
+            }
+          }
+          return part;
+        },
+        (_) => null,
+      );
+    }).toList();
+
+    _libraryFiles = [
+      this,
+      ...partedFiles.whereNotNull(),
+    ];
+  }
+
   static UnlinkedUnit serializeAstUnlinked2(CompilationUnit unit) {
     UnlinkedLibraryDirective? libraryDirective;
     UnlinkedLibraryAugmentationDirective? libraryAugmentationDirective;
@@ -722,6 +809,14 @@
   }
 }
 
+abstract class FileStateKind {
+  final FileState file;
+
+  FileStateKind({
+    required this.file,
+  });
+}
+
 enum FileStateRefreshResult {
   /// No changes to the content, so no changes at all.
   nothing,
@@ -780,14 +875,6 @@
   /// Mapping from a path to the corresponding [FileState].
   final Map<String, FileState> _pathToFile = {};
 
-  /// We don't read parts until requested, but if we need to know the
-  /// library for a file, we need to read parts of every file to know
-  /// which libraries reference this part.
-  final List<FileState> _librariesWithoutPartsRead = [];
-
-  /// Mapping from a part to the libraries it is a part of.
-  final Map<FileState, List<FileState>> _partToLibraries = {};
-
   /// The map of subtyped names to files where these names are subtyped.
   final Map<String, Set<FileState>> _subtypedNameToFiles = {};
 
@@ -905,7 +992,7 @@
     final externalSummaries = this.externalSummaries;
     if (externalSummaries != null) {
       String uriStr = uri.toString();
-      if (externalSummaries.hasLinkedLibrary(uriStr)) {
+      if (externalSummaries.uriToSummaryPath.containsKey(uriStr)) {
         return Either2.t2(ExternalLibrary._(uri));
       }
     }
@@ -969,19 +1056,6 @@
     _fileContentCache.invalidate(path);
   }
 
-  void readPartsForLibraries() {
-    // Make a copy, because reading new files will update it.
-    var libraryToProcess = _librariesWithoutPartsRead.toList();
-
-    // We will process these files, so clear it now.
-    // It will be filled with new files during the loop below.
-    _librariesWithoutPartsRead.clear();
-
-    for (var library in libraryToProcess) {
-      library.partedFiles;
-    }
-  }
-
   /// Remove the file with the given [path].
   void removeFile(String path) {
     markFileForReading(path);
@@ -995,8 +1069,6 @@
     knownFiles.clear();
     _hasUriForPath.clear();
     _pathToFile.clear();
-    _librariesWithoutPartsRead.clear();
-    _partToLibraries.clear();
     _subtypedNameToFiles.clear();
   }
 
@@ -1079,3 +1151,64 @@
 
   bool get isSrc => (_flags & _isSrc) != 0;
 }
+
+class LibraryAugmentationKnownFileStateKind extends FileStateKind {
+  final FileState augmented;
+
+  LibraryAugmentationKnownFileStateKind({
+    required super.file,
+    required this.augmented,
+  });
+}
+
+/// A library augmentation when the augmented target is unknown, e.g.
+/// the provided URI cannot be resolved.
+class LibraryAugmentationUnknownFileStateKind extends FileStateKind {
+  final UnlinkedLibraryAugmentationDirective directive;
+
+  LibraryAugmentationUnknownFileStateKind({
+    required super.file,
+    required this.directive,
+  });
+}
+
+class LibraryFileStateKind extends FileStateKind {
+  LibraryFileStateKind({
+    required super.file,
+  });
+}
+
+class PartKnownFileStateKind extends FileStateKind {
+  final List<FileState> _libraries = [];
+
+  PartKnownFileStateKind({
+    required super.file,
+    required FileState library,
+  }) {
+    _libraries.add(library);
+  }
+
+  FileState get library => _libraries.first;
+}
+
+/// The file is a part, but its library is unknown.
+/// We don't know the library with this name.
+class PartUnknownNameFileStateKind extends FileStateKind {
+  final UnlinkedPartOfNameDirective directive;
+
+  PartUnknownNameFileStateKind({
+    required super.file,
+    required this.directive,
+  });
+}
+
+/// The file is a part, but its library is unknown.
+/// When we don't understand the URI.
+class PartUnknownUriFileStateKind extends FileStateKind {
+  final UnlinkedPartOfUriDirective directive;
+
+  PartUnknownUriFileStateKind({
+    required super.file,
+    required this.directive,
+  });
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index cef3e18..789a751 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -40,9 +40,8 @@
   @override
   final List<AnalysisError> errors;
 
-  ErrorsResultImpl(AnalysisSession session, String path, Uri uri,
-      LineInfo lineInfo, bool isPart, this.errors)
-      : super(session, path, uri, lineInfo, isPart);
+  ErrorsResultImpl(super.session, super.path, super.uri, super.lineInfo,
+      super.isPart, this.errors);
 }
 
 class FileResultImpl extends AnalysisResultImpl implements FileResult {
@@ -59,8 +58,7 @@
   final bool isPart;
 
   FileResultImpl(
-      AnalysisSession session, this.path, this.uri, this.lineInfo, this.isPart)
-      : super(session);
+      super.session, this.path, this.uri, this.lineInfo, this.isPart);
 }
 
 class LibraryElementResultImpl implements LibraryElementResult {
@@ -75,7 +73,7 @@
   @override
   final List<ParsedUnitResult> units;
 
-  ParsedLibraryResultImpl(AnalysisSession session, this.units) : super(session);
+  ParsedLibraryResultImpl(super.session, this.units);
 
   @override
   ElementDeclarationResult? getElementDeclaration(Element element) {
@@ -198,8 +196,7 @@
   @override
   final List<ResolvedUnitResult> units;
 
-  ResolvedLibraryResultImpl(AnalysisSession session, this.element, this.units)
-      : super(session);
+  ResolvedLibraryResultImpl(super.session, this.element, this.units);
 
   @override
   TypeProvider get typeProvider => element.typeProvider;
@@ -278,9 +275,8 @@
   @override
   final CompilationUnitElement element;
 
-  UnitElementResultImpl(AnalysisSession session, String path, Uri uri,
-      LineInfo lineInfo, bool isPart, this.element)
-      : super(session, path, uri, lineInfo, isPart);
+  UnitElementResultImpl(super.session, super.path, super.uri, super.lineInfo,
+      super.isPart, this.element);
 }
 
 /// A visitor which locates the [AstNode] which declares [element].
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index cc15afe..00e49a0 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1675,8 +1675,7 @@
   /// Initialize a newly created member of a class. Either or both of the
   /// [comment] and [metadata] can be `null` if the member does not have the
   /// corresponding attribute.
-  ClassMemberImpl(CommentImpl? comment, List<Annotation>? metadata)
-      : super(comment, metadata);
+  ClassMemberImpl(super.comment, super.metadata);
 }
 
 abstract class ClassOrMixinDeclarationImpl
@@ -1701,15 +1700,14 @@
   Token rightBracket;
 
   ClassOrMixinDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      SimpleIdentifierImpl name,
+      super.comment,
+      super.metadata,
+      super.name,
       this._typeParameters,
       this._implementsClause,
       this.leftBracket,
       List<ClassMember> members,
-      this.rightBracket)
-      : super(comment, metadata, name) {
+      this.rightBracket) {
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_implementsClause);
     _members._initialize(this, members);
@@ -2285,8 +2283,7 @@
   /// Initialize a newly created generic compilation unit member. Either or both
   /// of the [comment] and [metadata] can be `null` if the member does not have
   /// the corresponding attribute.
-  CompilationUnitMemberImpl(CommentImpl? comment, List<Annotation>? metadata)
-      : super(comment, metadata);
+  CompilationUnitMemberImpl(super.comment, super.metadata);
 }
 
 mixin CompoundAssignmentExpressionImpl implements CompoundAssignmentExpression {
@@ -2580,8 +2577,8 @@
   /// does not redirect to a different constructor. The [body] can be `null` if
   /// the constructor does not have a body.
   ConstructorDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
+      super.comment,
+      super.metadata,
       this.externalKeyword,
       this.constKeyword,
       this.factoryKeyword,
@@ -2592,8 +2589,7 @@
       this.separator,
       List<ConstructorInitializer>? initializers,
       this._redirectedConstructor,
-      this._body)
-      : super(comment, metadata) {
+      this._body) {
     _becomeParentOf(_returnType);
     _becomeParentOf(_name);
     _becomeParentOf(_parameters);
@@ -2995,8 +2991,7 @@
   /// Initialize a newly created declaration. Either or both of the [comment]
   /// and [metadata] can be `null` if the declaration does not have the
   /// corresponding attribute.
-  DeclarationImpl(CommentImpl? comment, List<Annotation>? metadata)
-      : super(comment, metadata);
+  DeclarationImpl(super.comment, super.metadata);
 }
 
 /// The declaration of a single identifier.
@@ -3021,9 +3016,8 @@
   /// [comment] and [metadata] can be `null` if the declaration does not have
   /// the corresponding attribute. The [keyword] can be `null` if a type name is
   /// given. The [type] must be `null` if the keyword is 'var'.
-  DeclaredIdentifierImpl(CommentImpl? comment, List<Annotation>? metadata,
-      this.keyword, this._type, this._identifier)
-      : super(comment, metadata) {
+  DeclaredIdentifierImpl(super.comment, super.metadata, this.keyword,
+      this._type, this._identifier) {
     _becomeParentOf(_type);
     _becomeParentOf(_identifier);
   }
@@ -3088,7 +3082,7 @@
 // different from a use, so using the same node type doesn't seem to buy us
 // much.
 class DeclaredSimpleIdentifier extends SimpleIdentifierImpl {
-  DeclaredSimpleIdentifier(Token token) : super(token);
+  DeclaredSimpleIdentifier(super.token);
 
   @override
   bool inDeclarationContext() => true;
@@ -3211,8 +3205,7 @@
   /// Initialize a newly create directive. Either or both of the [comment] and
   /// [metadata] can be `null` if the directive does not have the corresponding
   /// attribute.
-  DirectiveImpl(CommentImpl? comment, List<Annotation>? metadata)
-      : super(comment, metadata);
+  DirectiveImpl(super.comment, super.metadata);
 
   @override
   Element? get element => _element;
@@ -3717,15 +3710,13 @@
   /// corresponding attribute. The list of [combinators] can be `null` if there
   /// are no combinators.
   ExportDirectiveImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      Token keyword,
-      StringLiteralImpl libraryUri,
-      List<Configuration>? configurations,
-      List<Combinator>? combinators,
-      Token semicolon)
-      : super(comment, metadata, keyword, libraryUri, configurations,
-            combinators, semicolon);
+      super.comment,
+      super.metadata,
+      super.keyword,
+      super.libraryUri,
+      super.configurations,
+      super.combinators,
+      super.semicolon);
 
   @override
   ExportElement? get element => super.element as ExportElement?;
@@ -4101,8 +4092,8 @@
   ExtensionElement? _declaredElement;
 
   ExtensionDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
+      super.comment,
+      super.metadata,
       this.extensionKeyword,
       this.typeKeyword,
       this._name,
@@ -4113,8 +4104,7 @@
       this._hideClause,
       this.leftBracket,
       List<ClassMember> members,
-      this.rightBracket)
-      : super(comment, metadata) {
+      this.rightBracket) {
     _becomeParentOf(_name);
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_extendedType);
@@ -4330,16 +4320,15 @@
   /// the corresponding attribute. The [staticKeyword] can be `null` if the
   /// field is not a static field.
   FieldDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
+      super.comment,
+      super.metadata,
       this.abstractKeyword,
       this.augmentKeyword,
       this.covariantKeyword,
       this.externalKeyword,
       this.staticKeyword,
       this._fieldList,
-      this.semicolon)
-      : super(comment, metadata) {
+      this.semicolon) {
     _becomeParentOf(_fieldList);
   }
 
@@ -5974,8 +5963,7 @@
   final NodeListImpl<SimpleIdentifier> _hiddenNames = NodeListImpl._();
 
   /// Initialize a newly created import show combinator.
-  HideCombinatorImpl(Token keyword, List<SimpleIdentifier> hiddenNames)
-      : super(keyword) {
+  HideCombinatorImpl(super.keyword, List<SimpleIdentifier> hiddenNames) {
     _hiddenNames._initialize(this, hiddenNames);
   }
 
@@ -7210,9 +7198,8 @@
   /// Initialize a newly created library directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  LibraryDirectiveImpl(CommentImpl? comment, List<Annotation>? metadata,
-      this.libraryKeyword, this._name, this.semicolon)
-      : super(comment, metadata) {
+  LibraryDirectiveImpl(super.comment, super.metadata, this.libraryKeyword,
+      this._name, this.semicolon) {
     _becomeParentOf(_name);
   }
 
@@ -7329,9 +7316,8 @@
   /// if the literal is not a constant. The [typeArguments] can be `null` if no
   /// type arguments were declared. The list of [elements] can be `null` if the
   /// list is empty.
-  ListLiteralImpl(Token? constKeyword, TypeArgumentListImpl? typeArguments,
-      this.leftBracket, List<Expression> elements, this.rightBracket)
-      : super(constKeyword, typeArguments) {
+  ListLiteralImpl(super.constKeyword, super.typeArguments, this.leftBracket,
+      List<Expression> elements, this.rightBracket) {
     _elements._initialize(this, elements);
   }
 
@@ -7340,13 +7326,8 @@
   /// The [constKeyword] can be `null` if the literal is not a constant. The
   /// [typeArguments] can be `null` if no type arguments were declared. The list
   /// of [elements] can be `null` if the list is empty.
-  ListLiteralImpl.experimental(
-      Token? constKeyword,
-      TypeArgumentListImpl? typeArguments,
-      this.leftBracket,
-      List<CollectionElement> elements,
-      this.rightBracket)
-      : super(constKeyword, typeArguments) {
+  ListLiteralImpl.experimental(super.constKeyword, super.typeArguments,
+      this.leftBracket, List<CollectionElement> elements, this.rightBracket) {
     _elements._initialize(this, elements);
   }
 
@@ -7543,8 +7524,8 @@
   /// `null` if the method does not implement an operator. The [parameters] must
   /// be `null` if this method declares a getter.
   MethodDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
+      super.comment,
+      super.metadata,
       this.externalKeyword,
       this.modifierKeyword,
       this._returnType,
@@ -7553,8 +7534,7 @@
       this._name,
       this._typeParameters,
       this._parameters,
-      this._body)
-      : super(comment, metadata) {
+      this._body) {
     _becomeParentOf(_returnType);
     _becomeParentOf(_name);
     _becomeParentOf(_typeParameters);
@@ -7915,9 +7895,7 @@
   /// Initialize a newly created compilation unit member with the given [name].
   /// Either or both of the [comment] and [metadata] can be `null` if the member
   /// does not have the corresponding attribute.
-  NamedCompilationUnitMemberImpl(
-      CommentImpl? comment, List<Annotation>? metadata, this._name)
-      : super(comment, metadata) {
+  NamedCompilationUnitMemberImpl(super.comment, super.metadata, this._name) {
     _becomeParentOf(_name);
   }
 
@@ -8714,15 +8692,8 @@
   /// Initialize a newly created part-of directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  PartOfDirectiveImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.partKeyword,
-      this.ofKeyword,
-      this._uri,
-      this._libraryName,
-      this.semicolon)
-      : super(comment, metadata) {
+  PartOfDirectiveImpl(super.comment, super.metadata, this.partKeyword,
+      this.ofKeyword, this._uri, this._libraryName, this.semicolon) {
     _becomeParentOf(_uri);
     _becomeParentOf(_libraryName);
   }
@@ -9372,9 +9343,8 @@
   /// `null` if the literal is not a constant. The [typeArguments] can be `null`
   /// if no type arguments were declared. The [elements] can be `null` if the
   /// set is empty.
-  SetOrMapLiteralImpl(Token? constKeyword, TypeArgumentListImpl? typeArguments,
-      this.leftBracket, List<CollectionElement> elements, this.rightBracket)
-      : super(constKeyword, typeArguments) {
+  SetOrMapLiteralImpl(super.constKeyword, super.typeArguments, this.leftBracket,
+      List<CollectionElement> elements, this.rightBracket) {
     _elements._initialize(this, elements);
   }
 
@@ -9491,8 +9461,7 @@
   final NodeListImpl<SimpleIdentifier> _shownNames = NodeListImpl._();
 
   /// Initialize a newly created import show combinator.
-  ShowCombinatorImpl(Token keyword, List<SimpleIdentifier> shownNames)
-      : super(keyword) {
+  ShowCombinatorImpl(super.keyword, List<SimpleIdentifier> shownNames) {
     _shownNames._initialize(this, shownNames);
   }
 
@@ -10546,9 +10515,7 @@
 class SwitchDefaultImpl extends SwitchMemberImpl implements SwitchDefault {
   /// Initialize a newly created switch default. The list of [labels] can be
   /// `null` if there are no labels.
-  SwitchDefaultImpl(List<Label> labels, Token keyword, Token colon,
-      List<Statement> statements)
-      : super(labels, keyword, colon, statements);
+  SwitchDefaultImpl(super.labels, super.keyword, super.colon, super.statements);
 
   @override
   ChildEntities get _childEntities => ChildEntities()
@@ -10855,13 +10822,8 @@
   /// Initialize a newly created top-level variable declaration. Either or both
   /// of the [comment] and [metadata] can be `null` if the variable does not
   /// have the corresponding attribute.
-  TopLevelVariableDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.externalKeyword,
-      this._variableList,
-      this.semicolon)
-      : super(comment, metadata) {
+  TopLevelVariableDeclarationImpl(super.comment, super.metadata,
+      this.externalKeyword, this._variableList, this.semicolon) {
     _becomeParentOf(_variableList);
   }
 
@@ -11198,9 +11160,8 @@
   /// and [metadata] can be `null` if the parameter does not have the
   /// corresponding attribute. The [extendsKeyword] and [bound] can be `null` if
   /// the parameter does not have an upper bound.
-  TypeParameterImpl(CommentImpl? comment, List<Annotation>? metadata,
-      this._name, this.extendsKeyword, this._bound)
-      : super(comment, metadata) {
+  TypeParameterImpl(super.comment, super.metadata, this._name,
+      this.extendsKeyword, this._bound) {
     _becomeParentOf(_name);
     _becomeParentOf(_bound);
   }
@@ -11317,9 +11278,7 @@
   /// Initialize a newly create URI-based directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  UriBasedDirectiveImpl(
-      CommentImpl? comment, List<Annotation>? metadata, this._uri)
-      : super(comment, metadata) {
+  UriBasedDirectiveImpl(super.comment, super.metadata, this._uri) {
     _becomeParentOf(_uri);
   }
 
@@ -11534,14 +11493,8 @@
   /// the [comment] and [metadata] can be `null` if the variable list does not
   /// have the corresponding attribute. The [keyword] can be `null` if a type
   /// was specified. The [type] must be `null` if the keyword is 'var'.
-  VariableDeclarationListImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.lateKeyword,
-      this.keyword,
-      this._type,
-      List<VariableDeclaration> variables)
-      : super(comment, metadata) {
+  VariableDeclarationListImpl(super.comment, super.metadata, this.lateKeyword,
+      this.keyword, this._type, List<VariableDeclaration> variables) {
     _becomeParentOf(_type);
     _variables._initialize(this, variables);
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 65a3293..f024ba6 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -1384,7 +1384,10 @@
 
   /// A method that can be passed to the `LinterVisitor` constructor to handle
   /// exceptions that occur during linting.
-  void logException(
+  ///
+  /// Returns `true` if the exception was fully handled, and `false` if the
+  /// exception should be rethrown.
+  bool logException(
       AstNode node, Object visitor, dynamic exception, StackTrace stackTrace) {
     StringBuffer buffer = StringBuffer();
     buffer.write('Exception while using a ${visitor.runtimeType} to visit a ');
@@ -1402,9 +1405,7 @@
     // TODO(39284): should this exception be silent?
     AnalysisEngine.instance.instrumentationService.logException(
         SilentException(buffer.toString(), exception, stackTrace));
-    if (propagateExceptions) {
-      throw exception;
-    }
+    return !propagateExceptions;
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 370ca14..c83df2c 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -83,7 +83,7 @@
 
   /// Initialize a newly created class element to have the given [name] at the
   /// given [offset] in the file that contains the declaration of this element.
-  AbstractClassElementImpl(String name, int offset) : super(name, offset);
+  AbstractClassElementImpl(String super.name, super.offset);
 
   /// Set the accessors contained in this class to the given [accessors].
   set accessors(List<PropertyAccessorElement> accessors) {
@@ -563,7 +563,7 @@
 
   /// Initialize a newly created class element to have the given [name] at the
   /// given [offset] in the file that contains the declaration of this element.
-  ClassElementImpl(String name, int offset) : super(name, offset);
+  ClassElementImpl(super.name, super.offset);
 
   @override
   List<PropertyAccessorElement> get accessors {
@@ -1278,7 +1278,7 @@
 class ConstFieldElementImpl extends FieldElementImpl with ConstVariableElement {
   /// Initialize a newly created synthetic field element to have the given
   /// [name] and [offset].
-  ConstFieldElementImpl(String name, int offset) : super(name, offset);
+  ConstFieldElementImpl(super.name, super.offset);
 
   @override
   Expression? get constantInitializer {
@@ -1293,7 +1293,7 @@
     with ConstVariableElement {
   /// Initialize a newly created local variable element to have the given [name]
   /// and [offset].
-  ConstLocalVariableElementImpl(String name, int offset) : super(name, offset);
+  ConstLocalVariableElementImpl(super.name, super.offset);
 }
 
 /// A concrete implementation of a [ConstructorElement].
@@ -1331,7 +1331,7 @@
 
   /// Initialize a newly created constructor element to have the given [name]
   /// and [offset].
-  ConstructorElementImpl(String name, int offset) : super(name, offset);
+  ConstructorElementImpl(super.name, super.offset);
 
   /// Return the constant initializers for this element, which will be empty if
   /// there are no initializers, or `null` if there was an error in the source.
@@ -1501,8 +1501,7 @@
     with ConstVariableElement {
   /// Initialize a newly created synthetic top-level variable element to have
   /// the given [name] and [offset].
-  ConstTopLevelVariableElementImpl(String name, int offset)
-      : super(name, offset);
+  ConstTopLevelVariableElementImpl(super.name, super.offset);
 
   @override
   Expression? get constantInitializer {
@@ -1568,14 +1567,10 @@
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   DefaultFieldFormalParameterElementImpl({
-    required String name,
-    required int nameOffset,
-    required ParameterKind parameterKind,
-  }) : super(
-          name: name,
-          nameOffset: nameOffset,
-          parameterKind: parameterKind,
-        );
+    required super.name,
+    required super.nameOffset,
+    required super.parameterKind,
+  });
 
   @override
   String? get defaultValueCode {
@@ -1589,14 +1584,10 @@
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   DefaultParameterElementImpl({
-    required String? name,
-    required int nameOffset,
-    required ParameterKind parameterKind,
-  }) : super(
-          name: name,
-          nameOffset: nameOffset,
-          parameterKind: parameterKind,
-        );
+    required super.name,
+    required super.nameOffset,
+    required super.parameterKind,
+  });
 
   @override
   String? get defaultValueCode {
@@ -1609,14 +1600,10 @@
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   DefaultSuperFormalParameterElementImpl({
-    required String name,
-    required int nameOffset,
-    required ParameterKind parameterKind,
-  }) : super(
-          name: name,
-          nameOffset: nameOffset,
-          parameterKind: parameterKind,
-        );
+    required super.name,
+    required super.nameOffset,
+    required super.parameterKind,
+  });
 
   @override
   String? get defaultValueCode {
@@ -2724,7 +2711,7 @@
 
   /// Initialize a newly created class element to have the given [name] at the
   /// given [offset] in the file that contains the declaration of this element.
-  EnumElementImpl(String name, int offset) : super(name, offset);
+  EnumElementImpl(super.name, super.offset);
 
   @override
   List<PropertyAccessorElement> get accessors {
@@ -2860,8 +2847,7 @@
 
   /// Initialize a newly created executable element to have the given [name] and
   /// [offset].
-  ExecutableElementImpl(String name, int offset, {Reference? reference})
-      : super(name, offset, reference: reference);
+  ExecutableElementImpl(String super.name, super.offset, {super.reference});
 
   @override
   Element get enclosingElement => super.enclosingElement!;
@@ -3096,7 +3082,7 @@
   /// Initialize a newly created extension element to have the given [name] at
   /// the given [offset] in the file that contains the declaration of this
   /// element.
-  ExtensionElementImpl(String? name, int nameOffset) : super(name, nameOffset);
+  ExtensionElementImpl(super.name, super.nameOffset);
 
   @override
   List<PropertyAccessorElement> get accessors {
@@ -3268,7 +3254,7 @@
 
   /// Initialize a newly created synthetic field element to have the given
   /// [name] at the given [offset].
-  FieldElementImpl(String name, int offset) : super(name, offset);
+  FieldElementImpl(super.name, super.offset);
 
   @override
   FieldElement get declaration => this;
@@ -3339,14 +3325,10 @@
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   FieldFormalParameterElementImpl({
-    required String name,
-    required int nameOffset,
-    required ParameterKind parameterKind,
-  }) : super(
-          name: name,
-          nameOffset: nameOffset,
-          parameterKind: parameterKind,
-        );
+    required String super.name,
+    required super.nameOffset,
+    required super.parameterKind,
+  });
 
   /// Initializing formals are visible only in the "formal parameter
   /// initializer scope", which is the current scope of the initializer list
@@ -3370,7 +3352,7 @@
     implements FunctionElement, FunctionTypedElementImpl {
   /// Initialize a newly created function element to have the given [name] and
   /// [offset].
-  FunctionElementImpl(String name, int offset) : super(name, offset);
+  FunctionElementImpl(super.name, super.offset);
 
   /// Initialize a newly created function element to have no name and the given
   /// [nameOffset]. This is used for function expressions, that have no name.
@@ -3628,9 +3610,8 @@
   /// [onSwitchStatement] should be `true` if this label is associated with a
   /// `switch` statement and [onSwitchMember] should be `true` if this label is
   /// associated with a `switch` member.
-  LabelElementImpl(String name, int nameOffset, this._onSwitchStatement,
-      this._onSwitchMember)
-      : super(name, nameOffset);
+  LabelElementImpl(String super.name, super.nameOffset, this._onSwitchStatement,
+      this._onSwitchMember);
 
   @override
   String get displayName => name;
@@ -3663,8 +3644,8 @@
 
   LibraryAugmentationElementImpl({
     required this.augmented,
-    required int nameOffset,
-  }) : super(name: null, nameOffset: nameOffset);
+    required super.nameOffset,
+  }) : super(name: null);
 
   @override
   // TODO: implement accessibleExtensions
@@ -4274,7 +4255,7 @@
 
   /// Initialize a newly created method element to have the given [name] and
   /// [offset].
-  LocalVariableElementImpl(String name, int offset) : super(name, offset);
+  LocalVariableElementImpl(super.name, super.offset);
 
   @override
   String get identifier {
@@ -4320,7 +4301,7 @@
 
   /// Initialize a newly created method element to have the given [name] at the
   /// given [offset].
-  MethodElementImpl(String name, int offset) : super(name, offset);
+  MethodElementImpl(super.name, super.offset);
 
   @override
   MethodElement get declaration => prototype ?? this;
@@ -4391,7 +4372,7 @@
 
   /// Initialize a newly created class element to have the given [name] at the
   /// given [offset] in the file that contains the declaration of this element.
-  MixinElementImpl(String name, int offset) : super(name, offset);
+  MixinElementImpl(super.name, super.offset);
 
   @override
   bool get isAbstract => true;
@@ -4816,8 +4797,7 @@
     with _HasLibraryMixin {
   /// Initialize a newly created variable element to have the given [name] and
   /// [offset].
-  NonParameterVariableElementImpl(String name, int offset)
-      : super(name, offset);
+  NonParameterVariableElementImpl(String super.name, super.offset);
 
   @override
   Element get enclosingElement => super.enclosingElement!;
@@ -5087,8 +5067,7 @@
 
   /// Initialize a newly created method element to have the given [name] and
   /// [nameOffset].
-  PrefixElementImpl(String name, int nameOffset, {Reference? reference})
-      : super(name, nameOffset, reference: reference);
+  PrefixElementImpl(String super.name, super.nameOffset, {super.reference});
 
   @override
   String get displayName => name;
@@ -5143,7 +5122,7 @@
 
   /// Initialize a newly created property accessor element to have the given
   /// [name] and [offset].
-  PropertyAccessorElementImpl(String name, int offset) : super(name, offset);
+  PropertyAccessorElementImpl(super.name, super.offset);
 
   /// Initialize a newly created synthetic property accessor element to be
   /// associated with the given [variable].
@@ -5394,7 +5373,7 @@
 
   /// Initialize a newly created synthetic element to have the given [name] and
   /// [offset].
-  PropertyInducingElementImpl(String name, int offset) : super(name, offset);
+  PropertyInducingElementImpl(super.name, super.offset);
 
   bool get hasTypeInferred => hasModifier(Modifier.HAS_TYPE_INFERRED);
 
@@ -5542,14 +5521,10 @@
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   SuperFormalParameterElementImpl({
-    required String name,
-    required int nameOffset,
-    required ParameterKind parameterKind,
-  }) : super(
-          name: name,
-          nameOffset: nameOffset,
-          parameterKind: parameterKind,
-        );
+    required String super.name,
+    required super.nameOffset,
+    required super.parameterKind,
+  });
 
   /// Super parameters are visible only in the initializer list scope,
   /// and introduce final variables.
@@ -5601,7 +5576,7 @@
     implements TopLevelVariableElement {
   /// Initialize a newly created synthetic top-level variable element to have
   /// the given [name] and [offset].
-  TopLevelVariableElementImpl(String name, int offset) : super(name, offset);
+  TopLevelVariableElementImpl(super.name, super.offset);
 
   @override
   TopLevelVariableElement get declaration => this;
@@ -5645,7 +5620,7 @@
   ElementImpl? _aliasedElement;
   DartType? _aliasedType;
 
-  TypeAliasElementImpl(String name, int nameOffset) : super(name, nameOffset);
+  TypeAliasElementImpl(String super.name, super.nameOffset);
 
   @override
   ElementImpl? get aliasedElement {
@@ -5847,7 +5822,7 @@
 
   /// Initialize a newly created method element to have the given [name] and
   /// [offset].
-  TypeParameterElementImpl(String name, int offset) : super(name, offset);
+  TypeParameterElementImpl(String super.name, super.offset);
 
   /// Initialize a newly created synthetic type parameter element to have the
   /// given [name], and with [synthetic] set to true.
@@ -5960,7 +5935,7 @@
 
   /// Initialize a newly created import element to have the given [name] and
   /// [offset]. The offset may be `-1` if the element is synthetic.
-  UriReferencedElementImpl(String? name, int offset) : super(name, offset);
+  UriReferencedElementImpl(super.name, super.offset);
 
   /// Return the URI that is specified by this directive.
   @override
@@ -6001,7 +5976,7 @@
 
   /// Initialize a newly created variable element to have the given [name] and
   /// [offset].
-  VariableElementImpl(String? name, int offset) : super(name, offset);
+  VariableElementImpl(super.name, super.offset);
 
   /// If this element represents a constant variable, and it has an initializer,
   /// a copy of the initializer for the constant.  Otherwise `null`.
@@ -6111,8 +6086,7 @@
 }
 
 abstract class _ExistingElementImpl extends ElementImpl with _HasLibraryMixin {
-  _ExistingElementImpl(String? name, int offset, {Reference? reference})
-      : super(name, offset, reference: reference);
+  _ExistingElementImpl(super.name, super.offset, {super.reference});
 }
 
 mixin _HasLibraryMixin on ElementImpl {
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index fd60366..4c29923 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -699,9 +699,7 @@
   /// See [toString].
   final _TypeConstraintOrigin origin;
 
-  _TypeConstraint(this.origin, this.typeParameter,
-      {DartType? upper, DartType? lower})
-      : super(upper: upper, lower: lower);
+  _TypeConstraint(this.origin, this.typeParameter, {super.upper, super.lower});
 
   _TypeConstraint.fromExtends(
       TypeParameterElement element, DartType boundType, DartType extendsType,
@@ -735,8 +733,7 @@
 
   _TypeConstraintFromArgument(
       this.argumentType, this.parameterType, this.parameterName,
-      {this.genericClass, required bool isNonNullableByDefault})
-      : super(isNonNullableByDefault: isNonNullableByDefault);
+      {this.genericClass, required super.isNonNullableByDefault});
 
   @override
   List<String> formatError() {
@@ -782,8 +779,7 @@
 
   _TypeConstraintFromExtendsClause(
       this.typeParam, this.boundType, this.extendsType,
-      {required bool isNonNullableByDefault})
-      : super(isNonNullableByDefault: isNonNullableByDefault);
+      {required super.isNonNullableByDefault});
 
   @override
   List<String> formatError() {
@@ -801,8 +797,7 @@
   final DartType functionType;
 
   _TypeConstraintFromFunctionContext(this.functionType, this.contextType,
-      {required bool isNonNullableByDefault})
-      : super(isNonNullableByDefault: isNonNullableByDefault);
+      {required super.isNonNullableByDefault});
 
   @override
   List<String> formatError() {
@@ -819,8 +814,7 @@
   final DartType declaredType;
 
   _TypeConstraintFromReturnType(this.declaredType, this.contextType,
-      {required bool isNonNullableByDefault})
-      : super(isNonNullableByDefault: isNonNullableByDefault);
+      {required super.isNonNullableByDefault});
 
   @override
   List<String> formatError() {
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 882ea16..19aa560 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -138,12 +138,12 @@
   /// their bounds.  The [substitution] includes replacing [declaration] type
   /// parameters with the provided fresh [typeParameters].
   ExecutableMember(
-    TypeProviderImpl? typeProvider,
-    ExecutableElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
+    super.typeProvider,
+    ExecutableElement super.declaration,
+    super.substitution,
+    super.isLegacy,
     this.typeParameters,
-  ) : super(typeProvider, declaration, substitution, isLegacy);
+  );
 
   @override
   ExecutableElement get declaration => super.declaration as ExecutableElement;
@@ -286,18 +286,12 @@
   }
 
   FieldFormalParameterMember._(
-    TypeProviderImpl? typeProvider,
-    FieldFormalParameterElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-    List<TypeParameterElement> typeParameters,
-  ) : super._(
-          typeProvider,
-          declaration,
-          substitution,
-          isLegacy,
-          typeParameters,
-        );
+    super.typeProvider,
+    FieldFormalParameterElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+    super.typeParameters,
+  ) : super._();
 
   @override
   FieldElement? get field {
@@ -326,11 +320,11 @@
   /// Initialize a newly created element to represent a field, based on the
   /// [declaration], with applied [substitution].
   FieldMember(
-    TypeProviderImpl? typeProvider,
-    FieldElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-  ) : super(typeProvider, declaration, substitution, isLegacy);
+    super.typeProvider,
+    FieldElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+  );
 
   @override
   FieldElement get declaration => super.declaration as FieldElement;
@@ -752,12 +746,12 @@
   }
 
   MethodMember._(
-    TypeProviderImpl? typeProvider,
-    MethodElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-    List<TypeParameterElement> typeParameters,
-  ) : super(typeProvider, declaration, substitution, isLegacy, typeParameters);
+    super.typeProvider,
+    MethodElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+    super.typeParameters,
+  );
 
   @override
   MethodElement get declaration => super.declaration as MethodElement;
@@ -833,12 +827,12 @@
   /// Initialize a newly created element to represent a parameter, based on the
   /// [declaration], with applied [substitution].
   ParameterMember._(
-    TypeProviderImpl? typeProvider,
-    ParameterElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
+    super.typeProvider,
+    ParameterElement super.declaration,
+    super.substitution,
+    super.isLegacy,
     this.typeParameters,
-  ) : super(typeProvider, declaration, substitution, isLegacy);
+  );
 
   @override
   ParameterElement get declaration => super.declaration as ParameterElement;
@@ -953,12 +947,12 @@
   }
 
   PropertyAccessorMember._(
-    TypeProviderImpl? typeProvider,
-    PropertyAccessorElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-    List<TypeParameterElement> typeParameters,
-  ) : super(typeProvider, declaration, substitution, isLegacy, typeParameters);
+    super.typeProvider,
+    PropertyAccessorElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+    super.typeParameters,
+  );
 
   @override
   PropertyAccessorElement? get correspondingGetter {
@@ -1064,18 +1058,12 @@
   }
 
   SuperFormalParameterMember._(
-    TypeProviderImpl? typeProvider,
-    SuperFormalParameterElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-    List<TypeParameterElement> typeParameters,
-  ) : super._(
-          typeProvider,
-          declaration,
-          substitution,
-          isLegacy,
-          typeParameters,
-        );
+    super.typeProvider,
+    SuperFormalParameterElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+    super.typeParameters,
+  ) : super._();
 
   @override
   bool get hasDefaultValue => declaration.hasDefaultValue;
@@ -1103,11 +1091,11 @@
 class TopLevelVariableMember extends VariableMember
     implements TopLevelVariableElement {
   TopLevelVariableMember(
-    TypeProviderImpl? typeProvider,
-    VariableElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-  ) : super(typeProvider, declaration, substitution, isLegacy);
+    super.typeProvider,
+    super.declaration,
+    super.substitution,
+    super.isLegacy,
+  );
 
   @override
   TopLevelVariableElement get declaration =>
@@ -1162,11 +1150,11 @@
   /// Initialize a newly created element to represent a variable, based on the
   /// [declaration], with applied [substitution].
   VariableMember(
-    TypeProviderImpl? typeProvider,
-    VariableElement declaration,
-    MapSubstitution substitution,
-    bool isLegacy,
-  ) : super(typeProvider, declaration, substitution, isLegacy);
+    super.typeProvider,
+    VariableElement super.declaration,
+    super.substitution,
+    super.isLegacy,
+  );
 
   @override
   VariableElement get declaration => super.declaration as VariableElement;
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index e8c8698..a37d97a 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -9,7 +9,7 @@
 
 /// The scope defined by a class.
 class ClassScope extends EnclosedScope {
-  ClassScope(Scope parent, ClassElement element) : super(parent) {
+  ClassScope(super.parent, ClassElement element) {
     element.accessors.forEach(_addPropertyAccessor);
     element.methods.forEach(_addGetter);
   }
@@ -17,8 +17,7 @@
 
 /// The scope for the initializers in a constructor.
 class ConstructorInitializerScope extends EnclosedScope {
-  ConstructorInitializerScope(Scope parent, ConstructorElement element)
-      : super(parent) {
+  ConstructorInitializerScope(super.parent, ConstructorElement element) {
     element.parameters.forEach(_addGetter);
   }
 }
@@ -71,9 +70,9 @@
 /// The scope defined by an extension.
 class ExtensionScope extends EnclosedScope {
   ExtensionScope(
-    Scope parent,
+    super.parent,
     ExtensionElement element,
-  ) : super(parent) {
+  ) {
     element.accessors.forEach(_addPropertyAccessor);
     element.methods.forEach(_addGetter);
   }
@@ -81,9 +80,9 @@
 
 class FormalParameterScope extends EnclosedScope {
   FormalParameterScope(
-    Scope parent,
+    super.parent,
     List<ParameterElement> elements,
-  ) : super(parent) {
+  ) {
     for (var parameter in elements) {
       if (parameter is! FieldFormalParameterElement &&
           parameter is! SuperFormalParameterElement) {
@@ -125,7 +124,7 @@
 }
 
 class LocalScope extends EnclosedScope {
-  LocalScope(Scope parent) : super(parent);
+  LocalScope(super.parent);
 
   void add(Element element) {
     _addGetter(element);
@@ -236,9 +235,9 @@
 
 class TypeParameterScope extends EnclosedScope {
   TypeParameterScope(
-    Scope parent,
+    super.parent,
     List<TypeParameterElement> elements,
-  ) : super(parent) {
+  ) {
     elements.forEach(_addGetter);
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/element/type_algebra.dart b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
index 5e1389e..621f2c8 100644
--- a/pkg/analyzer/lib/src/dart/element/type_algebra.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
@@ -249,7 +249,7 @@
 class _FreshTypeParametersSubstitutor extends _TypeSubstitutor {
   final Map<TypeParameterElement, DartType> substitution = {};
 
-  _FreshTypeParametersSubstitutor(_TypeSubstitutor outer) : super(outer);
+  _FreshTypeParametersSubstitutor(_TypeSubstitutor super.outer);
 
   @override
   List<TypeParameterElement> freshTypeParameters(
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
index 3e49dd7..db31ce6 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -461,14 +461,11 @@
   const FfiCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'FfiCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
index 8df0d57..81120a1 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
@@ -1374,14 +1374,11 @@
   const HintCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'HintCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/dart/error/lint_codes.dart b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
index 32b5cff..901ba48 100644
--- a/pkg/analyzer/lib/src/dart/error/lint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
@@ -13,10 +13,9 @@
   const LintCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
+    super.correctionMessage,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
           problemMessage: problemMessage,
           name: name,
           uniqueName: uniqueName ?? 'LintCode.$name',
@@ -44,11 +43,9 @@
 /// The primary difference from [LintCode]s is that these codes cannot be
 /// suppressed with `// ignore:` or `// ignore_for_file:` comments.
 class SecurityLintCode extends LintCode {
-  const SecurityLintCode(String name, String problemMessage,
-      {String? uniqueName, String? correctionMessage})
-      : super(name, problemMessage,
-            uniqueName: uniqueName ?? 'LintCode.$name',
-            correctionMessage: correctionMessage);
+  const SecurityLintCode(super.name, super.problemMessage,
+      {String? uniqueName, super.correctionMessage})
+      : super(uniqueName: uniqueName ?? 'LintCode.$name');
 
   @override
   bool get isIgnorable => false;
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 4834ee8..46a1e2b 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -1593,14 +1593,11 @@
   const ParserErrorCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'ParserErrorCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
index 0d09988..bf399a3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
@@ -74,10 +74,9 @@
   final ExecutableElement? getter;
   final ExecutableElement? setter;
 
-  _NotInstantiatedExtensionWithMember(ExtensionElement extension,
+  _NotInstantiatedExtensionWithMember(super.extension,
       {this.getter, this.setter})
-      : assert(getter != null || setter != null),
-        super(extension);
+      : assert(getter != null || setter != null);
 
   @override
   InstantiatedExtensionWithMember instantiate({
@@ -91,8 +90,7 @@
 /// [_NotInstantiatedExtension] for any [ExtensionElement].
 class _NotInstantiatedExtensionWithoutMember
     extends _NotInstantiatedExtension<InstantiatedExtensionWithoutMember> {
-  _NotInstantiatedExtensionWithoutMember(ExtensionElement extension)
-      : super(extension);
+  _NotInstantiatedExtensionWithoutMember(super.extension);
 
   @override
   InstantiatedExtensionWithoutMember instantiate({
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
index e1c48ad..b9fcb2c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -58,18 +58,13 @@
   final SimpleIdentifierImpl? constructorName;
 
   AnnotationInferrer(
-      {required ResolverVisitor resolver,
-      required AnnotationImpl node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList,
       required this.constructorName})
-      : super._(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      : super._();
 
   @override
   bool get _isConst => true;
@@ -108,17 +103,11 @@
 abstract class FullInvocationInferrer<Node extends AstNodeImpl>
     extends InvocationInferrer<Node> {
   FullInvocationInferrer._(
-      {required ResolverVisitor resolver,
-      required Node node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList})
-      : super(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList});
 
   AstNode get _errorNode => node;
 
@@ -310,17 +299,12 @@
 class FunctionExpressionInvocationInferrer
     extends InvocationExpressionInferrer<FunctionExpressionInvocationImpl> {
   FunctionExpressionInvocationInferrer(
-      {required ResolverVisitor resolver,
-      required FunctionExpressionInvocationImpl node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList})
-      : super._(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList})
+      : super._();
 
   @override
   ExpressionImpl get _errorNode => node.function;
@@ -331,17 +315,12 @@
 class InstanceCreationInferrer
     extends FullInvocationInferrer<InstanceCreationExpressionImpl> {
   InstanceCreationInferrer(
-      {required ResolverVisitor resolver,
-      required InstanceCreationExpressionImpl node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList})
-      : super._(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList})
+      : super._();
 
   @override
   ConstructorNameImpl get _errorNode => node.constructorName;
@@ -388,17 +367,12 @@
         Node extends InvocationExpressionImpl>
     extends FullInvocationInferrer<Node> {
   InvocationExpressionInferrer._(
-      {required ResolverVisitor resolver,
-      required Node node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList})
-      : super._(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList})
+      : super._();
 
   @override
   Expression get _errorNode => node.function;
@@ -581,17 +555,12 @@
 class MethodInvocationInferrer
     extends InvocationExpressionInferrer<MethodInvocationImpl> {
   MethodInvocationInferrer(
-      {required ResolverVisitor resolver,
-      required MethodInvocationImpl node,
-      required ArgumentListImpl argumentList,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList})
-      : super._(
-            resolver: resolver,
-            node: node,
-            argumentList: argumentList,
-            contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+      {required super.resolver,
+      required super.node,
+      required super.argumentList,
+      required super.contextType,
+      required super.whyNotPromotedList})
+      : super._();
 
   @override
   bool get _isIdentical {
@@ -645,8 +614,7 @@
   final Object parameterKey;
 
   _DeferredParamInfo(
-      ParameterElement? parameter, this.value, this.index, this.parameterKey)
-      : super(parameter);
+      super.parameter, this.value, this.index, this.parameterKey);
 }
 
 class _FunctionLiteralDependencies extends FunctionLiteralDependencies<
diff --git a/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart b/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
index cfcb732..9beb6d3 100644
--- a/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
+++ b/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
@@ -197,6 +197,5 @@
 class DocumentationWithSummary extends Documentation {
   final String summary;
 
-  DocumentationWithSummary({required String full, required this.summary})
-      : super(full: full);
+  DocumentationWithSummary({required super.full, required this.summary});
 }
diff --git a/pkg/analyzer/lib/src/error/analyzer_error_code.dart b/pkg/analyzer/lib/src/error/analyzer_error_code.dart
index 5d99bf3..9324223 100644
--- a/pkg/analyzer/lib/src/error/analyzer_error_code.dart
+++ b/pkg/analyzer/lib/src/error/analyzer_error_code.dart
@@ -8,18 +8,11 @@
 abstract class AnalyzerErrorCode extends ErrorCode {
   /// Initialize a newly created error code.
   const AnalyzerErrorCode({
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
-    required String name,
-    required String problemMessage,
-    required String uniqueName,
-  }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
-          name: name,
-          problemMessage: problemMessage,
-          uniqueName: uniqueName,
-        );
+    super.correctionMessage,
+    super.hasPublishedDocs,
+    super.isUnresolvedIdentifier,
+    required super.name,
+    required super.problemMessage,
+    required super.uniqueName,
+  });
 }
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 6b26d64..0dc4de5 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -4917,14 +4917,11 @@
   const CompileTimeErrorCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'CompileTimeErrorCode.${uniqueName ?? name}',
@@ -5022,14 +5019,11 @@
   const LanguageCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'LanguageCode.${uniqueName ?? name}',
@@ -5127,14 +5121,11 @@
   const StaticWarningCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'StaticWarningCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/exception/exception.dart b/pkg/analyzer/lib/src/exception/exception.dart
index 3033672..f75dd2f 100644
--- a/pkg/analyzer/lib/src/exception/exception.dart
+++ b/pkg/analyzer/lib/src/exception/exception.dart
@@ -11,8 +11,8 @@
   final Map<String, String> fileContentMap;
 
   CaughtExceptionWithFiles(
-    Object exception,
-    StackTrace stackTrace,
+    super.exception,
+    super.stackTrace,
     this.fileContentMap,
-  ) : super(exception, stackTrace);
+  );
 }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 878abf5..75532ee 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -2675,6 +2675,15 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentKeyword, Token superKeyword, IdentifierContext context) {
+    assert(optional('augment', augmentKeyword));
+    assert(optional('super', superKeyword));
+    debugEvent("AugmentSuperExpression");
+    throw UnimplementedError('AstBuilder.handleAugmentSuperExpression');
+  }
+
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token semicolon) {
     assert(optional('break', breakKeyword));
@@ -3937,7 +3946,6 @@
   void handleSuperExpression(Token superKeyword, IdentifierContext context) {
     assert(optional('super', superKeyword));
     debugEvent("SuperExpression");
-
     push(ast.superExpression(superKeyword));
   }
 
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
index b51a93a..e11bd6e 100644
--- a/pkg/analyzer/lib/src/lint/analysis.dart
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -5,7 +5,6 @@
 import 'dart:io' as io;
 
 import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
@@ -15,8 +14,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/io.dart';
 import 'package:analyzer/src/lint/linter.dart';
-import 'package:analyzer/src/lint/project.dart';
-import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:yaml/yaml.dart';
 
@@ -124,18 +121,9 @@
       },
     );
 
-    AnalysisSession? projectAnalysisSession;
     for (io.File file in files) {
       var path = _absoluteNormalizedPath(file.path);
       _filesAnalyzed.add(path);
-      var analysisContext = contextCollection.contextFor(path);
-      var analysisSession = analysisContext.currentSession;
-      projectAnalysisSession = analysisSession;
-    }
-
-    if (projectAnalysisSession != null) {
-      // ignore: deprecated_member_use_from_same_package
-      await _visitProject(projectAnalysisSession);
     }
 
     var result = <AnalysisErrorInfo>[];
@@ -161,24 +149,6 @@
     path = pathContext.normalize(path);
     return path;
   }
-
-  @Deprecated('DartProject is deprecated. This is slated for removal')
-  Future<void> _visitProject(AnalysisSession projectAnalysisSession) async {
-    Future<DartProject> createProject() async {
-      return await DartProject.create(
-        projectAnalysisSession,
-        _filesAnalyzed.toList(),
-      );
-    }
-
-    DartProject? project;
-    for (var lint in Registry.ruleRegistry) {
-      if (lint is ProjectVisitor) {
-        project ??= await createProject();
-        (lint as ProjectVisitor).visit(project);
-      }
-    }
-  }
 }
 
 /// Prints logging information comments to the [outSink] and error messages to
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index bbbb005..11e023e 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -35,7 +35,6 @@
 import 'package:analyzer/src/lint/config.dart';
 import 'package:analyzer/src/lint/io.dart';
 import 'package:analyzer/src/lint/linter_visitor.dart' show NodeLintRegistry;
-import 'package:analyzer/src/lint/project.dart';
 import 'package:analyzer/src/lint/pub.dart';
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/services/lint.dart' show Linter;
@@ -627,11 +626,6 @@
     return name.compareTo(other.name);
   }
 
-  /// Return a visitor to be passed to provide access to Dart project context
-  /// and to perform project-level analyses.
-  @Deprecated('Use LinterContext instead')
-  ProjectVisitor? getProjectVisitor() => null;
-
   /// Return a visitor to be passed to pubspecs to perform lint
   /// analysis.
   /// Lint errors are reported via this [Linter]'s error [reporter].
@@ -875,7 +869,7 @@
     return registry[name + message] ??= _LintCode._(name, message);
   }
 
-  _LintCode._(String name, String message) : super(name, message);
+  _LintCode._(super.name, super.message);
 }
 
 /// The state of a [LinterNameInScopeResolutionResult].
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index b08cc00..3383df0 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -9,7 +9,10 @@
 import 'package:analyzer/src/services/lint.dart';
 
 /// The type of the function that handles exceptions in lints.
-typedef LintRuleExceptionHandler = void Function(
+///
+/// Returns `true` if the exception was fully handled, or `false` if
+/// the exception should be rethrown.
+typedef LintRuleExceptionHandler = bool Function(
     AstNode node, LintRule linter, dynamic exception, StackTrace stackTrace);
 
 /// The AST visitor that runs handlers for nodes from the [registry].
@@ -769,7 +772,10 @@
       try {
         node.accept(subscription.visitor);
       } catch (exception, stackTrace) {
-        exceptionHandler(node, subscription.linter, exception, stackTrace);
+        if (!exceptionHandler(
+            node, subscription.linter, exception, stackTrace)) {
+          rethrow;
+        }
       }
       timer?.stop();
     }
diff --git a/pkg/analyzer/lib/src/lint/project.dart b/pkg/analyzer/lib/src/lint/project.dart
deleted file mode 100644
index 17f95be..0000000
--- a/pkg/analyzer/lib/src/lint/project.dart
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2015, 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.
-
-import 'dart:io';
-
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/lint/io.dart';
-import 'package:analyzer/src/lint/pub.dart';
-import 'package:collection/collection.dart';
-import 'package:path/path.dart' as p;
-
-Pubspec? _findAndParsePubspec(Directory root) {
-  if (root.existsSync()) {
-    var pubspec = root
-        .listSync(followLinks: false)
-        .whereType<File>()
-        .firstWhereOrNull((f) => isPubspecFile(f));
-    if (pubspec != null) {
-      return Pubspec.parse(pubspec.readAsStringSync(),
-          sourceUrl: p.toUri(pubspec.path));
-    }
-  }
-  return null;
-}
-
-/// A semantic representation of a Dart project.
-///
-/// Projects provide a semantic model of a Dart project based on the
-/// [pub package layout conventions](https://dart.dev/tools/pub/package-layout).
-/// This model allows clients to traverse project contents in a convenient and
-/// standardized way, access global information (such as whether elements are
-/// in the "public API") and resources that have special meanings in the
-/// context of pub package layout conventions.
-@Deprecated('Use LinterContext instead')
-class DartProject {
-  late final _ApiModel _apiModel;
-  String? _name;
-  Pubspec? _pubspec;
-
-  /// Project root.
-  final Directory root;
-
-  /// Create a Dart project for the corresponding [analysisSession] and [files].
-  /// If a [dir] is unspecified the current working directory will be
-  /// used.
-  ///
-  /// Note: clients should call [create] which performs API model initialization.
-  DartProject._(AnalysisSession analysisSession, List<String> files,
-      {Directory? dir})
-      : root = dir ?? Directory.current {
-    _pubspec = _findAndParsePubspec(root);
-    _apiModel = _ApiModel(analysisSession, files, root);
-  }
-
-  /// The project's name.
-  ///
-  /// Project names correspond to the package name as specified in the project's
-  /// [pubspec]. The pubspec is found relative to the project [root].  If no
-  /// pubspec can be found, the name defaults to the project root basename.
-  String get name => _name ??= _calculateName();
-
-  /// The project's pubspec.
-  Pubspec? get pubspec => _pubspec;
-
-  /// Returns `true` if the given element is part of this project's public API.
-  ///
-  /// Public API elements are defined as all elements that are in the packages's
-  /// `lib` directory, *less* those in `lib/src` (which are treated as private
-  /// *implementation files*), plus elements having been explicitly exported
-  /// via an `export` directive.
-  bool isApi(Element element) => _apiModel.contains(element);
-
-  String _calculateName() {
-    final pubspec = this.pubspec;
-    if (pubspec != null) {
-      var nameEntry = pubspec.name;
-      if (nameEntry != null) {
-        return nameEntry.value.text!;
-      }
-    }
-    return p.basename(root.path);
-  }
-
-  /// Create an initialized Dart project for the corresponding [analysisSession]
-  /// and [files].
-  /// If a [dir] is unspecified the current working directory will be
-  /// used.
-  static Future<DartProject> create(
-      AnalysisSession analysisSession, List<String> files,
-      {Directory? dir}) async {
-    DartProject project = DartProject._(analysisSession, files, dir: dir);
-    await project._apiModel._calculate();
-    return project;
-  }
-}
-
-/// An object that can be used to visit Dart project structure.
-@Deprecated('Use LinterContext instead')
-abstract class ProjectVisitor<T> {
-  T? visit(DartProject project) => null;
-}
-
-/// Captures the project's API as defined by pub package layout standards.
-class _ApiModel {
-  final AnalysisSession analysisSession;
-  final List<String> files;
-  final Directory root;
-  final Set<Element> elements = {};
-
-  _ApiModel(this.analysisSession, this.files, this.root) {
-    _calculate();
-  }
-
-  /// Return `true` if this element is part of the public API for this package.
-  bool contains(Element? element) {
-    while (element != null) {
-      if (!element.isPrivate && elements.contains(element)) {
-        return true;
-      }
-      element = element.enclosingElement;
-    }
-    return false;
-  }
-
-  Future<void> _calculate() async {
-    if (files.isEmpty) {
-      return;
-    }
-
-    String libDir = '${root.path}/lib';
-    String libSrcDir = '$libDir/src';
-
-    for (var file in files) {
-      if (file.startsWith(libDir) && !file.startsWith(libSrcDir)) {
-        var result = await analysisSession.getResolvedUnit(file);
-        if (result is ResolvedUnitResult) {
-          LibraryElement library = result.libraryElement;
-
-          NamespaceBuilder namespaceBuilder = NamespaceBuilder();
-          Namespace exports =
-              namespaceBuilder.createExportNamespaceForLibrary(library);
-          Namespace public =
-              namespaceBuilder.createPublicNamespaceForLibrary(library);
-          elements.addAll(exports.definedNames.values);
-          elements.addAll(public.definedNames.values);
-        }
-      }
-    }
-  }
-}
diff --git a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
index 8fc1f98..a33a561 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
@@ -94,14 +94,11 @@
   const ManifestWarningCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'ManifestWarningCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
index 7ca6652..11726f9 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
@@ -146,14 +146,11 @@
   const PubspecWarningCode(
     String name,
     String problemMessage, {
-    String? correctionMessage,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correctionMessage: correctionMessage,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
           name: name,
           problemMessage: problemMessage,
           uniqueName: 'PubspecWarningCode.${uniqueName ?? name}',
diff --git a/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart
index e091ea27..d778d3b 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
 import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
@@ -13,8 +11,7 @@
 import 'package:yaml/yaml.dart';
 
 class DependencyValidator extends BasePubspecValidator {
-  DependencyValidator(ResourceProvider provider, Source source)
-      : super(provider, source);
+  DependencyValidator(super.provider, super.source);
 
   /// Validate the value of the required `name` field.
   void validate(ErrorReporter reporter, Map<dynamic, YamlNode> contents) {
diff --git a/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart
index 1d2ac0e..49bbc30 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
 import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:yaml/yaml.dart';
@@ -17,8 +15,7 @@
     'web',
   ];
 
-  FieldValidator(ResourceProvider provider, Source source)
-      : super(provider, source);
+  FieldValidator(super.provider, super.source);
 
   /// Validate fields.
   void validate(ErrorReporter reporter, Map<dynamic, YamlNode> contents) {
diff --git a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
index 83f9fc7..a3298b8 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
@@ -5,15 +5,13 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
 import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:path/path.dart' as path;
 import 'package:yaml/yaml.dart';
 
 class FlutterValidator extends BasePubspecValidator {
-  FlutterValidator(ResourceProvider provider, Source source)
-      : super(provider, source);
+  FlutterValidator(super.provider, super.source);
 
   /// Validate the value of the optional `flutter` field.
   void validate(ErrorReporter reporter, Map<dynamic, YamlNode> contents) {
diff --git a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
index 9564ab7..921576e 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
@@ -3,15 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
 import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:yaml/yaml.dart';
 
 class NameValidator extends BasePubspecValidator {
-  NameValidator(ResourceProvider provider, Source source)
-      : super(provider, source);
+  NameValidator(super.provider, super.source);
 
   /// Validate the value of the required `name` field.
   void validate(ErrorReporter reporter, Map<dynamic, YamlNode> contents) {
diff --git a/pkg/analyzer/lib/src/summary/flat_buffers.dart b/pkg/analyzer/lib/src/summary/flat_buffers.dart
index 1624f4c..0dfd67c 100644
--- a/pkg/analyzer/lib/src/summary/flat_buffers.dart
+++ b/pkg/analyzer/lib/src/summary/flat_buffers.dart
@@ -719,7 +719,7 @@
 
 /// The list backed by 64-bit values - Uint64 length and Float64.
 class _FbFloat64List extends _FbList<double> {
-  _FbFloat64List(BufferContext bc, int offset) : super(bc, offset);
+  _FbFloat64List(super.bc, super.offset);
 
   @override
   double operator [](int i) {
@@ -771,7 +771,7 @@
 
 /// List backed by 32-bit unsigned integers.
 class _FbUint32List extends _FbList<int> {
-  _FbUint32List(BufferContext bc, int offset) : super(bc, offset);
+  _FbUint32List(super.bc, super.offset);
 
   @override
   int operator [](int i) {
@@ -781,7 +781,7 @@
 
 /// List backed by 8-bit unsigned integers.
 class _FbUint8List extends _FbList<int> {
-  _FbUint8List(BufferContext bc, int offset) : super(bc, offset);
+  _FbUint8List(super.bc, super.offset);
 
   @override
   int operator [](int i) {
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index 490ebef..34780d5 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -65,7 +65,7 @@
   /// The summary file where this source was defined.
   final String summaryPath;
 
-  InSummarySource(Uri uri, this.summaryPath) : super(uri);
+  InSummarySource(super.uri, this.summaryPath);
 
   @override
   TimestampedData<String> get contents => TimestampedData<String>(0, '');
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 80f6e6b..4b3e6c3 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -505,14 +505,10 @@
   final _LocalElementIndexer localElements = _LocalElementIndexer();
 
   ResolutionSink({
-    required ByteSink sink,
-    required StringIndexer stringIndexer,
+    required super.sink,
+    required super.stringIndexer,
     required _BundleWriterReferences references,
-  })  : _references = references,
-        super(
-          sink: sink,
-          stringIndexer: stringIndexer,
-        );
+  }) : _references = references;
 
   /// TODO(scheglov) Triage places where we write elements.
   /// Some of then cannot be members, e.g. type names.
diff --git a/pkg/analyzer/lib/src/summary2/macro_application_error.dart b/pkg/analyzer/lib/src/summary2/macro_application_error.dart
index de56919..46e7dcd 100644
--- a/pkg/analyzer/lib/src/summary2/macro_application_error.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_application_error.dart
@@ -12,11 +12,10 @@
   final String message;
 
   ArgumentMacroApplicationError({
-    required int annotationIndex,
+    required super.annotationIndex,
     required this.argumentIndex,
     required this.message,
   }) : super._(
-          annotationIndex: annotationIndex,
           kind: MacroApplicationErrorKind.argument,
         );
 
@@ -98,11 +97,10 @@
   final String stackTrace;
 
   UnknownMacroApplicationError({
-    required int annotationIndex,
+    required super.annotationIndex,
     required this.message,
     required this.stackTrace,
   }) : super._(
-          annotationIndex: annotationIndex,
           kind: MacroApplicationErrorKind.unknown,
         );
 
diff --git a/pkg/analyzer/lib/src/summary2/macro_declarations.dart b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
index f855d8b..2a097a8 100644
--- a/pkg/analyzer/lib/src/summary2/macro_declarations.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
@@ -15,24 +15,15 @@
   late final ClassElement element;
 
   ClassDeclarationImpl._({
-    required int id,
-    required macro.IdentifierImpl identifier,
-    required List<macro.TypeParameterDeclarationImpl> typeParameters,
-    required List<macro.TypeAnnotationImpl> interfaces,
-    required bool isAbstract,
-    required bool isExternal,
-    required List<macro.TypeAnnotationImpl> mixins,
-    required macro.TypeAnnotationImpl? superclass,
-  }) : super(
-          id: id,
-          identifier: identifier,
-          typeParameters: typeParameters,
-          interfaces: interfaces,
-          isAbstract: isAbstract,
-          isExternal: isExternal,
-          mixins: mixins,
-          superclass: superclass,
-        );
+    required super.id,
+    required super.identifier,
+    required super.typeParameters,
+    required super.interfaces,
+    required super.isAbstract,
+    required super.isExternal,
+    required super.mixins,
+    required super.superclass,
+  });
 }
 
 class DeclarationBuilder {
@@ -270,7 +261,7 @@
     return macro.TypeParameterDeclarationImpl(
       id: macro.RemoteInstance.uniqueId,
       identifier: _identifier(node.name),
-      bound: node.bound?.mapOrNull(_typeAnnotation),
+      bound: node.bound.mapOrNull(_typeAnnotation),
     );
   }
 
@@ -287,31 +278,21 @@
 
 class FieldDeclarationImpl extends macro.FieldDeclarationImpl {
   FieldDeclarationImpl({
-    required int id,
-    required macro.IdentifierImpl identifier,
-    required bool isExternal,
-    required bool isFinal,
-    required bool isLate,
-    required macro.TypeAnnotationImpl type,
-    required macro.IdentifierImpl definingClass,
-    required bool isStatic,
-  }) : super(
-          id: id,
-          identifier: identifier,
-          isExternal: isExternal,
-          isFinal: isFinal,
-          isLate: isLate,
-          type: type,
-          definingClass: definingClass,
-          isStatic: isStatic,
-        );
+    required super.id,
+    required super.identifier,
+    required super.isExternal,
+    required super.isFinal,
+    required super.isLate,
+    required super.type,
+    required super.definingClass,
+    required super.isStatic,
+  });
 }
 
 class IdentifierImpl extends macro.IdentifierImpl {
   late final Element? element;
 
-  IdentifierImpl({required int id, required String name})
-      : super(id: id, name: name);
+  IdentifierImpl({required super.id, required super.name});
 }
 
 extension<T> on T? {
diff --git a/pkg/analyzer/lib/src/summary2/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary2/package_bundle_reader.dart
index ec05912..c0ac1e5 100644
--- a/pkg/analyzer/lib/src/summary2/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/package_bundle_reader.dart
@@ -2,10 +2,8 @@
 // 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.
 
-import 'dart:typed_data';
-
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
 
 class PackageBundle extends PackageBundleReader {
-  PackageBundle.fromBuffer(Uint8List bytes) : super(bytes);
+  PackageBundle.fromBuffer(super.bytes);
 }
diff --git a/pkg/analyzer/lib/src/util/performance/operation_performance.dart b/pkg/analyzer/lib/src/util/performance/operation_performance.dart
index b3f6b38..7c510eb 100644
--- a/pkg/analyzer/lib/src/util/performance/operation_performance.dart
+++ b/pkg/analyzer/lib/src/util/performance/operation_performance.dart
@@ -56,7 +56,7 @@
   @override
   int value = 0;
 
-  OperationPerformanceDataImpl_int(String name) : super(name);
+  OperationPerformanceDataImpl_int(super.name);
 
   void add(int item) {
     value += item;
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 1b59a3a..a9606e7 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -30,7 +30,7 @@
 class ForwardingTestListener extends ForwardingListener {
   final _stack = <String>[];
 
-  ForwardingTestListener([Listener? listener]) : super(listener);
+  ForwardingTestListener([super.listener]);
 
   void begin(String event) {
     expect(event, isNotNull);
diff --git a/pkg/analyzer/test/id_tests/assigned_variables_test.dart b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
index bc1eab7..5107df9 100644
--- a/pkg/analyzer/test/id_tests/assigned_variables_test.dart
+++ b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
@@ -53,9 +53,7 @@
   AssignedVariablesForTesting<AstNode, PromotableElement>?
       _currentAssignedVariables;
 
-  _AssignedVariablesDataExtractor(
-      Uri uri, Map<Id, ActualData<_Data>> actualMap, this._flowResult)
-      : super(uri, actualMap);
+  _AssignedVariablesDataExtractor(super.uri, super.actualMap, this._flowResult);
 
   @override
   _Data? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/constant_test.dart b/pkg/analyzer/test/id_tests/constant_test.dart
index 10a1825..703d860 100644
--- a/pkg/analyzer/test/id_tests/constant_test.dart
+++ b/pkg/analyzer/test/id_tests/constant_test.dart
@@ -55,8 +55,7 @@
 }
 
 class ConstantsDataExtractor extends AstDataExtractor<String> {
-  ConstantsDataExtractor(Uri uri, Map<Id, ActualData<String>> actualMap)
-      : super(uri, actualMap);
+  ConstantsDataExtractor(super.uri, super.actualMap);
 
   @override
   String? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/definite_assignment_test.dart b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
index 7d920ab..42a17e3 100644
--- a/pkg/analyzer/test/id_tests/definite_assignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
@@ -62,8 +62,7 @@
   final FlowAnalysisDataForTesting _flowResult;
 
   _DefiniteAssignmentDataExtractor(
-      Uri uri, Map<Id, ActualData<String>> actualMap, this._flowResult)
-      : super(uri, actualMap);
+      super.uri, super.actualMap, this._flowResult);
 
   @override
   String? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
index f17d8e2..a6dae8f 100644
--- a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
@@ -62,8 +62,7 @@
   final FlowAnalysisDataForTesting _flowResult;
 
   _DefiniteUnassignmentDataExtractor(
-      Uri uri, Map<Id, ActualData<String>> actualMap, this._flowResult)
-      : super(uri, actualMap);
+      super.uri, super.actualMap, this._flowResult);
 
   @override
   String? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
index 2ba48a6..ad1e1fc 100644
--- a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
@@ -46,9 +46,7 @@
 
 class _InferredTypeArgumentsDataExtractor
     extends AstDataExtractor<List<DartType>> {
-  _InferredTypeArgumentsDataExtractor(
-      Uri uri, Map<Id, ActualData<List<DartType>>> actualMap)
-      : super(uri, actualMap);
+  _InferredTypeArgumentsDataExtractor(super.uri, super.actualMap);
 
   @override
   List<DartType>? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
index 94b3771..e4a4ed6 100644
--- a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
@@ -45,9 +45,7 @@
 }
 
 class _InferredVariableTypesDataExtractor extends AstDataExtractor<DartType> {
-  _InferredVariableTypesDataExtractor(
-      Uri uri, Map<Id, ActualData<DartType>> actualMap)
-      : super(uri, actualMap);
+  _InferredVariableTypesDataExtractor(super.uri, super.actualMap);
 
   @override
   DartType? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index 08756c3..8e08527 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -76,8 +76,7 @@
 class _InheritanceDataExtractor extends AstDataExtractor<String> {
   final inheritance = InheritanceManager3();
 
-  _InheritanceDataExtractor(Uri uri, Map<Id, ActualData<String>> actualMap)
-      : super(uri, actualMap);
+  _InheritanceDataExtractor(super.uri, super.actualMap);
 
   @override
   String? computeElementValue(Id id, Element element) {
diff --git a/pkg/analyzer/test/id_tests/nullability_test.dart b/pkg/analyzer/test/id_tests/nullability_test.dart
index 659e605..0b70277 100644
--- a/pkg/analyzer/test/id_tests/nullability_test.dart
+++ b/pkg/analyzer/test/id_tests/nullability_test.dart
@@ -47,9 +47,7 @@
 class _NullabilityDataExtractor extends AstDataExtractor<String> {
   final TypeSystem _typeSystem;
 
-  _NullabilityDataExtractor(
-      Uri uri, Map<Id, ActualData<String>> actualMap, this._typeSystem)
-      : super(uri, actualMap);
+  _NullabilityDataExtractor(super.uri, super.actualMap, this._typeSystem);
 
   @override
   String? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/reachability_test.dart b/pkg/analyzer/test/id_tests/reachability_test.dart
index 6997d16..829faf8 100644
--- a/pkg/analyzer/test/id_tests/reachability_test.dart
+++ b/pkg/analyzer/test/id_tests/reachability_test.dart
@@ -51,11 +51,7 @@
     extends AstDataExtractor<Set<_ReachabilityAssertion>> {
   final FlowAnalysisDataForTesting _flowResult;
 
-  _ReachabilityDataExtractor(
-      Uri uri,
-      Map<Id, ActualData<Set<_ReachabilityAssertion>>> actualMap,
-      this._flowResult)
-      : super(uri, actualMap);
+  _ReachabilityDataExtractor(super.uri, super.actualMap, this._flowResult);
 
   @override
   Set<_ReachabilityAssertion>? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/type_promotion_test.dart b/pkg/analyzer/test/id_tests/type_promotion_test.dart
index 0f7f189..d7cfb0d 100644
--- a/pkg/analyzer/test/id_tests/type_promotion_test.dart
+++ b/pkg/analyzer/test/id_tests/type_promotion_test.dart
@@ -42,8 +42,7 @@
 }
 
 class _TypePromotionDataExtractor extends AstDataExtractor<DartType> {
-  _TypePromotionDataExtractor(Uri uri, Map<Id, ActualData<DartType>> actualMap)
-      : super(uri, actualMap);
+  _TypePromotionDataExtractor(super.uri, super.actualMap);
 
   @override
   DartType? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
index 2f8e046..f5a83c7 100644
--- a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
@@ -49,9 +49,7 @@
 class _WhyNotPromotedDataExtractor extends AstDataExtractor<String?> {
   final FlowAnalysisDataForTesting _flowResult;
 
-  _WhyNotPromotedDataExtractor(
-      Uri uri, Map<Id, ActualData<String?>> actualMap, this._flowResult)
-      : super(uri, actualMap);
+  _WhyNotPromotedDataExtractor(super.uri, super.actualMap, this._flowResult);
 
   @override
   String? computeNodeValue(Id id, AstNode node) {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 5a963a6..5ceb724 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -2509,29 +2509,6 @@
     expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
   }
 
-  test_parseFileSync_doesNotReadPartedFiles() async {
-    var a = convertPath('/test/lib/a.dart');
-    var b = convertPath('/test/lib/b.dart');
-
-    newFile(a, r'''
-part of my;
-''');
-    newFile(b, r'''
-library my;
-part 'a.dart';
-''');
-
-    expect(driver.fsState.knownFilePaths, isEmpty);
-
-    // Don't read `a.dart` when parse.
-    driver.parseFileSync(b);
-    expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
-
-    // Still don't read `a.dart` when parse the second time.
-    driver.parseFileSync(b);
-    expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
-  }
-
   test_parseFileSync_languageVersion() async {
     var path = convertPath('/test/lib/test.dart');
 
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 2ec38e5..0070cbe 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -36,6 +36,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(FileSystemStateTest);
     defineReflectiveTests(FileSystemState_BazelWorkspaceTest);
+    defineReflectiveTests(FileSystemState_PubPackageTest);
   });
 }
 
@@ -119,6 +120,585 @@
 }
 
 @reflectiveTest
+class FileSystemState_PubPackageTest extends PubPackageResolutionTest {
+  FileState fileStateFor(File file) {
+    return fsStateFor(file).getFileForPath(file.path);
+  }
+
+  FileSystemState fsStateFor(File file) {
+    return driverFor(file.path).fsState;
+  }
+
+  test_newFile_library_includePart_withoutPartOf() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+// no part of
+''');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    // Library `a.dart` includes `b.dart` as a part.
+    _assertPartedFiles(aState, [b]);
+
+    // But `b.dart` thinks that it is a library itself.
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    // Refreshing the library does not change this.
+    aState.refresh();
+    _assertPartedFiles(aState, [b]);
+    bState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+  }
+
+  test_newFile_libraryAugmentation_invalid() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+library augment 'da:';
+''');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryAugmentationUnknownFileStateKind;
+    });
+  }
+
+  /// TODO(scheglov) implement
+  @FailingTest(reason: 'No import augment directive')
+  test_newFile_libraryAugmentation_valid() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/a.dart', r'''
+library augment 'a.dart';
+''');
+
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as LibraryAugmentationKnownFileStateKind;
+      final aState = fileStateFor(a);
+      expect(kind.augmented, same(aState));
+    });
+  }
+
+  test_newFile_libraryDirective() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+library my;
+''');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+  }
+
+  test_newFile_noDirectives() async {
+    final a = newFile('$testPackageLibPath/a.dart', '');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+  }
+
+  test_newFile_partOfName() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+library my.lib;
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of my.lib;
+''');
+
+    final bState = fileStateFor(b);
+
+    // We don't know the library initially.
+    // Even though the library file exists, we have not seen it yet.
+    bState.assertKind((kind) {
+      kind as PartUnknownNameFileStateKind;
+      expect(kind.directive.name, 'my.lib');
+    });
+
+    // Read the library file.
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+    _assertPartedFiles(aState, [b]);
+
+    // Now the part knows its library.
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+  }
+
+  test_newFile_partOfName_differentName() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+library my.lib;
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of other.lib;
+''');
+
+    final bState = fileStateFor(b);
+
+    // We don't know the library initially.
+    // Even though the library file exists, we have not seen it yet.
+    bState.assertKind((kind) {
+      kind as PartUnknownNameFileStateKind;
+      expect(kind.directive.name, 'other.lib');
+    });
+
+    // Read the library file.
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+    _assertPartedFiles(aState, [b]);
+
+    // Now the part knows its library.
+    // The name of the library in the part file does not matter.
+    // What counts is that the library includes it.
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+  }
+
+  test_newFile_partOfName_twoLibraries() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'c.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part 'c.dart';
+''');
+
+    final c = newFile('$testPackageLibPath/c.dart', r'''
+part of 'doesNotMatter.dart';
+''');
+
+    final aState = fileStateFor(a);
+    _assertPartedFiles(aState, [c]);
+
+    // We set the library while reading `a.dart` file.
+    final cState = fileStateFor(c);
+    cState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, aState);
+    });
+
+    // Reading `b.dart` does not update the part.
+    final bState = fileStateFor(b);
+    _assertPartedFiles(bState, [c]);
+    cState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, aState);
+    });
+
+    // Refreshing `b.dart` does not update the part.
+    bState.refresh();
+    cState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, aState);
+    });
+
+    // Exclude the part from `a.dart` - switches to `b.dart` as its library.
+    newFile(a.path, '');
+    aState.refresh();
+    cState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, bState);
+    });
+
+    // Exclude the part from `b.dart` as well - switches to unknown.
+    newFile(b.path, '');
+    bState.refresh();
+    cState.assertKind((kind) {
+      kind as PartUnknownUriFileStateKind;
+    });
+  }
+
+  test_newFile_partOfUri_doesNotExist() async {
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
+''');
+
+    final bState = fileStateFor(b);
+
+    // If the library does not part the file, it does not matter what the
+    // part file says - the part file will not be analyzed during the library
+    // analysis.
+    bState.assertKind((kind) {
+      kind as PartUnknownUriFileStateKind;
+    });
+
+    // Create the library that includes the part file.
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    // The library file has already been read because of `part of uri`.
+    // So, we explicitly refresh it.
+    final aState = fileStateFor(a);
+    aState.refresh();
+    _assertPartedFiles(aState, [b]);
+
+    // Now the part file knows its library.
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+
+    // Refreshing the part file does not break the kind.
+    bState.refresh();
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+  }
+
+  test_newFile_partOfUri_exists_hasPart() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
+''');
+
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      // We have not read the library file explicitly yet.
+      // But it was read because of the `part of` directive.
+      final aState = fileStateFor(a);
+      _assertPartedFiles(aState, [b]);
+      expect(kind.library, same(aState));
+    });
+
+    // Refreshing the part file does not break the kind.
+    bState.refresh();
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      final aState = fileStateFor(a);
+      expect(kind.library, same(aState));
+    });
+  }
+
+  test_newFile_partOfUri_exists_noPart() async {
+    newFile('$testPackageLibPath/a.dart', '');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
+''');
+
+    final bState = fileStateFor(b);
+
+    // If the library does not part the file, it does not matter what the
+    // part file says - the part file will not be analyzed during the library
+    // analysis.
+    bState.assertKind((kind) {
+      kind as PartUnknownUriFileStateKind;
+    });
+  }
+
+  test_newFile_partOfUri_invalid() async {
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'da:';
+''');
+
+    final bState = fileStateFor(b);
+
+    // The URI is invalid, so there is no way to discover the library.
+    bState.assertKind((kind) {
+      kind as PartUnknownUriFileStateKind;
+      expect(kind.directive.uri, 'da:');
+    });
+
+    // But reading a library that includes this part will update it.
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+    final aState = fileStateFor(a);
+    _assertPartedFiles(aState, [b]);
+
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+  }
+
+  test_refresh_library_removePart_partOfName() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part of my;
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of my;
+''');
+
+    final c = newFile('$testPackageLibPath/c.dart', r'''
+library my;
+part 'a.dart';
+part 'b.dart';
+''');
+
+    final cState = fileStateFor(c);
+    cState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+    _assertPartedFiles(cState, [a, b]);
+
+    final aState = fileStateFor(a);
+    final bState = fileStateFor(b);
+
+    // Both part files know the library.
+    aState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+
+    newFile(c.path, r'''
+library my;
+part 'b.dart';
+''');
+
+    // Stop referencing `a.dart` part file.
+    cState.refresh();
+    _assertPartedFiles(cState, [b]);
+
+    // So, the `a.dart` does not know its library anymore.
+    // But `b.dart` still knows it.
+    aState.assertKind((kind) {
+      kind as PartUnknownNameFileStateKind;
+    });
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+  }
+
+  test_refresh_library_removePart_partOfUri() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'test.dart';
+''');
+
+    final c = newFile('$testPackageLibPath/c.dart', r'''
+library my;
+part 'a.dart';
+part 'b.dart';
+''');
+
+    final cState = fileStateFor(c);
+    cState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+    _assertPartedFiles(cState, [a, b]);
+
+    final aState = fileStateFor(a);
+    final bState = fileStateFor(b);
+
+    // Both part files know the library.
+    aState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+
+    newFile(c.path, r'''
+library my;
+part 'b.dart';
+''');
+
+    // Stop referencing `a.dart` part file.
+    cState.refresh();
+    _assertPartedFiles(cState, [b]);
+
+    // So, the `a.dart` does not know its library anymore.
+    // But `b.dart` still knows it.
+    aState.assertKind((kind) {
+      kind as PartUnknownUriFileStateKind;
+    });
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, cState);
+    });
+  }
+
+  test_refresh_library_to_partOfName() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    // No `part of`, so it is a library.
+    final b = newFile('$testPackageLibPath/b.dart', '');
+
+    final aState = fileStateFor(a);
+    _assertPartedFiles(aState, [b]);
+
+    final aCycle_1 = aState.libraryCycle;
+
+    // No `part of`, so it is a library.
+    // It does not matter, that `a.dart` tried to use it as part.
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    // Make it a part.
+    newFile(b.path, r'''
+part of my.lib;
+''');
+
+    // We will discover the library, by asking each of them.
+    bState.refresh();
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+
+    // The file `b.dart` was something else, but now it is a known part.
+    // This affects libraries that include it.
+    final aCycle_2 = aState.libraryCycle;
+    expect(aCycle_2.apiSignature, isNot(aCycle_1.apiSignature));
+  }
+
+  test_refresh_library_to_partOfName_noLibrary() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+library my;
+''');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    newFile(a.path, r'''
+part of my;
+''');
+
+    aState.refresh();
+
+    // No library that includes it, so it stays unknown.
+    aState.assertKind((kind) {
+      kind as PartUnknownNameFileStateKind;
+      expect(kind.directive.name, 'my');
+    });
+  }
+
+  test_refresh_library_to_partOfUri() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library b;
+''');
+
+    final aState = fileStateFor(a);
+    _assertPartedFiles(aState, [b]);
+
+    final aCycle_1 = aState.libraryCycle;
+
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    newFile(b.path, r'''
+part of 'a.dart';
+''');
+
+    // We will discover the library, by asking each of them.
+    bState.refresh();
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, same(aState));
+    });
+
+    // The file `b.dart` was something else, but now it is a known part.
+    // This affects libraries that include it.
+    final aCycle_2 = aState.libraryCycle;
+    expect(aCycle_2.apiSignature, isNot(aCycle_1.apiSignature));
+  }
+
+  test_refresh_partOfUri_to_library() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
+''');
+
+    final aState = fileStateFor(a);
+    aState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+    _assertPartedFiles(aState, [b]);
+
+    final aCycle_1 = aState.libraryCycle;
+
+    // There is `part of` in `b.dart`, so it is a part.
+    final bState = fileStateFor(b);
+    bState.assertKind((kind) {
+      kind as PartKnownFileStateKind;
+      expect(kind.library, aState);
+    });
+
+    // There are no directives in `b.dart`, so it is a library.
+    newFile(b.path, r'''
+// no part of
+''');
+    bState.refresh();
+    bState.assertKind((kind) {
+      kind as LibraryFileStateKind;
+    });
+
+    // Library `a.dart` still considers `b.dart` its part.
+    _assertPartedFiles(aState, [b]);
+
+    // The library cycle for `a.dart` is different now.
+    final aCycle_2 = aState.libraryCycle;
+    expect(aCycle_2.apiSignature, isNot(aCycle_1.apiSignature));
+  }
+
+  void _assertPartedFiles(FileState fileState, List<File> expected) {
+    final actualFiles = fileState.partedFiles.map((part) {
+      if (part != null) {
+        return getFile(part.path);
+      }
+    }).toList();
+    expect(actualFiles, expected);
+  }
+}
+
+@reflectiveTest
 class FileSystemStateTest with ResourceProviderMixin {
   final ByteStore byteStore = MemoryByteStore();
   final FileContentOverlay contentOverlay = FileContentOverlay();
@@ -958,6 +1538,13 @@
   }
 }
 
+extension on FileState {
+  void assertKind(void Function(FileStateKind kind) f) {
+    expect(kind.file, same(this));
+    f(kind);
+  }
+}
+
 extension _Either2Extension<T1, T2> on Either2<T1, T2> {
   T1 get t1 {
     late T1 result;
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index 40822da..f638f17 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -282,6 +282,8 @@
   /// The path that is not in [workspaceRootPath], contains external packages.
   String get packagesRootPath => '/packages';
 
+  File get testFile => getFile(testFilePath);
+
   @override
   String get testFilePath => '$testPackageLibPath/test.dart';
 
diff --git a/pkg/analyzer/test/src/lint/lint_rule_test.dart b/pkg/analyzer/test/src/lint/lint_rule_test.dart
index e87f18a..4bfee29 100644
--- a/pkg/analyzer/test/src/lint/lint_rule_test.dart
+++ b/pkg/analyzer/test/src/lint/lint_rule_test.dart
@@ -70,8 +70,8 @@
 class CollectingReporter extends ErrorReporter {
   ErrorCode? code;
 
-  CollectingReporter(AnalysisErrorListener listener, Source source)
-      : super(listener, source, isNonNullableByDefault: false);
+  CollectingReporter(super.listener, super.source)
+      : super(isNonNullableByDefault: false);
 
   @override
   void reportErrorForElement(ErrorCode errorCode, Element element,
diff --git a/pkg/analyzer/test/src/lint/project_test.dart b/pkg/analyzer/test/src/lint/project_test.dart
deleted file mode 100644
index 8b6d01a..0000000
--- a/pkg/analyzer/test/src/lint/project_test.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2015, 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.
-
-import 'dart:io';
-
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/src/lint/project.dart';
-import 'package:test/test.dart';
-
-main() {
-//  defineTests();
-}
-
-defineTests() {
-  group('project', () {
-    group('basic', () {
-      // TODO(brianwilkerson) These tests fail on the bots because the cwd is
-      // not the same there as when we run tests locally.
-      group('cwd', () async {
-        // ignore: deprecated_member_use_from_same_package
-        var project = await DartProject.create(_AnalysisSessionMock(), []);
-        test('name', () {
-          expect(project.name, 'analyzer');
-        });
-        test('spec', () {
-          expect(project.pubspec, isNotNull);
-        });
-        test('root', () {
-          expect(project.root.path, Directory.current.path);
-        });
-      });
-      // TODO(brianwilkerson) Rewrite these to use a memory resource provider.
-//      group('p1', () {
-//        var project =
-//            new DartProject(null, null, dir: new Directory('test/_data/p1'));
-//        test('name', () {
-//          expect(project.name, 'p1');
-//        });
-//        test('spec', () {
-//          expect(project.pubspec, isNotNull);
-//          expect(project.pubspec.name.value.text, 'p1');
-//        });
-//        test('root', () {
-//          expect(project.root.path, 'test/_data/p1');
-//        });
-//      });
-//      group('no pubspec', () {
-//        var project = new DartProject(null, null,
-//            dir: new Directory('test/_data/p1/src'));
-//        test('name', () {
-//          expect(project.name, 'src');
-//        });
-//        test('spec', () {
-//          expect(project.pubspec, isNull);
-//        });
-//        test('root', () {
-//          expect(project.root.path, 'test/_data/p1/src');
-//        });
-//      });
-    });
-  });
-}
-
-class _AnalysisSessionMock implements AnalysisSession {
-  @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
diff --git a/pkg/analyzer/test/src/lint/test_all.dart b/pkg/analyzer/test/src/lint/test_all.dart
index 6b1afdc..801f080 100644
--- a/pkg/analyzer/test/src/lint/test_all.dart
+++ b/pkg/analyzer/test/src/lint/test_all.dart
@@ -8,7 +8,6 @@
 import 'io_test.dart' as io;
 import 'lint_rule_test.dart' as lint_rule;
 import 'linter/test_all.dart' as linter;
-import 'project_test.dart' as project;
 import 'pub_test.dart' as pub;
 
 main() {
@@ -17,7 +16,6 @@
     io.main();
     lint_rule.main();
     linter.main();
-    project.main();
     pub.main();
   }, name: 'lint');
 }
diff --git a/pkg/analyzer/test/verify_tests_test.dart b/pkg/analyzer/test/verify_tests_test.dart
index cd6a480..4a0e714 100644
--- a/pkg/analyzer/test/verify_tests_test.dart
+++ b/pkg/analyzer/test/verify_tests_test.dart
@@ -17,7 +17,7 @@
 }
 
 class _VerifyTests extends VerifyTests {
-  _VerifyTests(String testDirPath) : super(testDirPath);
+  _VerifyTests(super.testDirPath);
 
   @override
   bool isExpensive(Resource resource) =>
diff --git a/pkg/analyzer/tool/messages/error_code_info.dart b/pkg/analyzer/tool/messages/error_code_info.dart
index f643590a..3ba935a 100644
--- a/pkg/analyzer/tool/messages/error_code_info.dart
+++ b/pkg/analyzer/tool/messages/error_code_info.dart
@@ -236,24 +236,15 @@
 /// analyzer's `messages.yaml` file.
 class AnalyzerErrorCodeInfo extends ErrorCodeInfo {
   AnalyzerErrorCodeInfo(
-      {String? comment,
-      String? correctionMessage,
-      String? documentation,
-      bool hasPublishedDocs = false,
-      bool isUnresolvedIdentifier = false,
-      required String problemMessage,
-      String? sharedName})
-      : super(
-            comment: comment,
-            correctionMessage: correctionMessage,
-            documentation: documentation,
-            hasPublishedDocs: hasPublishedDocs,
-            isUnresolvedIdentifier: isUnresolvedIdentifier,
-            problemMessage: problemMessage,
-            sharedName: sharedName);
+      {super.comment,
+      super.correctionMessage,
+      super.documentation,
+      super.hasPublishedDocs,
+      super.isUnresolvedIdentifier,
+      required super.problemMessage,
+      super.sharedName});
 
-  AnalyzerErrorCodeInfo.fromYaml(Map<Object?, Object?> yaml)
-      : super.fromYaml(yaml);
+  AnalyzerErrorCodeInfo.fromYaml(super.yaml) : super.fromYaml();
 }
 
 /// Data tables mapping between CFE errors and their corresponding automatically
@@ -531,10 +522,10 @@
   /// The index of the error in the analyzer's `fastaAnalyzerErrorCodes` table.
   final int? index;
 
-  FrontEndErrorCodeInfo.fromYaml(Map<Object?, Object?> yaml)
+  FrontEndErrorCodeInfo.fromYaml(super.yaml)
       : analyzerCode = _decodeAnalyzerCode(yaml['analyzerCode']),
         index = yaml['index'] as int?,
-        super.fromYaml(yaml);
+        super.fromYaml();
 
   @override
   Map<Object?, Object?> toYaml() => {
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 6773a78..9026a44 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -55,7 +55,7 @@
 /// Code generator for analyzer error classes.
 class _AnalyzerErrorGenerator {
   final List<ErrorClassInfo> errorClasses;
-  final out = StringBuffer('''
+  final StringBuffer out = StringBuffer('''
 // Copyright (c) 2021, 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.
@@ -107,14 +107,11 @@
           '[name].');
       out.writeln(
           'const ${errorClass.name}(String name, String problemMessage, {');
-      out.writeln('String? correctionMessage,');
-      out.writeln('bool hasPublishedDocs = false,');
-      out.writeln('bool isUnresolvedIdentifier = false,');
+      out.writeln('super.correctionMessage,');
+      out.writeln('super.hasPublishedDocs = false,');
+      out.writeln('super.isUnresolvedIdentifier = false,');
       out.writeln('String? uniqueName,');
       out.writeln('}) : super(');
-      out.writeln('correctionMessage: correctionMessage,');
-      out.writeln('hasPublishedDocs: hasPublishedDocs,');
-      out.writeln('isUnresolvedIdentifier: isUnresolvedIdentifier,');
       out.writeln('name: name,');
       out.writeln('problemMessage: problemMessage,');
       out.writeln("uniqueName: '${errorClass.name}.\${uniqueName ?? name}',");
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 46ace57..1428a2b 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -183,8 +183,7 @@
   final idl_model.ClassDeclaration cls;
   List<String> constructorParams = <String>[];
 
-  _BuilderGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.cls)
-      : super(idl, outBuffer);
+  _BuilderGenerator(super.idl, super.outBuffer, this.cls);
 
   String get builderName => '${name}Builder';
 
@@ -807,8 +806,7 @@
 class _EnumReaderGenerator extends _BaseGenerator {
   final idl_model.EnumDeclaration enum_;
 
-  _EnumReaderGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.enum_)
-      : super(idl, outBuffer);
+  _EnumReaderGenerator(super.idl, super.outBuffer, this.enum_);
 
   void generate() {
     String name = enum_.name;
@@ -835,8 +833,7 @@
 }
 
 class _FlatBufferSchemaGenerator extends _BaseGenerator {
-  _FlatBufferSchemaGenerator(idl_model.Idl idl, StringBuffer outBuffer)
-      : super(idl, outBuffer);
+  _FlatBufferSchemaGenerator(super.idl, super.outBuffer);
 
   void generate() {
     for (idl_model.EnumDeclaration enm in _idl.enums.values) {
@@ -928,8 +925,7 @@
 class _ImplGenerator extends _BaseGenerator {
   final idl_model.ClassDeclaration cls;
 
-  _ImplGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.cls)
-      : super(idl, outBuffer);
+  _ImplGenerator(super.idl, super.outBuffer, this.cls);
 
   void generate() {
     String name = cls.name;
@@ -1036,8 +1032,7 @@
 class _MixinGenerator extends _BaseGenerator {
   final idl_model.ClassDeclaration cls;
 
-  _MixinGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.cls)
-      : super(idl, outBuffer);
+  _MixinGenerator(super.idl, super.outBuffer, this.cls);
 
   void generate() {
     String name = cls.name;
@@ -1126,8 +1121,7 @@
 class _ReaderGenerator extends _BaseGenerator {
   final idl_model.ClassDeclaration cls;
 
-  _ReaderGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.cls)
-      : super(idl, outBuffer);
+  _ReaderGenerator(super.idl, super.outBuffer, this.cls);
 
   void generateReader() {
     String name = cls.name;
diff --git a/pkg/analyzer/tool/summary/idl_model.dart b/pkg/analyzer/tool/summary/idl_model.dart
index 6da5456..14dec0e 100644
--- a/pkg/analyzer/tool/summary/idl_model.dart
+++ b/pkg/analyzer/tool/summary/idl_model.dart
@@ -50,14 +50,12 @@
   /// List of enumerated values.
   final List<EnumValueDeclaration> values = <EnumValueDeclaration>[];
 
-  EnumDeclaration(String? documentation, String name)
-      : super(documentation, name);
+  EnumDeclaration(super.documentation, super.name);
 }
 
 /// Information about a single enum value defined in the IDL.
 class EnumValueDeclaration extends Declaration {
-  EnumValueDeclaration(String? documentation, String name)
-      : super(documentation, name);
+  EnumValueDeclaration(super.documentation, super.name);
 }
 
 /// Information about a single class field defined in the IDL.
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 20c7dd4..01e413d 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -44,15 +44,13 @@
 
   final List<ClassMember> members;
 
-  ClassDeclaration(Comment? documentationComment, List<Annotation>? metadata,
-      this.name, this.superclass, this.members)
-      : super(documentationComment, metadata);
+  ClassDeclaration(super.documentationComment, super.metadata, this.name,
+      this.superclass, this.members);
 }
 
 /// "Mini AST" representation of a class member.
 class ClassMember extends AnnotatedNode {
-  ClassMember(Comment? documentationComment, List<Annotation>? metadata)
-      : super(documentationComment, metadata);
+  ClassMember(super.documentationComment, super.metadata);
 }
 
 /// "Mini AST" representation of a comment.
@@ -86,18 +84,14 @@
 
 /// "Mini AST" representation of a top level member of a compilation unit.
 class CompilationUnitMember extends AnnotatedNode {
-  CompilationUnitMember(
-      Comment? documentationComment, List<Annotation>? metadata)
-      : super(documentationComment, metadata);
+  CompilationUnitMember(super.documentationComment, super.metadata);
 }
 
 /// "Mini AST" representation of a constructor declaration.
 class ConstructorDeclaration extends ClassMember {
   final String name;
 
-  ConstructorDeclaration(
-      Comment? documentationComment, List<Annotation>? metadata, this.name)
-      : super(documentationComment, metadata);
+  ConstructorDeclaration(super.documentationComment, super.metadata, this.name);
 }
 
 /// "Mini AST" representation of an individual enum constant in an enum
@@ -106,8 +100,7 @@
   final String name;
 
   EnumConstantDeclaration(
-      Comment? documentationComment, List<Annotation>? metadata, this.name)
-      : super(documentationComment, metadata);
+      super.documentationComment, super.metadata, this.name);
 }
 
 /// "Mini AST" representation of an enum declaration.
@@ -116,9 +109,8 @@
 
   final List<EnumConstantDeclaration> constants;
 
-  EnumDeclaration(Comment? documentationComment, List<Annotation>? metadata,
-      this.name, this.constants)
-      : super(documentationComment, metadata);
+  EnumDeclaration(
+      super.documentationComment, super.metadata, this.name, this.constants);
 }
 
 /// "Mini AST" representation of an expression.
@@ -157,9 +149,8 @@
 
   final TypeName? returnType;
 
-  MethodDeclaration(Comment? documentationComment, List<Annotation>? metadata,
-      this.isGetter, this.name, this.returnType)
-      : super(documentationComment, metadata);
+  MethodDeclaration(super.documentationComment, super.metadata, this.isGetter,
+      this.name, this.returnType);
 }
 
 /// Parser listener which generates a "mini AST" representation of the source
@@ -665,7 +656,7 @@
 
 /// Parser intended for use with [MiniAstBuilder].
 class MiniAstParser extends Parser {
-  MiniAstParser(MiniAstBuilder listener) : super(listener);
+  MiniAstParser(MiniAstBuilder super.listener);
 
   @override
   Token parseArgumentsOpt(Token token) {
diff --git a/pkg/compiler/lib/src/common/ram_usage.dart b/pkg/compiler/lib/src/common/ram_usage.dart
new file mode 100644
index 0000000..76c5c2d
--- /dev/null
+++ b/pkg/compiler/lib/src/common/ram_usage.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2022, 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.
+
+/// This library contains logic to fetch RAM utilization information.
+/// It is implemented as an RPC that connects to the VM's vm_service isolate and
+/// all necessary details.
+///
+/// This is similar to the information that the VM prints when provided the
+/// `--print_metrics` flag. However, this API allows us to obtain the data
+/// directly while the process is running and embedded in the compiler output
+/// (and in the future in dump-info).
+///
+/// Note that one could alternatively use Process.maxRss instead, however that
+/// number may have a lot more variability depending on system conditions.
+/// Our goal with this number is not so much to be exact, but to have a good
+/// metric we can track overtime and use to detect improvements and regressions.
+import 'dart:developer';
+import 'package:vm_service/vm_service_io.dart' as vm_service_io;
+
+Future<int> _currentHeapCapacity() async {
+  final info =
+      await Service.controlWebServer(enable: true, silenceOutput: true);
+  final observatoryUri = info.serverUri!;
+  final wsUri = 'ws://${observatoryUri.authority}${observatoryUri.path}ws';
+  final vmService = await vm_service_io.vmServiceConnectUri(wsUri);
+  int sum = 0;
+  for (final group in (await vmService.getVM()).isolateGroups!) {
+    final usage = await vmService.getIsolateGroupMemoryUsage(group.id!);
+    sum += usage.heapCapacity!;
+  }
+  vmService.dispose();
+  return sum;
+}
+
+Future<String> currentHeapCapacityInMb() async {
+  final capacity = await _currentHeapCapacity();
+  return "${(capacity / (1024 * 1024)).toStringAsFixed(3)} MB";
+}
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 26b15e7..bb3680f 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -16,6 +16,7 @@
 import '../compiler_api.dart' as api;
 import '../compiler_api_unmigrated.dart' as api_unmigrated;
 import 'commandline_options.dart';
+import 'common/ram_usage.dart';
 import 'options.dart' show CompilerOptions, FeatureOptions;
 import 'source_file_provider.dart';
 import 'util/command_line.dart';
@@ -933,7 +934,8 @@
       RandomAccessFileOutputProvider(out, sourceMapOut,
           onInfo: diagnosticHandler.info, onFailure: fail);
 
-  api.CompilationResult compilationDone(api.CompilationResult result) {
+  Future<api.CompilationResult> compilationDone(
+      api.CompilationResult result) async {
     if (!result.isSuccess) {
       fail('Compilation failed.');
     }
@@ -1060,7 +1062,8 @@
     print('$processName '
         '${_formatCharacterCount(inputSize)} $inputName to '
         '${_formatCharacterCount(outputSize)} $outputName in '
-        '${_formatDurationAsSeconds(wallclock.elapsed)} seconds');
+        '${_formatDurationAsSeconds(wallclock.elapsed)} seconds using '
+        '${await currentHeapCapacityInMb()} of memory');
     if (primaryOutputSize != null) {
       diagnosticHandler
           .info('${_formatCharacterCount(primaryOutputSize)} $outputName '
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index f3dfd26..071e5e1 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -19,6 +19,7 @@
   js_runtime: any
   js_shared: any
   kernel: any
+  vm_service: any
 
 dev_dependencies:
   args: any
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index e95a0af..506b32d 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -4780,8 +4780,17 @@
   }
 
   @override
+  js_ast.Expression visitAbstractSuperPropertyGet(
+      AbstractSuperPropertyGet node) {
+    return _emitSuperPropertyGet(node.interfaceTarget);
+  }
+
+  @override
   js_ast.Expression visitSuperPropertyGet(SuperPropertyGet node) {
-    var target = node.interfaceTarget;
+    return _emitSuperPropertyGet(node.interfaceTarget);
+  }
+
+  js_ast.Expression _emitSuperPropertyGet(Member target) {
     if (_reifyTearoff(target)) {
       if (_superAllowed) {
         var jsTarget = _emitSuperTarget(target);
@@ -4794,10 +4803,19 @@
   }
 
   @override
+  js_ast.Expression visitAbstractSuperPropertySet(
+      AbstractSuperPropertySet node) {
+    return _emitSuperPropertySet(node.interfaceTarget, node.value);
+  }
+
+  @override
   js_ast.Expression visitSuperPropertySet(SuperPropertySet node) {
-    var target = node.interfaceTarget;
+    return _emitSuperPropertySet(node.interfaceTarget, node.value);
+  }
+
+  js_ast.Expression _emitSuperPropertySet(Member target, Expression value) {
     var jsTarget = _emitSuperTarget(target, setter: true);
-    return _visitExpression(node.value).toAssignExpression(jsTarget);
+    return _visitExpression(value).toAssignExpression(jsTarget);
   }
 
   @override
@@ -5404,10 +5422,20 @@
 
   // TODO(jmesserly): optimize super operators for kernel
   @override
+  js_ast.Expression visitAbstractSuperMethodInvocation(
+      AbstractSuperMethodInvocation node) {
+    return _emitSuperMethodInvocation(node.interfaceTarget, node.arguments);
+  }
+
+  @override
   js_ast.Expression visitSuperMethodInvocation(SuperMethodInvocation node) {
-    var target = node.interfaceTarget;
-    return js_ast.Call(_emitSuperTarget(target),
-        _emitArgumentList(node.arguments, target: target));
+    return _emitSuperMethodInvocation(node.interfaceTarget, node.arguments);
+  }
+
+  js_ast.Expression _emitSuperMethodInvocation(
+      Member target, Arguments arguments) {
+    return js_ast.Call(
+        _emitSuperTarget(target), _emitArgumentList(arguments, target: target));
   }
 
   /// Emits the [js_ast.PropertyAccess] for accessors or method calls to
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 2832049..57e4d89 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -142,12 +142,11 @@
   @override
   String get fullNameForErrors => name;
 
-  VariableDeclaration build(
-      SourceLibraryBuilder library, int functionNestingLevel) {
+  VariableDeclaration build(SourceLibraryBuilder library) {
     if (variable == null) {
       DartType? builtType = type?.build(library, TypeUse.parameterType);
       variable = new VariableDeclarationImpl(
-          name == noNameSentinel ? null : name, functionNestingLevel,
+          name == noNameSentinel ? null : name,
           type: builtType,
           isFinal: isFinal,
           isConst: false,
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 0090e6f..4582b5c 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -131,12 +131,9 @@
   ///
   typedefAlias,
 
-  /// An internally created function type used when build local functions.
-  functionSignature,
-
   /// The this type of an enum.
-  // TODO(johnniwinther): This is doesn't currently have the correct value
-  // and/or well-boundedness checking.
+  // TODO(johnniwinther): This doesn't currently have the correct value and/or
+  //  well-boundedness checking.
   enumSelfType,
 
   /// A type used as a type literal.
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index ef54d70..58d6b73 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1978,7 +1978,7 @@
           typeParameters: typeDefinitions,
           positionalParameters: definitions.keys
               .map<VariableDeclaration>((name) =>
-                  new VariableDeclarationImpl(name, 0, type: definitions[name])
+                  new VariableDeclarationImpl(name, type: definitions[name])
                     ..fileOffset = cls?.fileOffset ??
                         extension?.fileOffset ??
                         libraryBuilder.library.fileOffset)
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 6f25365..392e727 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -86,6 +86,7 @@
 import '../source/source_field_builder.dart';
 import '../source/source_function_builder.dart';
 import '../source/source_library_builder.dart';
+import '../source/source_member_builder.dart';
 import '../source/source_procedure_builder.dart';
 import '../source/stack_listener_impl.dart'
     show StackListenerImpl, offsetForToken;
@@ -3265,8 +3266,7 @@
     bool isLate = (currentLocalVariableModifiers & lateMask) != 0;
     bool isRequired = (currentLocalVariableModifiers & requiredMask) != 0;
     assert(isConst == (constantContext == ConstantContext.inferred));
-    VariableDeclaration variable = new VariableDeclarationImpl(
-        identifier.name, functionNestingLevel,
+    VariableDeclaration variable = new VariableDeclarationImpl(identifier.name,
         forSyntheticToken: identifier.token.isSynthetic,
         initializer: initializer,
         type: currentLocalVariableType,
@@ -4383,8 +4383,7 @@
           fileUri: uri)
         ..hasDeclaredInitializer = (initializerStart != null);
     }
-    VariableDeclaration variable =
-        parameter.build(libraryBuilder, functionNestingLevel);
+    VariableDeclaration variable = parameter.build(libraryBuilder);
     Expression? initializer = name?.initializer;
     if (initializer != null) {
       if (member is RedirectingFactoryBuilder) {
@@ -4568,11 +4567,10 @@
       int parameterCount = catchParameters!.parameters!.length;
       if (parameterCount > 0) {
         exception = catchParameters.parameters![0];
-        exception.build(libraryBuilder, functionNestingLevel).type =
-            exceptionType;
+        exception.build(libraryBuilder).type = exceptionType;
         if (parameterCount > 1) {
           stackTrace = catchParameters.parameters![1];
-          stackTrace.build(libraryBuilder, functionNestingLevel).type =
+          stackTrace.build(libraryBuilder).type =
               coreTypes.stackTraceRawType(libraryBuilder.nonNullable);
         }
       }
@@ -5772,6 +5770,25 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    debugEvent("AugmentSuperExpression");
+    if (member is SourceMemberBuilder) {
+      SourceMemberBuilder sourceMemberBuilder = member as SourceMemberBuilder;
+      if (sourceMemberBuilder.isAugmentation) {
+        // TODO(johnniwinther): Implement augment super handling.
+        int fileOffset = augmentToken.charOffset;
+        push(forest.createAsExpression(fileOffset,
+            forest.createNullLiteral(fileOffset), const DynamicType(),
+            forNonNullableByDefault: libraryBuilder.isNonNullableByDefault));
+        return;
+      }
+    }
+    push(new IncompleteErrorGenerator(
+        this, augmentToken, fasta.messageInvalidAugmentSuper));
+  }
+
+  @override
   void handleNamedArgument(Token colon) {
     debugEvent("NamedArgument");
     assert(checkState(colon, [
@@ -5803,8 +5820,7 @@
     debugEvent("FunctionName");
     Identifier name = pop() as Identifier;
     Token nameToken = name.token;
-    VariableDeclaration variable = new VariableDeclarationImpl(
-        name.name, functionNestingLevel,
+    VariableDeclaration variable = new VariableDeclarationImpl(name.name,
         forSyntheticToken: nameToken.isSynthetic,
         isFinal: true,
         isLocalFunction: true)
@@ -6171,8 +6187,7 @@
       }
     } else {
       VariableDeclaration variable = elements.syntheticVariableDeclaration =
-          forest.createVariableDeclaration(
-              offsetForToken(forToken), null, functionNestingLevel,
+          forest.createVariableDeclaration(offsetForToken(forToken), null,
               isFinal: true);
       if (lvalue is Generator) {
         /// We are in this case, where `lvalue` isn't a [VariableDeclaration]:
@@ -7644,37 +7659,49 @@
 
   FunctionNode buildFunctionNode(
       SourceLibraryBuilder library,
-      TypeBuilder? returnType,
-      List<TypeVariableBuilder>? typeParameters,
+      TypeBuilder? returnTypeBuilder,
+      List<TypeVariableBuilder>? typeVariableBuilders,
       AsyncMarker asyncModifier,
       Statement body,
       int fileEndOffset) {
-    // TODO(johnniwinther): Avoid creating a FunctionTypeBuilder to create
-    // the function. The function type is not written as a type by the user
-    // and shouldn't be checked as such.
-    FunctionType type = toFunctionType(
-            returnType, const NullabilityBuilder.omitted(), typeParameters)
-        .build(library, TypeUse.functionSignature) as FunctionType;
+    DartType returnType =
+        returnTypeBuilder?.build(library, TypeUse.returnType) ??
+            const DynamicType();
+    int requiredParameterCount = 0;
     List<VariableDeclaration> positionalParameters = <VariableDeclaration>[];
     List<VariableDeclaration> namedParameters = <VariableDeclaration>[];
     if (parameters != null) {
-      for (FormalParameterBuilder parameter in parameters!) {
-        if (parameter.isNamed) {
-          namedParameters.add(parameter.variable!);
-        } else {
-          positionalParameters.add(parameter.variable!);
+      for (FormalParameterBuilder formal in parameters!) {
+        VariableDeclaration parameter = formal.build(
+          library,
+        );
+        if (formal.isPositional) {
+          positionalParameters.add(parameter);
+          if (formal.isRequiredPositional) requiredParameterCount++;
+        } else if (formal.isNamed) {
+          namedParameters.add(parameter);
         }
       }
       namedParameters.sort((VariableDeclaration a, VariableDeclaration b) {
         return a.name!.compareTo(b.name!);
       });
     }
+
+    List<TypeParameter>? typeParameters;
+    if (typeVariableBuilders != null) {
+      typeParameters = <TypeParameter>[];
+      for (TypeVariableBuilder t in typeVariableBuilders) {
+        typeParameters.add(t.parameter);
+        // Build the bound to detect cycles in typedefs.
+        t.bound?.build(library, TypeUse.typeParameterBound);
+      }
+    }
     return new FunctionNode(body,
-        typeParameters: type.typeParameters,
+        typeParameters: typeParameters,
         positionalParameters: positionalParameters,
         namedParameters: namedParameters,
-        requiredParameterCount: type.requiredParameterCount,
-        returnType: type.returnType,
+        requiredParameterCount: requiredParameterCount,
+        returnType: returnType,
         asyncMarker: asyncModifier)
       ..fileOffset = charOffset
       ..fileEndOffset = fileEndOffset;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index bd6983c..320a50c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -3772,10 +3772,23 @@
   Constant visitStaticSet(StaticSet node) => defaultExpression(node);
 
   @override
+  Constant visitAbstractSuperMethodInvocation(
+          AbstractSuperMethodInvocation node) =>
+      defaultExpression(node);
+
+  @override
   Constant visitSuperMethodInvocation(SuperMethodInvocation node) =>
       defaultExpression(node);
 
   @override
+  Constant visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) =>
+      defaultExpression(node);
+
+  @override
+  Constant visitAbstractSuperPropertySet(AbstractSuperPropertySet node) =>
+      defaultExpression(node);
+
+  @override
   Constant visitSuperPropertyGet(SuperPropertyGet node) =>
       defaultExpression(node);
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 73decad..8593b65 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -646,8 +646,7 @@
 
   /// Creates [VariableDeclaration] for a variable named [name] at the given
   /// [functionNestingLevel].
-  VariableDeclaration createVariableDeclaration(
-      int fileOffset, String? name, int functionNestingLevel,
+  VariableDeclaration createVariableDeclaration(int fileOffset, String? name,
       {Expression? initializer,
       DartType? type,
       bool isFinal: false,
@@ -657,7 +656,7 @@
       bool isLocalFunction: false}) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
-    return new VariableDeclarationImpl(name, functionNestingLevel,
+    return new VariableDeclarationImpl(name,
         type: type,
         initializer: initializer,
         isFinal: isFinal,
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index dd68ba0..71ba7f6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -1196,6 +1196,8 @@
       return new LocalForInVariable(syntheticAssignment);
     } else if (syntheticAssignment is PropertySet) {
       return new PropertyForInVariable(syntheticAssignment);
+    } else if (syntheticAssignment is AbstractSuperPropertySet) {
+      return new AbstractSuperPropertyForInVariable(syntheticAssignment);
     } else if (syntheticAssignment is SuperPropertySet) {
       return new SuperPropertyForInVariable(syntheticAssignment);
     } else if (syntheticAssignment is StaticSet) {
@@ -6149,6 +6151,21 @@
   }
 
   @override
+  ExpressionInferenceResult visitAbstractSuperMethodInvocation(
+      AbstractSuperMethodInvocation node, DartType typeContext) {
+    if (node.interfaceTarget != null) {
+      inferrer.instrumentation?.record(
+          inferrer.uriForInstrumentation,
+          node.fileOffset,
+          'target',
+          new InstrumentationValueForMember(node.interfaceTarget!));
+    }
+    assert(node.interfaceTarget == null || node.interfaceTarget is Procedure);
+    return inferrer.inferSuperMethodInvocation(node, node.name,
+        node.arguments as ArgumentsImpl, typeContext, node.interfaceTarget);
+  }
+
+  @override
   ExpressionInferenceResult visitSuperMethodInvocation(
       SuperMethodInvocation node, DartType typeContext) {
     if (node.interfaceTarget != null) {
@@ -6159,8 +6176,22 @@
           new InstrumentationValueForMember(node.interfaceTarget!));
     }
     assert(node.interfaceTarget == null || node.interfaceTarget is Procedure);
-    return inferrer.inferSuperMethodInvocation(
-        node, typeContext, node.interfaceTarget);
+    return inferrer.inferSuperMethodInvocation(node, node.name,
+        node.arguments as ArgumentsImpl, typeContext, node.interfaceTarget);
+  }
+
+  @override
+  ExpressionInferenceResult visitAbstractSuperPropertyGet(
+      AbstractSuperPropertyGet node, DartType typeContext) {
+    if (node.interfaceTarget != null) {
+      inferrer.instrumentation?.record(
+          inferrer.uriForInstrumentation,
+          node.fileOffset,
+          'target',
+          new InstrumentationValueForMember(node.interfaceTarget!));
+    }
+    return inferrer.inferSuperPropertyGet(
+        node, node.name, typeContext, node.interfaceTarget);
   }
 
   @override
@@ -6174,7 +6205,33 @@
           new InstrumentationValueForMember(node.interfaceTarget!));
     }
     return inferrer.inferSuperPropertyGet(
-        node, typeContext, node.interfaceTarget);
+        node, node.name, typeContext, node.interfaceTarget);
+  }
+
+  @override
+  ExpressionInferenceResult visitAbstractSuperPropertySet(
+      AbstractSuperPropertySet node, DartType typeContext) {
+    DartType receiverType = inferrer.classHierarchy.getTypeAsInstanceOf(
+        inferrer.thisType!,
+        inferrer.thisType!.classNode.supertype!.classNode,
+        inferrer.libraryBuilder.library)!;
+
+    ObjectAccessTarget writeTarget = node.interfaceTarget != null
+        ? new ObjectAccessTarget.interfaceMember(node.interfaceTarget!,
+            isPotentiallyNullable: false)
+        : const ObjectAccessTarget.missing();
+    DartType writeContext = inferrer.getSetterType(writeTarget, receiverType);
+    if (node.interfaceTarget != null) {
+      writeContext = inferrer.computeTypeFromSuperClass(
+          node.interfaceTarget!.enclosingClass!, writeContext);
+    }
+    ExpressionInferenceResult rhsResult = inferrer
+        .inferExpression(node.value, writeContext, true, isVoidAllowed: true);
+    rhsResult = inferrer.ensureAssignableResult(writeContext, rhsResult,
+        fileOffset: node.fileOffset, isVoidAllowed: writeContext is VoidType);
+    Expression rhs = rhsResult.expression;
+    node.value = rhs..parent = node;
+    return new ExpressionInferenceResult(rhsResult.inferredType, node);
   }
 
   @override
@@ -7158,6 +7215,46 @@
   }
 }
 
+class AbstractSuperPropertyForInVariable implements ForInVariable {
+  final AbstractSuperPropertySet superPropertySet;
+
+  DartType? _writeType;
+
+  AbstractSuperPropertyForInVariable(this.superPropertySet);
+
+  @override
+  DartType computeElementType(TypeInferrerImpl inferrer) {
+    DartType receiverType = inferrer.thisType!;
+    ObjectAccessTarget writeTarget = inferrer.findInterfaceMember(
+        receiverType, superPropertySet.name, superPropertySet.fileOffset,
+        callSiteAccessKind: CallSiteAccessKind.setterInvocation,
+        instrumented: true);
+    if (writeTarget.isInstanceMember || writeTarget.isObjectMember) {
+      superPropertySet.interfaceTarget = writeTarget.member;
+    }
+    return _writeType = inferrer.getSetterType(writeTarget, receiverType);
+  }
+
+  @override
+  Expression inferAssignment(TypeInferrerImpl inferrer, DartType rhsType) {
+    Expression rhs = inferrer.ensureAssignable(
+        inferrer.computeGreatestClosure(_writeType!),
+        rhsType,
+        superPropertySet.value,
+        errorTemplate: templateForInLoopElementTypeNotAssignable,
+        nullabilityErrorTemplate:
+            templateForInLoopElementTypeNotAssignableNullability,
+        nullabilityPartErrorTemplate:
+            templateForInLoopElementTypeNotAssignablePartNullability,
+        isVoidAllowed: true);
+    superPropertySet.value = rhs..parent = superPropertySet;
+    ExpressionInferenceResult result = inferrer.inferExpression(
+        superPropertySet, const UnknownType(), !inferrer.isTopLevel,
+        isVoidAllowed: true);
+    return result.expression;
+  }
+}
+
 class SuperPropertyForInVariable implements ForInVariable {
   final SuperPropertySet superPropertySet;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 0fd1abd..01e408e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1589,10 +1589,6 @@
   /// the kernel.
   final bool isImplicitlyTyped;
 
-  // TODO(ahe): Remove this field. We can get rid of it by recording closure
-  // mutation in [BodyBuilder].
-  final int functionNestingLevel;
-
   // TODO(ahe): Remove this field. It's only used locally when compiling a
   // method, and this can thus be tracked in a [Set] (actually, tracking this
   // information in a [List] is probably even faster as the average size will
@@ -1615,7 +1611,7 @@
   /// used.
   bool isStaticLate;
 
-  VariableDeclarationImpl(String? name, this.functionNestingLevel,
+  VariableDeclarationImpl(String? name,
       {this.forSyntheticToken: false,
       bool hasDeclaredInitializer: false,
       Expression? initializer,
@@ -1645,7 +1641,6 @@
 
   VariableDeclarationImpl.forEffect(Expression initializer)
       : forSyntheticToken = false,
-        functionNestingLevel = 0,
         isImplicitlyTyped = false,
         isLocalFunction = false,
         isStaticLate = false,
@@ -1653,7 +1648,6 @@
 
   VariableDeclarationImpl.forValue(Expression initializer)
       : forSyntheticToken = false,
-        functionNestingLevel = 0,
         isImplicitlyTyped = true,
         isLocalFunction = false,
         isStaticLate = false,
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index d75672e..4984f92 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -1968,6 +1968,12 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    _unsupported();
+  }
+
+  @override
   void handleSymbolVoid(Token token) {
     _unhandled();
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index e52c631..fa2a828 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -119,7 +119,7 @@
 
   void becomeNative(SourceLoader loader);
 
-  bool checkPatch(FunctionBuilder patch);
+  bool checkPatch(SourceFunctionBuilder patch);
 
   void reportPatchMismatch(Builder patch);
 }
@@ -343,7 +343,7 @@
     }
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        VariableDeclaration parameter = formal.build(libraryBuilder, 0);
+        VariableDeclaration parameter = formal.build(libraryBuilder);
         if (needsCheckVisitor != null) {
           if (parameter.type.accept(needsCheckVisitor)) {
             parameter.isCovariantByClass = true;
@@ -378,8 +378,7 @@
       // Replace illegal parameters by single dummy parameter.
       // Do this after building the parameters, since the diet listener
       // assumes that parameters are built, even if illegal in number.
-      VariableDeclaration parameter =
-          new VariableDeclarationImpl("#synthetic", 0);
+      VariableDeclaration parameter = new VariableDeclarationImpl("#synthetic");
       function.positionalParameters.clear();
       function.positionalParameters.add(parameter);
       parameter.parent = function;
@@ -493,8 +492,8 @@
   }
 
   @override
-  bool checkPatch(FunctionBuilder patch) {
-    if (!isExternal) {
+  bool checkPatch(SourceFunctionBuilder patch) {
+    if (!isExternal && !patch.libraryBuilder.isAugmentation) {
       patch.libraryBuilder.addProblem(
           messagePatchNonExternal, patch.charOffset, noLength, patch.fileUri!,
           context: [
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 963b623..ffad317 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -4791,7 +4791,6 @@
         case TypeUse.typeParameterDefaultType:
         case TypeUse.defaultTypeAsTypeArgument:
         case TypeUse.deferredTypeError:
-        case TypeUse.functionSignature:
           break;
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 979bf9d..bb6d2ee 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -4132,16 +4132,16 @@
 
   /// Performs the core type inference algorithm for super method invocations.
   ExpressionInferenceResult inferSuperMethodInvocation(
-      SuperMethodInvocation expression,
+      Expression expression,
+      Name methodName,
+      ArgumentsImpl arguments,
       DartType typeContext,
       Procedure? procedure) {
+    int fileOffset = expression.fileOffset;
     ObjectAccessTarget target = procedure != null
         ? new ObjectAccessTarget.interfaceMember(procedure,
             isPotentiallyNullable: false)
         : const ObjectAccessTarget.missing();
-    int fileOffset = expression.fileOffset;
-    Name methodName = expression.name;
-    ArgumentsImpl arguments = expression.arguments as ArgumentsImpl;
     DartType receiverType = thisType!;
     bool isSpecialCasedBinaryOperator =
         isSpecialCasedBinaryOperatorForReceiverType(target, receiverType);
@@ -4155,7 +4155,7 @@
               as FunctionType;
     }
     if (isNonNullableByDefault &&
-        expression.name == equalsName &&
+        methodName == equalsName &&
         functionType.positionalParameters.length == 1) {
       // operator == always allows nullable arguments.
       functionType = new FunctionType([
@@ -4200,7 +4200,7 @@
 
   /// Performs the core type inference algorithm for super property get.
   ExpressionInferenceResult inferSuperPropertyGet(
-      SuperPropertyGet expression, DartType typeContext, Member? member) {
+      Expression expression, Name name, DartType typeContext, Member? member) {
     ObjectAccessTarget readTarget = member != null
         ? new ObjectAccessTarget.interfaceMember(member,
             isPotentiallyNullable: false)
@@ -4215,7 +4215,7 @@
       return instantiateTearOff(inferredType, typeContext, expression);
     }
     flowAnalysis.thisOrSuperPropertyGet(
-        expression, expression.name.text, member, inferredType);
+        expression, name.text, member, inferredType);
     return new ExpressionInferenceResult(inferredType, expression);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index 5137b17..7006708 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -2411,6 +2411,17 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    AugmentSuperExpressionHandle data = new AugmentSuperExpressionHandle(
+        ParserAstType.HANDLE,
+        augmentToken: augmentToken,
+        superToken: superToken,
+        context: context);
+    seen(data);
+  }
+
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     SwitchCaseBegin data = new SwitchCaseBegin(ParserAstType.BEGIN,
         labelCount: labelCount,
@@ -6926,6 +6937,25 @@
       };
 }
 
+class AugmentSuperExpressionHandle extends ParserAstNode {
+  final Token augmentToken;
+  final Token superToken;
+  final IdentifierContext context;
+
+  AugmentSuperExpressionHandle(ParserAstType type,
+      {required this.augmentToken,
+      required this.superToken,
+      required this.context})
+      : super("AugmentSuperExpression", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+        "augmentToken": augmentToken,
+        "superToken": superToken,
+        "context": context,
+      };
+}
+
 class SwitchCaseBegin extends ParserAstNode {
   final int labelCount;
   final int expressionCount;
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 125a09d..d7c85b5 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -490,6 +490,8 @@
 InterpolationInUri/example: Fail
 InvalidAssignmentWarning/analyzerCode: Fail
 InvalidAssignmentWarning/example: Fail
+InvalidAugmentSuper/analyzerCode: Fail
+InvalidAugmentSuper/example: Fail
 InvalidBreakTarget/analyzerCode: Fail
 InvalidBreakTarget/example: Fail
 InvalidCastFunctionExpr/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 745eead..7691707 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -3309,6 +3309,9 @@
   problemMessage: "Expected identifier, but got 'super'."
   analyzerCode: SUPER_AS_EXPRESSION
 
+InvalidAugmentSuper:
+  problemMessage: "'augment super' is only allowed in member augmentations."
+
 SuperAsExpression:
   problemMessage: "Can't use 'super' as an expression."
   correctionMessage: "To delegate a constructor to a super constructor, put the super call as an initializer."
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart b/pkg/front_end/parser_testcases/augmentation/augment_super.dart
new file mode 100644
index 0000000..ef21ddf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart
@@ -0,0 +1,53 @@
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local;
+  augment;
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super();
+  augment super;
+  augment int local;
+  augment;
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local;
+    augment;
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super();
+    augment super;
+    augment int local;
+    augment;
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
new file mode 100644
index 0000000..19a8a3c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
@@ -0,0 +1,348 @@
+Problems reported:
+
+parser/augmentation/augment_super:6:3: Can't have modifier 'augment' here.
+  augment int local;
+  ^^^^^^^
+
+parser/augmentation/augment_super:23:3: Can't have modifier 'augment' here.
+  augment int local;
+  ^^^^^^^
+
+parser/augmentation/augment_super:33:5: Can't have modifier 'augment' here.
+    augment int local;
+    ^^^^^^^
+
+parser/augmentation/augment_super:50:5: Can't have modifier 'augment' here.
+    augment int local;
+    ^^^^^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(local)
+        handleType(int, null)
+        beginVariablesDeclaration(local, null, null)
+          handleIdentifier(local, localVariableDeclaration)
+          beginInitializedIdentifier(local)
+            handleNoVariableInitializer(local)
+          endInitializedIdentifier(local)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleIdentifier(List, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      handleType(List, null)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables({)
+      handleNoFormalParameters({, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments([)
+          handleAugmentSuperExpression(augment, super, expression)
+          handleSpreadExpression(...)
+          handleAugmentSuperExpression(augment, super, expression)
+          handleLiteralInt(0)
+          handleIndexedExpression(null, [, ])
+          handleLiteralList(2, [, null, ])
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(augment, get, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleLiteralInt(0)
+        handleIndexedExpression(null, [, ])
+        handleIdentifier(value, expression)
+        handleNoTypeArguments([)
+        handleNoArguments([)
+        handleSend(value, [)
+        handleLiteralInt(1)
+        handleIndexedExpression(null, [, ])
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleIdentifier(value, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(value, ;)
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(local)
+        handleType(int, null)
+        beginVariablesDeclaration(local, null, null)
+          handleIdentifier(local, localVariableDeclaration)
+          beginInitializedIdentifier(local)
+            handleNoVariableInitializer(local)
+          endInitializedIdentifier(local)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethodErrors)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethodErrors, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments(local)
+              handleType(int, null)
+              beginVariablesDeclaration(local, null, null)
+                handleIdentifier(local, localVariableDeclaration)
+                beginInitializedIdentifier(local)
+                  handleNoVariableInitializer(local)
+                endInitializedIdentifier(local)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, instanceProperty)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables({)
+            handleNoFormalParameters({, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleUnaryPostfixAssignmentExpression(++)
+              handleExpressionStatement(;)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleUnaryPrefixAssignmentExpression(--)
+              handleExpressionStatement(;)
+              beginReturnStatement(return)
+                handleAugmentSuperExpression(augment, super, expression)
+                handleUnaryPrefixExpression(-)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(get, augment, {, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, instanceProperty)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(value)
+                handleType(int, null)
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleIdentifier(value, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(value, ;)
+              handleAssignmentExpression(=)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(injectedInstanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments(local)
+              handleType(int, null)
+              beginVariablesDeclaration(local, null, null)
+                handleIdentifier(local, localVariableDeclaration)
+                beginInitializedIdentifier(local)
+                  handleNoVariableInitializer(local)
+                endInitializedIdentifier(local)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
new file mode 100644
index 0000000..eb29931
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
@@ -0,0 +1,826 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(, augment, null, augment, Instance of 'VoidType', null, topLevelMethod, false)
+        listener: beginTopLevelMethod(, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArguments(super)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                listener: endArguments(0, (, ))
+                            listener: handleSend(augment, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', null, topLevelMethodError, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethodError)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethodError, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                parseExpressionStatementOrDeclarationAfterModifiers(augment, {, null, null, null, false)
+                  looksLikeLocalFunction(local)
+                  listener: beginMetadataStar(augment)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(local)
+                  listener: handleType(int, null)
+                  listener: beginVariablesDeclaration(local, null, null)
+                  parseVariablesDeclarationRest(int, true)
+                    parseOptionallyInitializedIdentifier(int)
+                      ensureIdentifier(int, localVariableDeclaration)
+                        listener: handleIdentifier(local, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(local)
+                      parseVariableInitializerOpt(local)
+                        listener: handleNoVariableInitializer(local)
+                      listener: endInitializedIdentifier(local)
+                    ensureSemicolon(local)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(augment)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(;, expression)
+                              parseSend(;, expression)
+                                isNextIdentifier(;)
+                                ensureIdentifier(;, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(augment, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(augment)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(augment, ;)
+                    ensureSemicolon(augment)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'SimpleTypeWith1Argument', get, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(>)
+        listener: handleType(int, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables({)
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(topLevelProperty)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(topLevelProperty, false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        listener: handleNoTypeArguments([)
+                        parseLiteralListSuffix(return, null)
+                          parseExpression(...)
+                            parsePrecedenceExpression(..., 1, true)
+                              parseUnaryExpression(..., true)
+                                parsePrimary(..., expression)
+                                  parseAugmentSuperExpression(..., expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                          listener: handleSpreadExpression(...)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseAugmentSuperExpression(,, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                                parseExpression([)
+                                  parsePrecedenceExpression([, 1, true)
+                                    parseUnaryExpression([, true)
+                                      parsePrimary([, expression)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                listener: handleIndexedExpression(null, [, ])
+                          listener: handleLiteralList(2, [, null, ])
+                ensureSemicolon(])
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(augment, get, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', set, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                      parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                        parseExpression([)
+                          parsePrecedenceExpression([, 1, true)
+                            parseUnaryExpression([, true)
+                              parsePrimary([, expression)
+                                parseLiteralInt([)
+                                  listener: handleLiteralInt(0)
+                        listener: handleIndexedExpression(null, [, ])
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseSendOrFunctionLiteral(=, expression)
+                              parseSend(=, expression)
+                                isNextIdentifier(=)
+                                ensureIdentifier(=, expression)
+                                  listener: handleIdentifier(value, expression)
+                                listener: handleNoTypeArguments([)
+                                parseArgumentsOpt(value)
+                                  listener: handleNoArguments([)
+                                listener: handleSend(value, [)
+                        parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
+                          parseExpression([)
+                            parsePrecedenceExpression([, 1, true)
+                              parseUnaryExpression([, true)
+                                parsePrimary([, expression)
+                                  parseLiteralInt([)
+                                    listener: handleLiteralInt(1)
+                          listener: handleIndexedExpression(null, [, ])
+                      listener: handleAssignmentExpression(=)
+                  ensureSemicolon(])
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseAugmentSuperExpression(;, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseSendOrFunctionLiteral(=, expression)
+                              parseSend(=, expression)
+                                isNextIdentifier(=)
+                                ensureIdentifier(=, expression)
+                                  listener: handleIdentifier(value, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(value)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(value, ;)
+                      listener: handleAssignmentExpression(=)
+                  ensureSemicolon(value)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(injectedTopLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArguments(super)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                listener: endArguments(0, (, ))
+                            listener: handleSend(augment, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseAugmentSuperExpression(;, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                  ensureSemicolon(super)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                parseExpressionStatementOrDeclarationAfterModifiers(augment, ;, null, null, null, false)
+                  looksLikeLocalFunction(local)
+                  listener: beginMetadataStar(augment)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(local)
+                  listener: handleType(int, null)
+                  listener: beginVariablesDeclaration(local, null, null)
+                  parseVariablesDeclarationRest(int, true)
+                    parseOptionallyInitializedIdentifier(int)
+                      ensureIdentifier(int, localVariableDeclaration)
+                        listener: handleIdentifier(local, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(local)
+                      parseVariableInitializerOpt(local)
+                        listener: handleNoVariableInitializer(local)
+                      listener: endInitializedIdentifier(local)
+                    ensureSemicolon(local)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(augment)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(;, expression)
+                              parseSend(;, expression)
+                                isNextIdentifier(;)
+                                ensureIdentifier(;, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(augment, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(augment)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(augment, ;)
+                    ensureSemicolon(augment)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, augment, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, instanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                    listener: handleSend(augment, ;)
+                          ensureSemicolon())
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethodErrors)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethodErrors)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethodErrors, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                        parseExpressionStatementOrDeclarationAfterModifiers(augment, {, null, null, null, false)
+                          looksLikeLocalFunction(local)
+                          listener: beginMetadataStar(augment)
+                          listener: endMetadataStar(0)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(local)
+                          listener: handleType(int, null)
+                          listener: beginVariablesDeclaration(local, null, null)
+                          parseVariablesDeclarationRest(int, true)
+                            parseOptionallyInitializedIdentifier(int)
+                              ensureIdentifier(int, localVariableDeclaration)
+                                listener: handleIdentifier(local, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(local)
+                              parseVariableInitializerOpt(local)
+                                listener: handleNoVariableInitializer(local)
+                              listener: endInitializedIdentifier(local)
+                            ensureSemicolon(local)
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(augment)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    inPlainSync()
+                                    parseSendOrFunctionLiteral(;, expression)
+                                      parseSend(;, expression)
+                                        isNextIdentifier(;)
+                                        ensureIdentifier(;, expression)
+                                          inPlainSync()
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(augment, ;)
+                            ensureSemicolon(augment)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', get, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, instanceProperty)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables({)
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
+                parseInitializersOpt(instanceProperty)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(instanceProperty)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(instanceProperty, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              listener: handleUnaryPostfixAssignmentExpression(++)
+                          ensureSemicolon(++)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, --)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(--)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(--, 16, true)
+                                    parseUnaryExpression(--, true)
+                                      parsePrimary(--, expression)
+                                        parseAugmentSuperExpression(--, expression)
+                                          listener: handleAugmentSuperExpression(augment, super, expression)
+                                  listener: handleUnaryPrefixAssignmentExpression(--)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrecedenceExpression(-, 16, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseAugmentSuperExpression(-, expression)
+                                      listener: handleAugmentSuperExpression(augment, super, expression)
+                              listener: handleUnaryPrefixExpression(-)
+                        ensureSemicolon(super)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(get, augment, {, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, instanceProperty)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(value)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              parsePrecedenceExpression(=, 1, true)
+                                parseUnaryExpression(=, true)
+                                  parsePrimary(=, expression)
+                                    parseSendOrFunctionLiteral(=, expression)
+                                      parseSend(=, expression)
+                                        isNextIdentifier(=)
+                                        ensureIdentifier(=, expression)
+                                          listener: handleIdentifier(value, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(value)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(value, ;)
+                              listener: handleAssignmentExpression(=)
+                          ensureSemicolon(value)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(injectedInstanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                    listener: handleSend(augment, ;)
+                          ensureSemicolon())
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseAugmentSuperExpression(;, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                          ensureSemicolon(super)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                        parseExpressionStatementOrDeclarationAfterModifiers(augment, ;, null, null, null, false)
+                          looksLikeLocalFunction(local)
+                          listener: beginMetadataStar(augment)
+                          listener: endMetadataStar(0)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(local)
+                          listener: handleType(int, null)
+                          listener: beginVariablesDeclaration(local, null, null)
+                          parseVariablesDeclarationRest(int, true)
+                            parseOptionallyInitializedIdentifier(int)
+                              ensureIdentifier(int, localVariableDeclaration)
+                                listener: handleIdentifier(local, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(local)
+                              parseVariableInitializerOpt(local)
+                                listener: handleNoVariableInitializer(local)
+                              listener: endInitializedIdentifier(local)
+                            ensureSemicolon(local)
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(augment)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    inPlainSync()
+                                    parseSendOrFunctionLiteral(;, expression)
+                                      parseSend(;, expression)
+                                        isNextIdentifier(;)
+                                        ensureIdentifier(;, expression)
+                                          inPlainSync()
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(augment, ;)
+                            ensureSemicolon(augment)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect
new file mode 100644
index 0000000..a85b796
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[KeywordToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[KeywordToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[KeywordToken] super[KeywordToken],[SimpleToken] augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect
new file mode 100644
index 0000000..a85b796
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[KeywordToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[KeywordToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[KeywordToken] super[KeywordToken],[SimpleToken] augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart b/pkg/front_end/parser_testcases/general/augment_super.dart
new file mode 100644
index 0000000..ef21ddf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart
@@ -0,0 +1,53 @@
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local;
+  augment;
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super();
+  augment super;
+  augment int local;
+  augment;
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local;
+    augment;
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super();
+    augment super;
+    augment int local;
+    augment;
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
new file mode 100644
index 0000000..6eeeb58
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
@@ -0,0 +1,790 @@
+Problems reported:
+
+parser/general/augment_super:1:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super:1:1: Expected ';' after this.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super:2:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:2:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:2:17: Expected an identifier, but got ')'.
+  augment super();
+                ^
+
+parser/general/augment_super:5:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super:5:1: Expected ';' after this.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super:6:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super:11:9: A function declaration needs an explicit list of parameters.
+augment List<int> get topLevelProperty {
+        ^^^^
+
+parser/general/augment_super:11:19: Expected a function body, but got 'get'.
+augment List<int> get topLevelProperty {
+                  ^^^
+
+parser/general/augment_super:12:23: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                      ^^^^^
+
+parser/general/augment_super:12:38: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                                     ^^^^^
+
+parser/general/augment_super:15:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super:15:1: Expected ';' after this.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super:16:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:16:11: Expected ';' after this.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:17:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super = value;
+          ^^^^^
+
+parser/general/augment_super:21:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:21:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:21:17: Expected an identifier, but got ')'.
+  augment super();
+                ^
+
+parser/general/augment_super:22:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super;
+          ^^^^^
+
+parser/general/augment_super:23:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super:27:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super:27:1: Expected ';' after this.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super:28:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super:28:3: Expected ';' after this.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super:29:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:29:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:29:19: Expected an identifier, but got ')'.
+    augment super();
+                  ^
+
+parser/general/augment_super:32:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super:32:3: Expected ';' after this.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super:33:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+parser/general/augment_super:37:11: Expected ';' after this.
+  augment int get instanceProperty {
+          ^^^
+
+parser/general/augment_super:38:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super:38:13: Expected ';' after this.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super:38:20: Expected an identifier, but got ';'.
+    augment super++;
+                   ^
+
+parser/general/augment_super:39:7: Expected ';' after this.
+    --augment super;
+      ^^^^^^^
+
+parser/general/augment_super:40:13: Expected ';' after this.
+    return -augment super;
+            ^^^^^^^
+
+parser/general/augment_super:43:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super:43:3: Expected ';' after this.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super:44:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super = value;
+            ^^^^^
+
+parser/general/augment_super:48:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:48:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:48:19: Expected an identifier, but got ')'.
+    augment super();
+                  ^
+
+parser/general/augment_super:49:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super;
+            ^^^^^
+
+parser/general/augment_super:50:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType()
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleParenthesizedExpression(()
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(augment, typeReference)
+      handleNoTypeArguments(List)
+      handleType(augment, null)
+      handleIdentifier(List, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        handleIdentifier(int, typeVariableDeclaration)
+        beginTypeVariable(int)
+          handleTypeVariablesDefined(int, 1)
+          handleNoType(int)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleRecoverableError(MissingFunctionParameters, List, List)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(get)
+  beginMetadataStar(get)
+  endMetadataStar(0)
+  beginTopLevelMember(get)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables({)
+      handleNoFormalParameters({, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments([)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, super)
+          handleSpreadExpression(...)
+          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, super)
+          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleLiteralInt(0)
+          handleIndexedExpression(null, [, ])
+          handleLiteralList(4, [, null, ])
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(get, get, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleNoTypeArguments([)
+        handleLiteralInt(0)
+        handleLiteralList(1, [, null, ])
+        handleIdentifier(value, expression)
+        handleNoTypeArguments([)
+        handleNoArguments([)
+        handleSend(value, [)
+        handleLiteralInt(1)
+        handleIndexedExpression(null, [, ])
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            beginVariableInitializer(=)
+              handleIdentifier(value, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(value, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, set, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleParenthesizedExpression(()
+        handleExpressionStatement(;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType({)
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleParenthesizedExpression(()
+              handleExpressionStatement(;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethodErrors, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, ;)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleIdentifier(augment, typeReference)
+            handleNoTypeArguments(int)
+            handleType(augment, null)
+            handleIdentifier(int, fieldDeclaration)
+            handleNoFieldInitializer(get)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(get)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
+            handleNoType(;)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables({)
+            handleNoFormalParameters({, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(, ;)
+              handleUnaryPrefixAssignmentExpression(++)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(super)
+              handleNoArguments(super)
+              handleSend(augment, super)
+              handleUnaryPrefixAssignmentExpression(--)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+              handleExpressionStatement(;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(;)
+              beginReturnStatement(return)
+                handleIdentifier(augment, expression)
+                handleNoTypeArguments(super)
+                handleNoArguments(super)
+                handleSend(augment, super)
+                handleUnaryPrefixExpression(-)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+              endReturnStatement(true, return, ;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(get, get, {, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(value)
+                handleType(int, null)
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  beginVariableInitializer(=)
+                    handleIdentifier(value, expression)
+                    handleNoTypeArguments(;)
+                    handleNoArguments(;)
+                    handleSend(value, ;)
+                  endVariableInitializer(=)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(set, void, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(injectedInstanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleParenthesizedExpression(()
+              handleExpressionStatement(;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, ;)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
new file mode 100644
index 0000000..4cb40bd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
@@ -0,0 +1,1473 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethod)
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethod, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(;)
+                              parseParenthesizedExpression(;)
+                                parseExpressionInParenthesis(;)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSend((, expression)
+                                              isNextIdentifier(()
+                                              ensureIdentifier((, expression)
+                                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                rewriter()
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments())
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments())
+                                              listener: handleSend(, ))
+                                    ensureCloseParen(, ()
+                                listener: handleParenthesizedExpression(()
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethodError)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethodError, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethodError)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethodError, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, ;)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, ;)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, List, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(augment, typeReference)
+        listener: handleNoTypeArguments(List)
+        listener: handleType(augment, null)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(List, topLevelFunctionDeclaration)
+        parseMethodTypeVar(List)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(int)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(int, typeVariableDeclaration)
+          listener: beginTypeVariable(int)
+          listener: handleTypeVariablesDefined(int, 1)
+          listener: handleNoType(int)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, List, false, MemberKind.TopLevelMethod)
+          missingParameterMessage(MemberKind.TopLevelMethod)
+          reportRecoverableError(List, MissingFunctionParameters)
+            listener: handleRecoverableError(MissingFunctionParameters, List, List)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.TopLevelMethod)
+            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+            reportRecoverableError(get, Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}])
+              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+            insertBlock())
+              rewriter()
+              rewriter()
+          listener: handleInvalidFunctionBody({)
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(get)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(get)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(get)
+      isReservedKeyword({)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', get, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables({)
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(topLevelProperty)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(topLevelProperty, false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        listener: handleNoTypeArguments([)
+                        parseLiteralListSuffix(return, null)
+                          parseExpression(...)
+                            parsePrecedenceExpression(..., 1, true)
+                              parseUnaryExpression(..., true)
+                                parsePrimary(..., expression)
+                                  parseSendOrFunctionLiteral(..., expression)
+                                    parseSend(..., expression)
+                                      isNextIdentifier(...)
+                                      ensureIdentifier(..., expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, super)
+                          listener: handleSpreadExpression(...)
+                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSendOrFunctionLiteral(,, expression)
+                                    parseSend(,, expression)
+                                      isNextIdentifier(,)
+                                      ensureIdentifier(,, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, super)
+                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                                parseExpression([)
+                                  parsePrecedenceExpression([, 1, true)
+                                    parseUnaryExpression([, true)
+                                      parsePrimary([, expression)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                listener: handleIndexedExpression(null, [, ])
+                          listener: handleLiteralList(4, [, null, ])
+                ensureSemicolon(])
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(get, get, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(set)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', set, topLevelProperty, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, [)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction([)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            listener: handleNoTypeArguments([)
+                            parseLiteralListSuffix(;, null)
+                              parseExpression([)
+                                parsePrecedenceExpression([, 1, true)
+                                  parseUnaryExpression([, true)
+                                    parsePrimary([, expression)
+                                      parseLiteralInt([)
+                                        listener: handleLiteralInt(0)
+                              listener: handleLiteralList(1, [, null, ])
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseSendOrFunctionLiteral(=, expression)
+                                parseSend(=, expression)
+                                  isNextIdentifier(=)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(value, expression)
+                                  listener: handleNoTypeArguments([)
+                                  parseArgumentsOpt(value)
+                                    listener: handleNoArguments([)
+                                  listener: handleSend(value, [)
+                          parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
+                            parseExpression([)
+                              parsePrecedenceExpression([, 1, true)
+                                parseUnaryExpression([, true)
+                                  parsePrimary([, expression)
+                                    parseLiteralInt([)
+                                      listener: handleLiteralInt(1)
+                            listener: handleIndexedExpression(null, [, ])
+                        listener: handleAssignmentExpression(=)
+                    ensureSemicolon(])
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseSendOrFunctionLiteral(=, expression)
+                                parseSend(=, expression)
+                                  isNextIdentifier(=)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(value, expression)
+                                  listener: handleNoTypeArguments(;)
+                                  parseArgumentsOpt(value)
+                                    listener: handleNoArguments(;)
+                                  listener: handleSend(value, ;)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(value)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, set, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(injectedTopLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(;)
+                              parseParenthesizedExpression(;)
+                                parseExpressionInParenthesis(;)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSend((, expression)
+                                              isNextIdentifier(()
+                                              ensureIdentifier((, expression)
+                                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                rewriter()
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments())
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments())
+                                              listener: handleSend(, ))
+                                    ensureCloseParen(, ()
+                                listener: handleParenthesizedExpression(()
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, ;)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, ;)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethod)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(;)
+                                      parseParenthesizedExpression(;)
+                                        parseExpressionInParenthesis(;)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                        rewriter()
+                                                        listener: handleIdentifier(, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt()
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(, ))
+                                            ensureCloseParen(, ()
+                                        listener: handleParenthesizedExpression(()
+                            ensureSemicolon())
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethodErrors)
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethodErrors)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethodErrors, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, ;)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, ;)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', int, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                ensureIdentifierPotentiallyRecovered(augment, fieldDeclaration, false)
+                  listener: handleIdentifier(int, fieldDeclaration)
+                parseFieldInitializerOpt(int, int, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(get)
+                ensureSemicolon(int)
+                  reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, get)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(get)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables({)
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
+                parseInitializersOpt(instanceProperty)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(instanceProperty)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(instanceProperty, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ++)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(++)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(++, 16, true)
+                                    parseUnaryExpression(++, true)
+                                      parsePrimary(++, expression)
+                                        parseSend(++, expression)
+                                          isNextIdentifier(++)
+                                          ensureIdentifier(++, expression)
+                                            reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+                                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+                                            rewriter()
+                                            listener: handleIdentifier(, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt()
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(, ;)
+                                  listener: handleUnaryPrefixAssignmentExpression(++)
+                            ensureSemicolon()
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, --)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(--)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(--, 16, true)
+                                    parseUnaryExpression(--, true)
+                                      parsePrimary(--, expression)
+                                        parseSendOrFunctionLiteral(--, expression)
+                                          parseSend(--, expression)
+                                            isNextIdentifier(--)
+                                            ensureIdentifier(--, expression)
+                                              listener: handleIdentifier(augment, expression)
+                                            listener: handleNoTypeArguments(super)
+                                            parseArgumentsOpt(augment)
+                                              listener: handleNoArguments(super)
+                                            listener: handleSend(augment, super)
+                                  listener: handleUnaryPrefixAssignmentExpression(--)
+                            ensureSemicolon(augment)
+                              reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrecedenceExpression(-, 16, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseSendOrFunctionLiteral(-, expression)
+                                      parseSend(-, expression)
+                                        isNextIdentifier(-)
+                                        ensureIdentifier(-, expression)
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(super)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(super)
+                                        listener: handleSend(augment, super)
+                              listener: handleUnaryPrefixExpression(-)
+                        ensureSemicolon(augment)
+                          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(get, get, {, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(set)
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(value)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: beginVariableInitializer(=)
+                              parseExpression(=)
+                                parsePrecedenceExpression(=, 1, true)
+                                  parseUnaryExpression(=, true)
+                                    parsePrimary(=, expression)
+                                      parseSendOrFunctionLiteral(=, expression)
+                                        parseSend(=, expression)
+                                          isNextIdentifier(=)
+                                          ensureIdentifier(=, expression)
+                                            listener: handleIdentifier(value, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt(value)
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(value, ;)
+                              listener: endVariableInitializer(=)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(value)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(set, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(injectedInstanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(;)
+                                      parseParenthesizedExpression(;)
+                                        parseExpressionInParenthesis(;)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                        rewriter()
+                                                        listener: handleIdentifier(, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt()
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(, ))
+                                            ensureCloseParen(, ()
+                                        listener: handleParenthesizedExpression(()
+                            ensureSemicolon())
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, ;)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, ;)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect
new file mode 100644
index 0000000..0e2e061
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect
@@ -0,0 +1,109 @@
+NOTICE: Stream was rewritten by parser!
+
+augment ;void topLevelMethod() {
+augment super;(*synthetic*);
+}
+
+augment ;void topLevelMethodError() {
+augment int ;local;
+augment;
+}
+
+
+augment List<int> (){}get topLevelProperty {
+return [... augment ,super, augment ,super[0]];
+}
+
+augment ;void set topLevelProperty(List<int> value) {
+augment super;[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super;(*synthetic*);
+augment super;
+augment int ;local;
+augment;
+}
+
+augment ;class Class {
+augment ;void instanceMethod() {
+augment super;(*synthetic*);
+}
+
+augment ;void instanceMethodErrors() {
+augment int ;local;
+augment;
+}
+
+augment int ;get instanceProperty {
+augment super;++*synthetic*;
+--augment ;super;
+return -augment ;super;
+}
+
+augment ;void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super;(*synthetic*);
+augment super;
+augment int ;local;
+augment;
+}
+}
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken],[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] ;[SyntheticToken]get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]++[SimpleToken][SyntheticStringToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect
new file mode 100644
index 0000000..b6d4e43
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[StringToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] super[KeywordToken],[SimpleToken] augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 0e1788a..70eba07 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -2553,6 +2553,17 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    seen(augmentToken);
+    seen(superToken);
+    doPrint('handleAugmentSuperExpression('
+        '$augmentToken, '
+        '$superToken, '
+        '$context)');
+  }
+
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     seen(firstToken);
     doPrint(
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index c270e56..d29de47 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -1619,6 +1619,15 @@
   }
 
   @override
+  Token parseAugmentSuperExpression(Token token, IdentifierContext context) {
+    doPrint('parseAugmentSuperExpression(' '$token, ' '$context)');
+    indent++;
+    var result = super.parseAugmentSuperExpression(token, context);
+    indent--;
+    return result;
+  }
+
+  @override
   Token parseLiteralListSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralListSuffix(' '$token, ' '$constKeyword)');
     indent++;
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 00b69d3..bfbafd0 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -18,6 +18,7 @@
 assigning
 augment
 augmentation
+augmentations
 augmented
 b
 c
diff --git a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
index b5fffb7..a1d7543 100644
--- a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
@@ -516,8 +516,8 @@
 
 void _testFunctionDeclarationImpl() {
   testStatement(
-      new FunctionDeclarationImpl(new VariableDeclarationImpl('foo', 0),
-          new FunctionNode(new Block([]))),
+      new FunctionDeclarationImpl(
+          new VariableDeclarationImpl('foo'), new FunctionNode(new Block([]))),
       '''
 dynamic foo() {}''');
 }
@@ -591,7 +591,7 @@
 
 void _testNamedFunctionExpressionJudgment() {
   testExpression(
-      new NamedFunctionExpressionJudgment(new VariableDeclarationImpl('foo', 0,
+      new NamedFunctionExpressionJudgment(new VariableDeclarationImpl('foo',
           initializer:
               new FunctionExpression(new FunctionNode(new Block([]))))),
       '''
@@ -687,13 +687,13 @@
 }
 
 void _testVariableDeclarationImpl() {
-  testStatement(new VariableDeclarationImpl('foo', 0), '''
+  testStatement(new VariableDeclarationImpl('foo'), '''
 dynamic foo;''');
   testStatement(
-      new VariableDeclarationImpl('foo', 0, initializer: new IntLiteral(0)), '''
+      new VariableDeclarationImpl('foo', initializer: new IntLiteral(0)), '''
 dynamic foo = 0;''');
   testStatement(
-      new VariableDeclarationImpl('foo', 0,
+      new VariableDeclarationImpl('foo',
           type: const VoidType(),
           initializer: new IntLiteral(0),
           isFinal: true,
@@ -701,20 +701,20 @@
       '''
 required final void foo;''');
   testStatement(
-      new VariableDeclarationImpl('foo', 0,
+      new VariableDeclarationImpl('foo',
           type: const VoidType(), initializer: new IntLiteral(0), isLate: true),
       '''
 late void foo = 0;''');
   testStatement(
-      new VariableDeclarationImpl('foo', 0,
+      new VariableDeclarationImpl('foo',
           type: const VoidType(), initializer: new IntLiteral(0))
-        ..lateGetter = new VariableDeclarationImpl('foo#getter', 0),
+        ..lateGetter = new VariableDeclarationImpl('foo#getter'),
       '''
 late void foo = 0;''');
   testStatement(
-      new VariableDeclarationImpl('foo', 0,
+      new VariableDeclarationImpl('foo',
           type: const VoidType(), initializer: new IntLiteral(0))
-        ..lateGetter = new VariableDeclarationImpl('foo#getter', 0)
+        ..lateGetter = new VariableDeclarationImpl('foo#getter')
         ..lateType = const DynamicType(),
       '''
 late dynamic foo = 0;''');
diff --git a/pkg/front_end/testcases/macros/augment_super.dart b/pkg/front_end/testcases/macros/augment_super.dart
new file mode 100644
index 0000000..ff7d4a8
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2022, 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.
+
+import augment 'augment_super_lib.dart';
+
+void topLevelMethod() {}
+void topLevelMethodErrors() {}
+List<int> get topLevelProperty => [42];
+void set topLevelProperty(List<int> value) {}
+
+class Class {
+  void instanceMethod() {}
+  void instanceMethodErrors() {}
+  int get instanceProperty => 42;
+  void set instanceProperty(int value) {}
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
new file mode 100644
index 0000000..e1236aa
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = ((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+          #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+        }
+      }
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:33:5 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:44:13 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:6:3 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
+Extra constant evaluation: evaluated: 31, effectively constant: 6
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect b/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect
new file mode 100644
index 0000000..ba14962
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+import augment 'augment_super_lib.dart';
+void topLevelMethod() {}
+void topLevelMethodErrors() {}
+List<int> get topLevelProperty => [42];
+void set topLevelProperty(List<int> value) {}
+class Class {
+  void instanceMethod() {}
+  void instanceMethodErrors() {}
+  int get instanceProperty => 42;
+  void set instanceProperty(int value) {}
+}
+main() {}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect
new file mode 100644
index 0000000..ac6c7af
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  method instanceMethod() → void
+    ;
+  method instanceMethodErrors() → void
+    ;
+  get instanceProperty() → core::int
+    ;
+  set instanceProperty(core::int value) → void
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void
+    ;
+}
+static method topLevelMethod() → void
+  ;
+static method topLevelMethodErrors() → void
+  ;
+static get topLevelProperty() → core::List<core::int>
+  ;
+static set topLevelProperty(core::List<core::int> value) → void
+  ;
+static method main() → dynamic
+  ;
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void
+  ;
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void
+  ;
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
new file mode 100644
index 0000000..6d9c5f8
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = ((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+          #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+        }
+      }
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:33:5 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:44:13 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:6:3 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
+Extra constant evaluation: evaluated: 30, effectively constant: 6
diff --git a/pkg/front_end/testcases/macros/augment_super_lib.dart b/pkg/front_end/testcases/macros/augment_super_lib.dart
new file mode 100644
index 0000000..4922d49
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super_lib.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, 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.
+
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local; // Error
+  augment; // Error
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super(); // Error
+  augment super; // Error
+  augment int local; // Error
+  augment; // Error
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local; // Error
+    augment; // Error
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super(); // Error
+    augment super; // Error
+    augment int local; // Error
+    augment; // Error
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart b/pkg/front_end/testcases/nnbd/issue49044.dart
new file mode 100644
index 0000000..48ca34c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, 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.
+
+X bar<X>(Function(X) f) => throw 0;
+
+foo(Function(Function(int, int, [int])) f, Function(Function(int, [int])) g) {
+  var x = [f, g];
+  var h = x.first;
+  var u = bar(h);
+  Function(int, [int, int]) v = u;
+  return v;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.strong.expect
new file mode 100644
index 0000000..f8ab478ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.strong.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  return throw 0;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic {
+  core::List<((core::int, [core::int, core::int]) → dynamic) → dynamic> x = <((core::int, [core::int, core::int]) → dynamic) → dynamic>[f, g];
+  ((core::int, [core::int, core::int]) → dynamic) → dynamic h = x.{core::Iterable::first}{((core::int, [core::int, core::int]) → dynamic) → dynamic};
+  (core::int, [core::int, core::int]) → dynamic u = self::bar<(core::int, [core::int, core::int]) → dynamic>(h);
+  (core::int, [core::int, core::int]) → dynamic v = u;
+  return v;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.strong.transformed.expect
new file mode 100644
index 0000000..af6207a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.strong.transformed.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  return throw 0;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic {
+  core::List<((core::int, [core::int, core::int]) → dynamic) → dynamic> x = core::_GrowableList::_literal2<((core::int, [core::int, core::int]) → dynamic) → dynamic>(f, g);
+  ((core::int, [core::int, core::int]) → dynamic) → dynamic h = x.{core::Iterable::first}{((core::int, [core::int, core::int]) → dynamic) → dynamic};
+  (core::int, [core::int, core::int]) → dynamic u = self::bar<(core::int, [core::int, core::int]) → dynamic>(h);
+  (core::int, [core::int, core::int]) → dynamic v = u;
+  return v;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline.expect
new file mode 100644
index 0000000..9824f66
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+X bar<X>(Function(X) f) => throw 0;
+foo(Function(Function(int, int, [int])) f, Function(Function(int, [int])) g) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9824f66
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+X bar<X>(Function(X) f) => throw 0;
+foo(Function(Function(int, int, [int])) f, Function(Function(int, [int])) g) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.expect
new file mode 100644
index 0000000..f8ab478ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  return throw 0;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic {
+  core::List<((core::int, [core::int, core::int]) → dynamic) → dynamic> x = <((core::int, [core::int, core::int]) → dynamic) → dynamic>[f, g];
+  ((core::int, [core::int, core::int]) → dynamic) → dynamic h = x.{core::Iterable::first}{((core::int, [core::int, core::int]) → dynamic) → dynamic};
+  (core::int, [core::int, core::int]) → dynamic u = self::bar<(core::int, [core::int, core::int]) → dynamic>(h);
+  (core::int, [core::int, core::int]) → dynamic v = u;
+  return v;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.modular.expect
new file mode 100644
index 0000000..f8ab478ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  return throw 0;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic {
+  core::List<((core::int, [core::int, core::int]) → dynamic) → dynamic> x = <((core::int, [core::int, core::int]) → dynamic) → dynamic>[f, g];
+  ((core::int, [core::int, core::int]) → dynamic) → dynamic h = x.{core::Iterable::first}{((core::int, [core::int, core::int]) → dynamic) → dynamic};
+  (core::int, [core::int, core::int]) → dynamic u = self::bar<(core::int, [core::int, core::int]) → dynamic>(h);
+  (core::int, [core::int, core::int]) → dynamic v = u;
+  return v;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.outline.expect
new file mode 100644
index 0000000..562f3d9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  ;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue49044.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.transformed.expect
new file mode 100644
index 0000000..af6207a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue49044.dart.weak.transformed.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<X extends core::Object? = dynamic>((self::bar::X%) → dynamic f) → self::bar::X%
+  return throw 0;
+static method foo(((core::int, core::int, [core::int]) → dynamic) → dynamic f, ((core::int, [core::int]) → dynamic) → dynamic g) → dynamic {
+  core::List<((core::int, [core::int, core::int]) → dynamic) → dynamic> x = core::_GrowableList::_literal2<((core::int, [core::int, core::int]) → dynamic) → dynamic>(f, g);
+  ((core::int, [core::int, core::int]) → dynamic) → dynamic h = x.{core::Iterable::first}{((core::int, [core::int, core::int]) → dynamic) → dynamic};
+  (core::int, [core::int, core::int]) → dynamic u = self::bar<(core::int, [core::int, core::int]) → dynamic>(h);
+  (core::int, [core::int, core::int]) → dynamic v = u;
+  return v;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 7f8673a..24f427a 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -153,6 +153,7 @@
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
 macros/augment_class: FormatterCrash
+macros/augment_super: FormatterCrash
 macros/class_members: FormatterCrash
 macros/inject_constructor: FormatterCrash
 macros/macro_class: FormatterCrash
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 63f765a..25388c5 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 80;
+  UInt32 formatVersion = 81;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -598,6 +598,23 @@
   // Equivalent to VariableSet with index N.
 }
 
+type AbstractSuperPropertyGet extends Expression {
+  Byte tag = 22;
+  FileOffset fileOffset;
+  Name name;
+  MemberReference interfaceTarget; // May be NullReference.
+  MemberReference interfaceTargetOrigin; // May be NullReference.
+}
+
+type AbstractSuperPropertySet extends Expression {
+  Byte tag = 23;
+  FileOffset fileOffset;
+  Name name;
+  Expression value;
+  MemberReference interfaceTarget; // May be NullReference.
+  MemberReference interfaceTargetOrigin; // May be NullReference.
+}
+
 type SuperPropertyGet extends Expression {
   Byte tag = 24;
   FileOffset fileOffset;
@@ -820,6 +837,15 @@
   MemberReference interfaceTargetOrigin; // May be NullReference.
 }
 
+type AbstractSuperMethodInvocation extends Expression {
+  Byte tag = 28;
+  FileOffset fileOffset;
+  Name name;
+  Arguments arguments;
+  MemberReference interfaceTarget; // May be NullReference.
+  MemberReference interfaceTargetOrigin; // May be NullReference.
+}
+
 type SuperMethodInvocation extends Expression {
   Byte tag = 29;
   FileOffset fileOffset;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 78972bc..5f049a0 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -4772,6 +4772,99 @@
   }
 }
 
+/// Expression of form `super.foo` occurring in a mixin declaration.
+///
+/// In this setting, the target is looked up on the types in the mixin 'on'
+/// clause and are therefore not necessary the runtime targets of the read. An
+/// [AbstractSuperPropertyGet] must be converted into a [SuperPropertyGet] to
+/// statically bind the target.
+///
+/// For instance
+///
+///    abstract class Interface {
+///      get getter;
+///    }
+///    mixin Mixin on Interface {
+///      get getter {
+///        // This is an [AbstractSuperPropertyGet] with interface target
+///        // `Interface.getter`.
+///        return super.getter;
+///      }
+///    }
+///    class Super implements Interface {
+///      // This is the target when `Mixin` is applied to `Class`.
+///      get getter => 42;
+///    }
+///    class Class extends Super with Mixin {}
+///
+/// This may invoke a getter, read a field, or tear off a method.
+class AbstractSuperPropertyGet extends Expression {
+  Name name;
+
+  Reference? interfaceTargetReference;
+
+  AbstractSuperPropertyGet(Name name, [Member? interfaceTarget])
+      : this.byReference(name, getMemberReferenceGetter(interfaceTarget));
+
+  AbstractSuperPropertyGet.byReference(
+      this.name, this.interfaceTargetReference);
+
+  Member? get interfaceTarget => interfaceTargetReference?.asMember;
+
+  void set interfaceTarget(Member? member) {
+    interfaceTargetReference = getMemberReferenceGetter(member);
+  }
+
+  @override
+  DartType getStaticTypeInternal(StaticTypeContext context) {
+    Member? interfaceTarget = this.interfaceTarget;
+    if (interfaceTarget == null) {
+      // TODO(johnniwinther): SuperPropertyGet without a target should be
+      // replaced by invalid expressions.
+      return const DynamicType();
+    }
+    Class declaringClass = interfaceTarget.enclosingClass!;
+    if (declaringClass.typeParameters.isEmpty) {
+      return interfaceTarget.getterType;
+    }
+    List<DartType>? receiverArguments = context.typeEnvironment
+        .getTypeArgumentsAsInstanceOf(context.thisType!, declaringClass);
+    return Substitution.fromPairs(
+            declaringClass.typeParameters, receiverArguments!)
+        .substituteType(interfaceTarget.getterType);
+  }
+
+  @override
+  R accept<R>(ExpressionVisitor<R> v) => v.visitAbstractSuperPropertyGet(this);
+
+  @override
+  R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
+      v.visitAbstractSuperPropertyGet(this, arg);
+
+  @override
+  void visitChildren(Visitor v) {
+    interfaceTarget?.acceptReference(v);
+    name.accept(v);
+  }
+
+  @override
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  String toString() {
+    return "AbstractSuperPropertyGet(${toStringInternal()})";
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.write('super.{abstract}');
+    printer.writeInterfaceMemberName(interfaceTargetReference, name);
+  }
+}
+
 /// Expression of form `super.field`.
 ///
 /// This may invoke a getter, read a field, or tear off a method.
@@ -4841,6 +4934,103 @@
   }
 }
 
+/// Expression of form `super.foo = x` occurring in a mixin declaration.
+///
+/// In this setting, the target is looked up on the types in the mixin 'on'
+/// clause and are therefore not necessary the runtime targets of the
+/// assignment. An [AbstractSuperPropertySet] must be converted into a
+/// [SuperPropertySet] to statically bind the target.
+///
+/// For instance
+///
+///    abstract class Interface {
+///      void set setter(value);
+///    }
+///    mixin Mixin on Interface {
+///      void set setter(value) {
+///        // This is an [AbstractSuperPropertySet] with interface target
+///        // `Interface.setter`.
+///        super.setter = value;
+///      }
+///    }
+///    class Super implements Interface {
+///      // This is the target when `Mixin` is applied to `Class`.
+///      void set setter(value) {}
+///    }
+///    class Class extends Super with Mixin {}
+///
+/// This may invoke a setter or assign a field.
+class AbstractSuperPropertySet extends Expression {
+  Name name;
+  Expression value;
+
+  Reference? interfaceTargetReference;
+
+  AbstractSuperPropertySet(Name name, Expression value, Member? interfaceTarget)
+      : this.byReference(
+            name, value, getMemberReferenceSetter(interfaceTarget));
+
+  AbstractSuperPropertySet.byReference(
+      this.name, this.value, this.interfaceTargetReference) {
+    value.parent = this;
+  }
+
+  Member? get interfaceTarget => interfaceTargetReference?.asMember;
+
+  void set interfaceTarget(Member? member) {
+    interfaceTargetReference = getMemberReferenceSetter(member);
+  }
+
+  @override
+  DartType getStaticTypeInternal(StaticTypeContext context) =>
+      value.getStaticType(context);
+
+  @override
+  R accept<R>(ExpressionVisitor<R> v) => v.visitAbstractSuperPropertySet(this);
+
+  @override
+  R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
+      v.visitAbstractSuperPropertySet(this, arg);
+
+  @override
+  void visitChildren(Visitor v) {
+    interfaceTarget?.acceptReference(v);
+    name.accept(v);
+    value.accept(v);
+  }
+
+  @override
+  void transformChildren(Transformer v) {
+    // ignore: unnecessary_null_comparison
+    if (value != null) {
+      value = v.transform(value);
+      value.parent = this;
+    }
+  }
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {
+    // ignore: unnecessary_null_comparison
+    if (value != null) {
+      value = v.transform(value);
+      value.parent = this;
+    }
+  }
+
+  @override
+  String toString() {
+    return "AbstractSuperPropertySet(${toStringInternal()})";
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.write('super.{abstract}');
+    printer.writeInterfaceMemberName(interfaceTargetReference, name);
+    printer.write(' = ');
+    printer.writeExpression(value);
+  }
+}
+
 /// Expression of form `super.field = value`.
 ///
 /// This may invoke a setter or assign a field.
@@ -6158,6 +6348,121 @@
   }
 }
 
+/// Expression of form `super.foo(x)` occurring in a mixin declaration.
+///
+/// In this setting, the target is looked up on the types in the mixin 'on'
+/// clause and are therefore not necessary the runtime targets of the
+/// invocation. An [AbstractSuperMethodInvocation] must be converted into
+/// a [SuperMethodInvocation] to statically bind the target.
+///
+/// For instance
+///
+///    abstract class Interface {
+///      void method();
+///    }
+///    mixin Mixin on Interface {
+///      void method() {
+///        // This is an [AbstractSuperMethodInvocation] with interface target
+///        // `Interface.method`.
+///        super.method(); // This targets Super.method.
+///      }
+///    }
+///    class Super implements Interface {
+///      // This is the target when `Mixin` is applied to `Class`.
+///      void method() {}
+///    }
+///    class Class extends Super with Mixin {}
+///
+class AbstractSuperMethodInvocation extends InvocationExpression {
+  @override
+  Name name;
+
+  @override
+  Arguments arguments;
+
+  Reference? interfaceTargetReference;
+
+  AbstractSuperMethodInvocation(Name name, Arguments arguments,
+      [Procedure? interfaceTarget])
+      : this.byReference(
+            name,
+            arguments,
+            // An invocation doesn't refer to the setter.
+            getMemberReferenceGetter(interfaceTarget));
+
+  AbstractSuperMethodInvocation.byReference(
+      this.name, this.arguments, this.interfaceTargetReference) {
+    arguments.parent = this;
+  }
+
+  Procedure? get interfaceTarget => interfaceTargetReference?.asProcedure;
+
+  void set interfaceTarget(Procedure? target) {
+    // An invocation doesn't refer to the setter.
+    interfaceTargetReference = getMemberReferenceGetter(target);
+  }
+
+  @override
+  DartType getStaticTypeInternal(StaticTypeContext context) {
+    Procedure? interfaceTarget = this.interfaceTarget;
+    if (interfaceTarget == null) return const DynamicType();
+    Class superclass = interfaceTarget.enclosingClass!;
+    List<DartType>? receiverTypeArguments = context.typeEnvironment
+        .getTypeArgumentsAsInstanceOf(context.thisType!, superclass);
+    DartType returnType = Substitution.fromPairs(
+            superclass.typeParameters, receiverTypeArguments!)
+        .substituteType(interfaceTarget.function.returnType);
+    return Substitution.fromPairs(
+            interfaceTarget.function.typeParameters, arguments.types)
+        .substituteType(returnType);
+  }
+
+  @override
+  R accept<R>(ExpressionVisitor<R> v) =>
+      v.visitAbstractSuperMethodInvocation(this);
+
+  @override
+  R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
+      v.visitAbstractSuperMethodInvocation(this, arg);
+
+  @override
+  void visitChildren(Visitor v) {
+    interfaceTarget?.acceptReference(v);
+    name.accept(v);
+    arguments.accept(v);
+  }
+
+  @override
+  void transformChildren(Transformer v) {
+    // ignore: unnecessary_null_comparison
+    if (arguments != null) {
+      arguments = v.transform(arguments);
+      arguments.parent = this;
+    }
+  }
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {
+    // ignore: unnecessary_null_comparison
+    if (arguments != null) {
+      arguments = v.transform(arguments);
+      arguments.parent = this;
+    }
+  }
+
+  @override
+  String toString() {
+    return "AbstractSuperMethodInvocation(${toStringInternal()})";
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.write('super.{abstract}');
+    printer.writeInterfaceMemberName(interfaceTargetReference, name);
+    printer.writeArguments(arguments);
+  }
+}
+
 /// Expression of form `super.foo(x)`.
 ///
 /// The provided arguments might not match the parameters of the target.
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 9df6792..d2a39f1 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -2001,6 +2001,10 @@
         return _readInstanceSet();
       case Tag.DynamicSet:
         return _readDynamicSet();
+      case Tag.AbstractSuperPropertyGet:
+        return _readAbstractSuperPropertyGet();
+      case Tag.AbstractSuperPropertySet:
+        return _readAbstractSuperPropertySet();
       case Tag.SuperPropertyGet:
         return _readSuperPropertyGet();
       case Tag.SuperPropertySet:
@@ -2033,6 +2037,8 @@
         return _readEqualsNull();
       case Tag.EqualsCall:
         return _readEqualsCall();
+      case Tag.AbstractSuperMethodInvocation:
+        return _readAbstractSuperMethodInvocation();
       case Tag.SuperMethodInvocation:
         return _readSuperMethodInvocation();
       case Tag.StaticInvocation:
@@ -2209,6 +2215,22 @@
       ..fileOffset = offset;
   }
 
+  Expression _readAbstractSuperPropertyGet() {
+    int offset = readOffset();
+    addTransformerFlag(TransformerFlag.superCalls);
+    return new AbstractSuperPropertyGet.byReference(
+        readName(), readNullableInstanceMemberReference())
+      ..fileOffset = offset;
+  }
+
+  Expression _readAbstractSuperPropertySet() {
+    int offset = readOffset();
+    addTransformerFlag(TransformerFlag.superCalls);
+    return new AbstractSuperPropertySet.byReference(
+        readName(), readExpression(), readNullableInstanceMemberReference())
+      ..fileOffset = offset;
+  }
+
   Expression _readSuperPropertyGet() {
     int offset = readOffset();
     addTransformerFlag(TransformerFlag.superCalls);
@@ -2347,6 +2369,14 @@
       ..fileOffset = offset;
   }
 
+  Expression _readAbstractSuperMethodInvocation() {
+    int offset = readOffset();
+    addTransformerFlag(TransformerFlag.superCalls);
+    return new AbstractSuperMethodInvocation.byReference(
+        readName(), readArguments(), readNullableInstanceMemberReference())
+      ..fileOffset = offset;
+  }
+
   Expression _readSuperMethodInvocation() {
     int offset = readOffset();
     addTransformerFlag(TransformerFlag.superCalls);
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 1f678e9..dab017c 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1579,6 +1579,23 @@
   }
 
   @override
+  void visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) {
+    writeByte(Tag.AbstractSuperPropertyGet);
+    writeOffset(node.fileOffset);
+    writeName(node.name);
+    writeNullAllowedInstanceMemberReference(node.interfaceTargetReference);
+  }
+
+  @override
+  void visitAbstractSuperPropertySet(AbstractSuperPropertySet node) {
+    writeByte(Tag.AbstractSuperPropertySet);
+    writeOffset(node.fileOffset);
+    writeName(node.name);
+    writeNode(node.value);
+    writeNullAllowedInstanceMemberReference(node.interfaceTargetReference);
+  }
+
+  @override
   void visitSuperPropertyGet(SuperPropertyGet node) {
     writeByte(Tag.SuperPropertyGet);
     writeOffset(node.fileOffset);
@@ -1718,6 +1735,15 @@
   }
 
   @override
+  void visitAbstractSuperMethodInvocation(AbstractSuperMethodInvocation node) {
+    writeByte(Tag.AbstractSuperMethodInvocation);
+    writeOffset(node.fileOffset);
+    writeName(node.name);
+    writeArgumentsNode(node.arguments);
+    writeNullAllowedInstanceMemberReference(node.interfaceTargetReference);
+  }
+
+  @override
   void visitSuperMethodInvocation(SuperMethodInvocation node) {
     writeByte(Tag.SuperMethodInvocation);
     writeOffset(node.fileOffset);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index aed4155..b0a13a0 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -37,10 +37,13 @@
   static const int InvalidExpression = 19;
   static const int VariableGet = 20;
   static const int VariableSet = 21;
+  static const int AbstractSuperPropertyGet = 22;
+  static const int AbstractSuperPropertySet = 23;
   static const int SuperPropertyGet = 24;
   static const int SuperPropertySet = 25;
   static const int StaticGet = 26;
   static const int StaticSet = 27;
+  static const int AbstractSuperMethodInvocation = 28;
   static const int SuperMethodInvocation = 29;
   static const int StaticInvocation = 30;
   static const int ConstructorInvocation = 31;
@@ -176,7 +179,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 80;
+  static const int BinaryFormatVersion = 81;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index c69fe09..348ff65 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -176,6 +176,18 @@
   }
 
   @override
+  TreeNode visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) {
+    return new AbstractSuperPropertyGet.byReference(
+        node.name, node.interfaceTargetReference);
+  }
+
+  @override
+  TreeNode visitAbstractSuperPropertySet(AbstractSuperPropertySet node) {
+    return new AbstractSuperPropertySet.byReference(
+        node.name, clone(node.value), node.interfaceTargetReference);
+  }
+
+  @override
   TreeNode visitSuperPropertyGet(SuperPropertyGet node) {
     return new SuperPropertyGet.byReference(
         node.name, node.interfaceTargetReference);
@@ -198,6 +210,13 @@
   }
 
   @override
+  TreeNode visitAbstractSuperMethodInvocation(
+      AbstractSuperMethodInvocation node) {
+    return new AbstractSuperMethodInvocation.byReference(
+        node.name, clone(node.arguments), node.interfaceTargetReference);
+  }
+
+  @override
   TreeNode visitSuperMethodInvocation(SuperMethodInvocation node) {
     return new SuperMethodInvocation.byReference(
         node.name, clone(node.arguments), node.interfaceTargetReference);
diff --git a/pkg/kernel/lib/src/coverage.dart b/pkg/kernel/lib/src/coverage.dart
index 35a5692..553e22f 100644
--- a/pkg/kernel/lib/src/coverage.dart
+++ b/pkg/kernel/lib/src/coverage.dart
@@ -186,12 +186,24 @@
   }
 
   @override
+  void visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) {
+    visited.add(ExpressionKind.AbstractSuperPropertyGet);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitSuperPropertyGet(SuperPropertyGet node) {
     visited.add(ExpressionKind.SuperPropertyGet);
     node.visitChildren(this);
   }
 
   @override
+  void visitAbstractSuperPropertySet(AbstractSuperPropertySet node) {
+    visited.add(ExpressionKind.AbstractSuperPropertySet);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitSuperPropertySet(SuperPropertySet node) {
     visited.add(ExpressionKind.SuperPropertySet);
     node.visitChildren(this);
@@ -246,6 +258,12 @@
   }
 
   @override
+  void visitAbstractSuperMethodInvocation(AbstractSuperMethodInvocation node) {
+    visited.add(ExpressionKind.AbstractSuperMethodInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitSuperMethodInvocation(SuperMethodInvocation node) {
     visited.add(ExpressionKind.SuperMethodInvocation);
     node.visitChildren(this);
@@ -1009,6 +1027,9 @@
 }
 
 enum ExpressionKind {
+  AbstractSuperMethodInvocation,
+  AbstractSuperPropertyGet,
+  AbstractSuperPropertySet,
   AsExpression,
   AwaitExpression,
   BlockExpression,
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 840f85b..015d021 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -186,11 +186,23 @@
   }
 
   @override
+  bool visitAbstractSuperPropertyGet(
+      AbstractSuperPropertyGet node, Node other) {
+    return strategy.checkAbstractSuperPropertyGet(this, node, other);
+  }
+
+  @override
   bool visitSuperPropertyGet(SuperPropertyGet node, Node other) {
     return strategy.checkSuperPropertyGet(this, node, other);
   }
 
   @override
+  bool visitAbstractSuperPropertySet(
+      AbstractSuperPropertySet node, Node other) {
+    return strategy.checkAbstractSuperPropertySet(this, node, other);
+  }
+
+  @override
   bool visitSuperPropertySet(SuperPropertySet node, Node other) {
     return strategy.checkSuperPropertySet(this, node, other);
   }
@@ -237,6 +249,12 @@
   }
 
   @override
+  bool visitAbstractSuperMethodInvocation(
+      AbstractSuperMethodInvocation node, Node other) {
+    return strategy.checkAbstractSuperMethodInvocation(this, node, other);
+  }
+
+  @override
   bool visitSuperMethodInvocation(SuperMethodInvocation node, Node other) {
     return strategy.checkSuperMethodInvocation(this, node, other);
   }
@@ -2270,6 +2288,27 @@
     return result;
   }
 
+  bool checkAbstractSuperPropertyGet(EquivalenceVisitor visitor,
+      AbstractSuperPropertyGet? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! AbstractSuperPropertyGet) return false;
+    if (other is! AbstractSuperPropertyGet) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkAbstractSuperPropertyGet_name(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperPropertyGet_interfaceTargetReference(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperPropertyGet_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkSuperPropertyGet(
       EquivalenceVisitor visitor, SuperPropertyGet? node, Object? other) {
     if (identical(node, other)) return true;
@@ -2290,6 +2329,30 @@
     return result;
   }
 
+  bool checkAbstractSuperPropertySet(EquivalenceVisitor visitor,
+      AbstractSuperPropertySet? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! AbstractSuperPropertySet) return false;
+    if (other is! AbstractSuperPropertySet) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkAbstractSuperPropertySet_name(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperPropertySet_value(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperPropertySet_interfaceTargetReference(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperPropertySet_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkSuperPropertySet(
       EquivalenceVisitor visitor, SuperPropertySet? node, Object? other) {
     if (identical(node, other)) return true;
@@ -2514,6 +2577,30 @@
     return result;
   }
 
+  bool checkAbstractSuperMethodInvocation(EquivalenceVisitor visitor,
+      AbstractSuperMethodInvocation? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! AbstractSuperMethodInvocation) return false;
+    if (other is! AbstractSuperMethodInvocation) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkAbstractSuperMethodInvocation_name(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperMethodInvocation_arguments(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperMethodInvocation_interfaceTargetReference(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkAbstractSuperMethodInvocation_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkSuperMethodInvocation(
       EquivalenceVisitor visitor, SuperMethodInvocation? node, Object? other) {
     if (identical(node, other)) return true;
@@ -5604,6 +5691,24 @@
     return checkExpression_fileOffset(visitor, node, other);
   }
 
+  bool checkAbstractSuperPropertyGet_name(EquivalenceVisitor visitor,
+      AbstractSuperPropertyGet node, AbstractSuperPropertyGet other) {
+    return visitor.checkNodes(node.name, other.name, 'name');
+  }
+
+  bool checkAbstractSuperPropertyGet_interfaceTargetReference(
+      EquivalenceVisitor visitor,
+      AbstractSuperPropertyGet node,
+      AbstractSuperPropertyGet other) {
+    return visitor.checkReferences(node.interfaceTargetReference,
+        other.interfaceTargetReference, 'interfaceTargetReference');
+  }
+
+  bool checkAbstractSuperPropertyGet_fileOffset(EquivalenceVisitor visitor,
+      AbstractSuperPropertyGet node, AbstractSuperPropertyGet other) {
+    return checkExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkSuperPropertyGet_name(EquivalenceVisitor visitor,
       SuperPropertyGet node, SuperPropertyGet other) {
     return visitor.checkNodes(node.name, other.name, 'name');
@@ -5622,6 +5727,29 @@
     return checkExpression_fileOffset(visitor, node, other);
   }
 
+  bool checkAbstractSuperPropertySet_name(EquivalenceVisitor visitor,
+      AbstractSuperPropertySet node, AbstractSuperPropertySet other) {
+    return visitor.checkNodes(node.name, other.name, 'name');
+  }
+
+  bool checkAbstractSuperPropertySet_value(EquivalenceVisitor visitor,
+      AbstractSuperPropertySet node, AbstractSuperPropertySet other) {
+    return visitor.checkNodes(node.value, other.value, 'value');
+  }
+
+  bool checkAbstractSuperPropertySet_interfaceTargetReference(
+      EquivalenceVisitor visitor,
+      AbstractSuperPropertySet node,
+      AbstractSuperPropertySet other) {
+    return visitor.checkReferences(node.interfaceTargetReference,
+        other.interfaceTargetReference, 'interfaceTargetReference');
+  }
+
+  bool checkAbstractSuperPropertySet_fileOffset(EquivalenceVisitor visitor,
+      AbstractSuperPropertySet node, AbstractSuperPropertySet other) {
+    return checkExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkSuperPropertySet_name(EquivalenceVisitor visitor,
       SuperPropertySet node, SuperPropertySet other) {
     return visitor.checkNodes(node.name, other.name, 'name');
@@ -5853,6 +5981,29 @@
     return checkInvocationExpression_fileOffset(visitor, node, other);
   }
 
+  bool checkAbstractSuperMethodInvocation_name(EquivalenceVisitor visitor,
+      AbstractSuperMethodInvocation node, AbstractSuperMethodInvocation other) {
+    return visitor.checkNodes(node.name, other.name, 'name');
+  }
+
+  bool checkAbstractSuperMethodInvocation_arguments(EquivalenceVisitor visitor,
+      AbstractSuperMethodInvocation node, AbstractSuperMethodInvocation other) {
+    return visitor.checkNodes(node.arguments, other.arguments, 'arguments');
+  }
+
+  bool checkAbstractSuperMethodInvocation_interfaceTargetReference(
+      EquivalenceVisitor visitor,
+      AbstractSuperMethodInvocation node,
+      AbstractSuperMethodInvocation other) {
+    return visitor.checkReferences(node.interfaceTargetReference,
+        other.interfaceTargetReference, 'interfaceTargetReference');
+  }
+
+  bool checkAbstractSuperMethodInvocation_fileOffset(EquivalenceVisitor visitor,
+      AbstractSuperMethodInvocation node, AbstractSuperMethodInvocation other) {
+    return checkInvocationExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkSuperMethodInvocation_name(EquivalenceVisitor visitor,
       SuperMethodInvocation node, SuperMethodInvocation other) {
     return visitor.checkNodes(node.name, other.name, 'name');
diff --git a/pkg/kernel/lib/src/node_creator.dart b/pkg/kernel/lib/src/node_creator.dart
index 8c0337d..d51a1bb 100644
--- a/pkg/kernel/lib/src/node_creator.dart
+++ b/pkg/kernel/lib/src/node_creator.dart
@@ -859,6 +859,14 @@
         ]);
       case ExpressionKind.StringLiteral:
         return StringLiteral('foo');
+      case ExpressionKind.AbstractSuperMethodInvocation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => AbstractSuperMethodInvocation(_createName(), _createArguments())
+            ..fileOffset = _needFileOffset(),
+          () => AbstractSuperMethodInvocation(
+              _createName(), _createArguments(), _needProcedure())
+            ..fileOffset = _needFileOffset(),
+        ]);
       case ExpressionKind.SuperMethodInvocation:
         return _createOneOf(_pendingExpressions, kind, index, [
           () => SuperMethodInvocation(_createName(), _createArguments())
@@ -867,6 +875,22 @@
               _createName(), _createArguments(), _needProcedure())
             ..fileOffset = _needFileOffset(),
         ]);
+      case ExpressionKind.AbstractSuperPropertyGet:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => AbstractSuperPropertyGet(_createName())
+            ..fileOffset = _needFileOffset(),
+          () => AbstractSuperPropertyGet(_createName(), _needField())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.AbstractSuperPropertySet:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () =>
+              AbstractSuperPropertySet(_createName(), _createExpression(), null)
+                ..fileOffset = _needFileOffset(),
+          () => AbstractSuperPropertySet(
+              _createName(), _createExpression(), _needField())
+            ..fileOffset = _needFileOffset(),
+        ]);
       case ExpressionKind.SuperPropertyGet:
         return _createOneOf(_pendingExpressions, kind, index, [
           () => SuperPropertyGet(_createName())..fileOffset = _needFileOffset(),
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 452fcc2..4263359 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -1042,7 +1042,8 @@
         intersectNullabilities(f.declaredNullability, g.declaredNullability),
         namedParameters: namedParameters,
         typeParameters: typeParameters,
-        requiredParameterCount: minPos);
+        requiredParameterCount:
+            math.min(f.requiredParameterCount, g.requiredParameterCount));
   }
 
   /// Computes the nullability-aware lower bound of two function types.
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 542324e..722da3d 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -3010,6 +3010,10 @@
   int visitEqualsNull(EqualsNull node) => EQUALITY;
 
   @override
+  int visitAbstractSuperMethodInvocation(AbstractSuperMethodInvocation node) =>
+      CALLEE;
+
+  @override
   int visitSuperMethodInvocation(SuperMethodInvocation node) => CALLEE;
 
   @override
@@ -3104,6 +3108,13 @@
   int visitFunctionTearOff(FunctionTearOff node) => PRIMARY;
 
   @override
+  int visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) => PRIMARY;
+
+  @override
+  int visitAbstractSuperPropertySet(AbstractSuperPropertySet node) =>
+      EXPRESSION;
+
+  @override
   int visitSuperPropertyGet(SuperPropertyGet node) => PRIMARY;
 
   @override
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 293015d..6e44499 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -753,6 +753,19 @@
   }
 
   @override
+  DartType visitAbstractSuperMethodInvocation(
+      AbstractSuperMethodInvocation node) {
+    Member? target = node.interfaceTarget;
+    if (target == null) {
+      checkUnresolvedInvocation(currentThisType!, node);
+      return handleDynamicCall(currentThisType!, node.arguments);
+    } else {
+      return handleCall(node.arguments, target.superGetterType,
+          receiver: getSuperReceiverType(target));
+    }
+  }
+
+  @override
   DartType visitSuperMethodInvocation(SuperMethodInvocation node) {
     Member? target = node.interfaceTarget;
     if (target == null) {
@@ -765,6 +778,32 @@
   }
 
   @override
+  DartType visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) {
+    Member? target = node.interfaceTarget;
+    if (target == null) {
+      checkUnresolvedInvocation(currentThisType!, node);
+      return const DynamicType();
+    } else {
+      Substitution receiver = getSuperReceiverType(target);
+      return receiver.substituteType(target.superGetterType);
+    }
+  }
+
+  @override
+  DartType visitAbstractSuperPropertySet(AbstractSuperPropertySet node) {
+    Member? target = node.interfaceTarget;
+    DartType value = visitExpression(node.value);
+    if (target != null) {
+      Substitution receiver = getSuperReceiverType(target);
+      checkAssignable(node.value, value,
+          receiver.substituteType(target.superSetterType, contravariant: true));
+    } else {
+      checkUnresolvedInvocation(currentThisType!, node);
+    }
+    return value;
+  }
+
+  @override
   DartType visitSuperPropertyGet(SuperPropertyGet node) {
     Member? target = node.interfaceTarget;
     if (target == null) {
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index d88c2a9..64f3acc 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -23,6 +23,10 @@
   R visitInstanceGet(InstanceGet node) => defaultExpression(node);
   R visitInstanceSet(InstanceSet node) => defaultExpression(node);
   R visitInstanceTearOff(InstanceTearOff node) => defaultExpression(node);
+  R visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) =>
+      defaultExpression(node);
+  R visitAbstractSuperPropertySet(AbstractSuperPropertySet node) =>
+      defaultExpression(node);
   R visitSuperPropertyGet(SuperPropertyGet node) => defaultExpression(node);
   R visitSuperPropertySet(SuperPropertySet node) => defaultExpression(node);
   R visitStaticGet(StaticGet node) => defaultExpression(node);
@@ -37,6 +41,8 @@
       defaultExpression(node);
   R visitEqualsNull(EqualsNull node) => defaultExpression(node);
   R visitEqualsCall(EqualsCall node) => defaultExpression(node);
+  R visitAbstractSuperMethodInvocation(AbstractSuperMethodInvocation node) =>
+      defaultExpression(node);
   R visitSuperMethodInvocation(SuperMethodInvocation node) =>
       defaultExpression(node);
   R visitStaticInvocation(StaticInvocation node) => defaultExpression(node);
@@ -209,6 +215,12 @@
   @override
   R visitInstanceTearOff(InstanceTearOff node) => defaultExpression(node);
   @override
+  R visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node) =>
+      defaultExpression(node);
+  @override
+  R visitAbstractSuperPropertySet(AbstractSuperPropertySet node) =>
+      defaultExpression(node);
+  @override
   R visitSuperPropertyGet(SuperPropertyGet node) => defaultExpression(node);
   @override
   R visitSuperPropertySet(SuperPropertySet node) => defaultExpression(node);
@@ -235,6 +247,9 @@
   @override
   R visitEqualsCall(EqualsCall node) => defaultExpression(node);
   @override
+  R visitAbstractSuperMethodInvocation(AbstractSuperMethodInvocation node) =>
+      defaultExpression(node);
+  @override
   R visitSuperMethodInvocation(SuperMethodInvocation node) =>
       defaultExpression(node);
   @override
@@ -457,6 +472,12 @@
   R visitInstanceTearOff(InstanceTearOff node, A arg) =>
       defaultExpression(node, arg);
   @override
+  R visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node, A arg) =>
+      defaultExpression(node, arg);
+  @override
+  R visitAbstractSuperPropertySet(AbstractSuperPropertySet node, A arg) =>
+      defaultExpression(node, arg);
+  @override
   R visitSuperPropertyGet(SuperPropertyGet node, A arg) =>
       defaultExpression(node, arg);
   @override
@@ -489,6 +510,10 @@
   @override
   R visitEqualsCall(EqualsCall node, A arg) => defaultExpression(node, arg);
   @override
+  R visitAbstractSuperMethodInvocation(
+          AbstractSuperMethodInvocation node, A arg) =>
+      defaultExpression(node, arg);
+  @override
   R visitSuperMethodInvocation(SuperMethodInvocation node, A arg) =>
       defaultExpression(node, arg);
   @override
@@ -1976,6 +2001,10 @@
   R visitInstanceSet(InstanceSet node, T arg) => defaultExpression(node, arg);
   R visitInstanceTearOff(InstanceTearOff node, T arg) =>
       defaultExpression(node, arg);
+  R visitAbstractSuperPropertyGet(AbstractSuperPropertyGet node, T arg) =>
+      defaultExpression(node, arg);
+  R visitAbstractSuperPropertySet(AbstractSuperPropertySet node, T arg) =>
+      defaultExpression(node, arg);
   R visitSuperPropertyGet(SuperPropertyGet node, T arg) =>
       defaultExpression(node, arg);
   R visitSuperPropertySet(SuperPropertySet node, T arg) =>
@@ -1996,6 +2025,9 @@
       defaultExpression(node, arg);
   R visitEqualsNull(EqualsNull node, T arg) => defaultExpression(node, arg);
   R visitEqualsCall(EqualsCall node, T arg) => defaultExpression(node, arg);
+  R visitAbstractSuperMethodInvocation(
+          AbstractSuperMethodInvocation node, T arg) =>
+      defaultExpression(node, arg);
   R visitSuperMethodInvocation(SuperMethodInvocation node, T arg) =>
       defaultExpression(node, arg);
   R visitStaticInvocation(StaticInvocation node, T arg) =>
diff --git a/runtime/tests/vm/dart/isolates/fast_object_copy_timeline_test.dart b/runtime/tests/vm/dart/isolates/fast_object_copy_timeline_test.dart
new file mode 100644
index 0000000..72b4932
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_timeline_test.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2022, 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.
+
+// VMOptions=--no-enable-fast-object-copy
+// VMOptions=--enable-fast-object-copy
+
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:ffi';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+import '../timeline_utils.dart';
+
+final int wordSize = sizeOf<IntPtr>();
+final bool useCompressedPointers =
+    wordSize == 8 && (Platform.isAndroid || Platform.isIOS);
+
+final int kAllocationSize = 2 * wordSize;
+final int headerSize = wordSize;
+final int slotSize = useCompressedPointers ? 4 : wordSize;
+
+final int objectBaseSize = headerSize;
+final int arrayBaseSize = headerSize + 2 * slotSize;
+final int typedDataBaseSize = headerSize + 2 * wordSize;
+
+int objectSize(int slots) => toAllocationSize(headerSize + slots * slotSize);
+int arraySize(int elements) =>
+    toAllocationSize(headerSize + 2 * slotSize + elements * slotSize);
+int typedDataSize(int length) =>
+    toAllocationSize(headerSize + 2 * wordSize + length);
+
+int toAllocationSize(int value) =>
+    (value + kAllocationSize - 1) & ~(kAllocationSize - 1);
+
+Future main(List<String> args) async {
+  if (const bool.fromEnvironment('dart.vm.product')) {
+    return; // No timeline support
+  }
+
+  if (args.contains('--child')) {
+    final rp = ReceivePort();
+    final sendPort = rp.sendPort;
+
+    sendPort.send(Object());
+    sendPort.send(List<dynamic>.filled(2, null)
+      ..[0] = Object()
+      ..[1] = Object());
+    sendPort.send(Uint8List(11));
+
+    rp.close();
+    return;
+  }
+
+  final timelineEvents = await runAndCollectTimeline('Isolate', ['--child']);
+  final mainIsolateId = findMainIsolateId(timelineEvents);
+  final copyOperations = getCopyOperations(timelineEvents, mainIsolateId);
+
+  // We're only interested in the last 3 operations (which are done by the
+  // application).
+  copyOperations.removeRange(0, copyOperations.length - 3);
+
+  Expect.equals(1, copyOperations[0].objectsCopied);
+  Expect.equals(3, copyOperations[1].objectsCopied);
+  Expect.equals(1, copyOperations[2].objectsCopied);
+
+  Expect.equals(objectSize(0), copyOperations[0].bytesCopied);
+  Expect.equals(
+      arraySize(2) + 2 * objectSize(0), copyOperations[1].bytesCopied);
+  Expect.equals(typedDataSize(11), copyOperations[2].bytesCopied);
+}
+
+List<ObjectCopyOperation> getCopyOperations(
+    List<TimelineEvent> events, String isolateId) {
+  final copyOperations = <ObjectCopyOperation>[];
+
+  int? startTs = null;
+  int? startTts = null;
+
+  for (final e in events) {
+    if (e.isolateId != isolateId) continue;
+    if (e.name != 'CopyMutableObjectGraph') continue;
+
+    if (startTts != null) {
+      if (!e.isEnd) throw 'Missing end of copy event';
+
+      final us = e.ts - startTs!;
+      final threadUs = e.tts! - startTts;
+      copyOperations.add(ObjectCopyOperation(
+          us,
+          threadUs,
+          int.parse(e.args['AllocatedBytes']!),
+          int.parse(e.args['CopiedObjects']!)));
+
+      startTs = null;
+      startTts = null;
+      continue;
+    }
+
+    if (!e.isStart) throw 'Expected end of copy event';
+    startTs = e.ts;
+    startTts = e.tts;
+  }
+  return copyOperations;
+}
+
+class ObjectCopyOperation {
+  final int us;
+  final int threadUs;
+  final int bytesCopied;
+  final int objectsCopied;
+
+  ObjectCopyOperation(
+      this.us, this.threadUs, this.bytesCopied, this.objectsCopied);
+
+  String toString() =>
+      'ObjectCopyOperation($us, $threadUs, $bytesCopied, $objectsCopied)';
+}
diff --git a/runtime/tests/vm/dart/snapshot_test_helper.dart b/runtime/tests/vm/dart/snapshot_test_helper.dart
index 80d3344..a6890dd 100644
--- a/runtime/tests/vm/dart/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart/snapshot_test_helper.dart
@@ -124,7 +124,7 @@
 withTempDir(Future fun(String dir)) async {
   final Directory tempDir = Directory.systemTemp.createTempSync();
   try {
-    await fun(tempDir.path);
+    return await fun(tempDir.path);
   } finally {
     tempDir.deleteSync(recursive: true);
   }
diff --git a/runtime/tests/vm/dart/timeline_recorder_file_test.dart b/runtime/tests/vm/dart/timeline_recorder_file_test.dart
index 851a68a..7310754 100644
--- a/runtime/tests/vm/dart/timeline_recorder_file_test.dart
+++ b/runtime/tests/vm/dart/timeline_recorder_file_test.dart
@@ -2,13 +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.
 
-import "dart:io";
-import "dart:convert";
 import "dart:developer";
 
-import "package:path/path.dart" as path;
-
-import "snapshot_test_helper.dart";
+import "timeline_utils.dart";
 
 main(List<String> args) async {
   if (const bool.fromEnvironment("dart.vm.product")) {
@@ -21,48 +17,20 @@
     return;
   }
 
-  await withTempDir((String tmp) async {
-    final String timelinePath = path.join(tmp, "timeline.json");
-    final p = await Process.run(Platform.executable, [
-      ...Platform.executableArguments,
-      "--trace_timeline",
-      "--timeline_recorder=file:$timelinePath",
-      "--timeline_streams=VM,Isolate,GC,Compiler",
-      Platform.script.toFilePath(),
-      "--child"
-    ]);
-    print(p.stdout);
-    print(p.stderr);
-    if (p.exitCode != 0) {
-      throw "Child process failed: ${p.exitCode}";
-    }
-    // On Android, --trace_timeline goes to syslog instead of stderr.
-    if (!Platform.isAndroid) {
-      if (!p.stderr.contains("Using the File timeline recorder")) {
-        throw "Failed to select file recorder";
-      }
-    }
+  final timelineEvents =
+      await runAndCollectTimeline('VM,Isolate,GC,Compiler', ['--child']);
 
-    final timeline = jsonDecode(await new File(timelinePath).readAsString());
-    if (timeline is! List) throw "Timeline should be a JSON list";
-    print("${timeline.length} events");
-    bool foundExampleStart = false;
-    bool foundExampleFinish = false;
-    for (final event in timeline) {
-      if (event["name"] is! String) throw "Event missing name";
-      if (event["cat"] is! String) throw "Event missing category";
-      if (event["tid"] is! int) throw "Event missing thread";
-      if (event["pid"] is! int) throw "Event missing process";
-      if (event["ph"] is! String) throw "Event missing type";
-      if ((event["name"] == "TestEvent") && (event["ph"] == "B")) {
-        foundExampleStart = true;
-      }
-      if ((event["name"] == "TestEvent") && (event["ph"] == "E")) {
-        foundExampleFinish = true;
-      }
+  bool foundExampleStart = false;
+  bool foundExampleFinish = false;
+  for (final event in timelineEvents) {
+    if (event.name == "TestEvent" && event.ph == "B") {
+      foundExampleStart = true;
     }
+    if (event.name == "TestEvent" && event.ph == "E") {
+      foundExampleFinish = true;
+    }
+  }
 
-    if (foundExampleStart) throw "Missing test start event";
-    if (foundExampleFinish) throw "Missing test finish event";
-  });
+  if (foundExampleStart) throw "Missing test start event";
+  if (foundExampleFinish) throw "Missing test finish event";
 }
diff --git a/runtime/tests/vm/dart/timeline_utils.dart b/runtime/tests/vm/dart/timeline_utils.dart
new file mode 100644
index 0000000..cf0cddc
--- /dev/null
+++ b/runtime/tests/vm/dart/timeline_utils.dart
@@ -0,0 +1,92 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:io';
+import 'dart:convert';
+
+import 'package:path/path.dart' as path;
+
+import 'snapshot_test_helper.dart';
+
+Future<List<TimelineEvent>> runAndCollectTimeline(
+    String streams, List<String> args) async {
+  return await withTempDir((String tmp) async {
+    final String timelinePath = path.join(tmp, 'timeline.json');
+    final p = await Process.run(Platform.executable, [
+      ...Platform.executableArguments,
+      '--trace_timeline',
+      '--timeline_recorder=file:$timelinePath',
+      '--timeline_streams=$streams',
+      Platform.script.toFilePath(),
+      ...args,
+    ]);
+    print(p.stdout);
+    print(p.stderr);
+    if (p.exitCode != 0) {
+      throw 'Child process failed: ${p.exitCode}';
+    }
+    // On Android, --trace_timeline goes to syslog instead of stderr.
+    if (!Platform.isAndroid) {
+      if (!p.stderr.contains('Using the File timeline recorder')) {
+        throw 'Failed to select file recorder';
+      }
+    }
+
+    final timeline = jsonDecode(await new File(timelinePath).readAsString());
+    if (timeline is! List) throw 'Timeline should be a JSON list';
+
+    return parseTimeline(timeline);
+  });
+}
+
+List<TimelineEvent> parseTimeline(List l) {
+  final events = <TimelineEvent>[];
+
+  for (final event in l) {
+    events.add(TimelineEvent.from(event));
+  }
+  return events;
+}
+
+String findMainIsolateId(List<TimelineEvent> events) {
+  return events
+      .firstWhere((e) =>
+          e.name == 'InitializeIsolate' && e.args['isolateName'] == 'main')
+      .isolateId!;
+}
+
+class TimelineEvent {
+  final String name;
+  final String cat;
+  final int tid;
+  final int pid;
+  final int ts;
+  final int? tts;
+  final String ph;
+  final Map<String, String> args;
+
+  TimelineEvent._(this.name, this.cat, this.tid, this.pid, this.ts, this.tts,
+      this.ph, this.args);
+
+  factory TimelineEvent.from(Map m) {
+    return TimelineEvent._(
+      m['name'] as String,
+      m['cat'] as String,
+      m['tid'] as int,
+      m['pid'] as int,
+      m['ts'] as int,
+      m['tts'] as int?,
+      m['ph'] as String,
+      m['args'].cast<String, String>(),
+    );
+  }
+
+  bool get isStart => ph == 'B';
+  bool get isEnd => ph == 'E';
+
+  String? get isolateId => args['isolateId'];
+
+  String toString() =>
+      'TimelineEvent($name, $cat, $tid, $pid, $ts, $tts, $ph, $args)';
+}
diff --git a/runtime/tests/vm/dart_2/isolates/fast_object_copy_timeline_test.dart b/runtime/tests/vm/dart_2/isolates/fast_object_copy_timeline_test.dart
new file mode 100644
index 0000000..9030c78
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/fast_object_copy_timeline_test.dart
@@ -0,0 +1,122 @@
+// Copyright (c) 2022, 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.
+
+// @dart = 2.9
+
+// VMOptions=--no-enable-fast-object-copy
+// VMOptions=--enable-fast-object-copy
+
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:ffi';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+import '../timeline_utils.dart';
+
+final int wordSize = sizeOf<IntPtr>();
+final bool useCompressedPointers =
+    wordSize == 8 && (Platform.isAndroid || Platform.isIOS);
+
+final int kAllocationSize = 2 * wordSize;
+final int headerSize = wordSize;
+final int slotSize = useCompressedPointers ? 4 : wordSize;
+
+final int objectBaseSize = headerSize;
+final int arrayBaseSize = headerSize + 2 * slotSize;
+final int typedDataBaseSize = headerSize + 2 * wordSize;
+
+int objectSize(int slots) => toAllocationSize(headerSize + slots * slotSize);
+int arraySize(int elements) =>
+    toAllocationSize(headerSize + 2 * slotSize + elements * slotSize);
+int typedDataSize(int length) =>
+    toAllocationSize(headerSize + 2 * wordSize + length);
+
+int toAllocationSize(int value) =>
+    (value + kAllocationSize - 1) & ~(kAllocationSize - 1);
+
+Future main(List<String> args) async {
+  if (const bool.fromEnvironment('dart.vm.product')) {
+    return; // No timeline support
+  }
+
+  if (args.contains('--child')) {
+    final rp = ReceivePort();
+    final sendPort = rp.sendPort;
+
+    sendPort.send(Object());
+    sendPort.send(List<dynamic>.filled(2, null)
+      ..[0] = Object()
+      ..[1] = Object());
+    sendPort.send(Uint8List(11));
+
+    rp.close();
+    return;
+  }
+
+  final timelineEvents = await runAndCollectTimeline('Isolate', ['--child']);
+  final mainIsolateId = findMainIsolateId(timelineEvents);
+  final copyOperations = getCopyOperations(timelineEvents, mainIsolateId);
+
+  // We're only interested in the last 3 operations (which are done by the
+  // application).
+  copyOperations.removeRange(0, copyOperations.length - 3);
+
+  Expect.equals(1, copyOperations[0].objectsCopied);
+  Expect.equals(3, copyOperations[1].objectsCopied);
+  Expect.equals(1, copyOperations[2].objectsCopied);
+
+  Expect.equals(objectSize(0), copyOperations[0].bytesCopied);
+  Expect.equals(
+      arraySize(2) + 2 * objectSize(0), copyOperations[1].bytesCopied);
+  Expect.equals(typedDataSize(11), copyOperations[2].bytesCopied);
+}
+
+List<ObjectCopyOperation> getCopyOperations(
+    List<TimelineEvent> events, String isolateId) {
+  final copyOperations = <ObjectCopyOperation>[];
+
+  int startTs = null;
+  int startTts = null;
+
+  for (final e in events) {
+    if (e.isolateId != isolateId) continue;
+    if (e.name != 'CopyMutableObjectGraph') continue;
+
+    if (startTts != null) {
+      if (!e.isEnd) throw 'Missing end of copy event';
+
+      final us = e.ts - startTs;
+      final threadUs = e.tts - startTts;
+      copyOperations.add(ObjectCopyOperation(
+          us,
+          threadUs,
+          int.parse(e.args['AllocatedBytes']),
+          int.parse(e.args['CopiedObjects'])));
+
+      startTs = null;
+      startTts = null;
+      continue;
+    }
+
+    if (!e.isStart) throw 'Expected end of copy event';
+    startTs = e.ts;
+    startTts = e.tts;
+  }
+  return copyOperations;
+}
+
+class ObjectCopyOperation {
+  final int us;
+  final int threadUs;
+  final int bytesCopied;
+  final int objectsCopied;
+
+  ObjectCopyOperation(
+      this.us, this.threadUs, this.bytesCopied, this.objectsCopied);
+
+  String toString() =>
+      'ObjectCopyOperation($us, $threadUs, $bytesCopied, $objectsCopied)';
+}
diff --git a/runtime/tests/vm/dart_2/snapshot_test_helper.dart b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
index b57d04d..d790c4a 100644
--- a/runtime/tests/vm/dart_2/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
@@ -126,7 +126,7 @@
 withTempDir(Future fun(String dir)) async {
   final Directory tempDir = Directory.systemTemp.createTempSync();
   try {
-    await fun(tempDir.path);
+    return await fun(tempDir.path);
   } finally {
     tempDir.deleteSync(recursive: true);
   }
diff --git a/runtime/tests/vm/dart_2/timeline_recorder_file_test.dart b/runtime/tests/vm/dart_2/timeline_recorder_file_test.dart
index e49877c..e308ebd 100644
--- a/runtime/tests/vm/dart_2/timeline_recorder_file_test.dart
+++ b/runtime/tests/vm/dart_2/timeline_recorder_file_test.dart
@@ -4,13 +4,9 @@
 
 // @dart = 2.9
 
-import "dart:io";
-import "dart:convert";
 import "dart:developer";
 
-import "package:path/path.dart" as path;
-
-import "snapshot_test_helper.dart";
+import "timeline_utils.dart";
 
 main(List<String> args) async {
   if (const bool.fromEnvironment("dart.vm.product")) {
@@ -23,48 +19,25 @@
     return;
   }
 
-  await withTempDir((String tmp) async {
-    final String timelinePath = path.join(tmp, "timeline.json");
-    final p = await Process.run(Platform.executable, [
-      ...Platform.executableArguments,
-      "--trace_timeline",
-      "--timeline_recorder=file:$timelinePath",
-      "--timeline_streams=VM,Isolate,GC,Compiler",
-      Platform.script.toFilePath(),
-      "--child"
-    ]);
-    print(p.stdout);
-    print(p.stderr);
-    if (p.exitCode != 0) {
-      throw "Child process failed: ${p.exitCode}";
-    }
-    // On Android, --trace_timeline goes to syslog instead of stderr.
-    if (!Platform.isAndroid) {
-      if (!p.stderr.contains("Using the File timeline recorder")) {
-        throw "Failed to select file recorder";
-      }
-    }
+  final timelineEvents =
+      await runAndCollectTimeline('VM,Isolate,GC,Compiler', ['--child']);
 
-    final timeline = jsonDecode(await new File(timelinePath).readAsString());
-    if (timeline is! List) throw "Timeline should be a JSON list";
-    print("${timeline.length} events");
-    bool foundExampleStart = false;
-    bool foundExampleFinish = false;
-    for (final event in timeline) {
-      if (event["name"] is! String) throw "Event missing name";
-      if (event["cat"] is! String) throw "Event missing category";
-      if (event["tid"] is! int) throw "Event missing thread";
-      if (event["pid"] is! int) throw "Event missing process";
-      if (event["ph"] is! String) throw "Event missing type";
-      if ((event["name"] == "TestEvent") && (event["ph"] == "B")) {
-        foundExampleStart = true;
-      }
-      if ((event["name"] == "TestEvent") && (event["ph"] == "E")) {
-        foundExampleFinish = true;
-      }
+  bool foundExampleStart = false;
+  bool foundExampleFinish = false;
+  for (final event in timelineEvents) {
+    if (event.name is! String) throw "Event missing name";
+    if (event.cat is! String) throw "Event missing category";
+    if (event.tid is! int) throw "Event missing thread";
+    if (event.pid is! int) throw "Event missing process";
+    if (event.ph is! String) throw "Event missing type";
+    if (event.name == "TestEvent" && event.ph == "B") {
+      foundExampleStart = true;
     }
+    if (event.name == "TestEvent" && event.ph == "E") {
+      foundExampleFinish = true;
+    }
+  }
 
-    if (foundExampleStart) throw "Missing test start event";
-    if (foundExampleFinish) throw "Missing test finish event";
-  });
+  if (foundExampleStart) throw "Missing test start event";
+  if (foundExampleFinish) throw "Missing test finish event";
 }
diff --git a/runtime/tests/vm/dart_2/timeline_utils.dart b/runtime/tests/vm/dart_2/timeline_utils.dart
new file mode 100644
index 0000000..3041293
--- /dev/null
+++ b/runtime/tests/vm/dart_2/timeline_utils.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2022, 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.
+
+// @dart = 2.9
+
+import 'dart:io';
+import 'dart:convert';
+
+import 'package:path/path.dart' as path;
+
+import 'snapshot_test_helper.dart';
+
+Future<List<TimelineEvent>> runAndCollectTimeline(
+    String streams, List<String> args) async {
+  return await withTempDir((String tmp) async {
+    final String timelinePath = path.join(tmp, 'timeline.json');
+    final p = await Process.run(Platform.executable, [
+      ...Platform.executableArguments,
+      '--trace_timeline',
+      '--timeline_recorder=file:$timelinePath',
+      '--timeline_streams=$streams',
+      Platform.script.toFilePath(),
+      ...args,
+    ]);
+    print(p.stdout);
+    print(p.stderr);
+    if (p.exitCode != 0) {
+      throw 'Child process failed: ${p.exitCode}';
+    }
+    // On Android, --trace_timeline goes to syslog instead of stderr.
+    if (!Platform.isAndroid) {
+      if (!p.stderr.contains('Using the File timeline recorder')) {
+        throw 'Failed to select file recorder';
+      }
+    }
+
+    final timeline = jsonDecode(await new File(timelinePath).readAsString());
+    if (timeline is! List) throw 'Timeline should be a JSON list';
+
+    return parseTimeline(timeline);
+  });
+}
+
+List<TimelineEvent> parseTimeline(List l) {
+  final events = <TimelineEvent>[];
+
+  for (final event in l) {
+    events.add(TimelineEvent.from(event));
+  }
+  return events;
+}
+
+String findMainIsolateId(List<TimelineEvent> events) {
+  return events
+      .firstWhere((e) =>
+          e.name == 'InitializeIsolate' && e.args['isolateName'] == 'main')
+      .args['isolateId'];
+}
+
+class TimelineEvent {
+  final String name;
+  final String cat;
+  final int tid;
+  final int pid;
+  final int ts;
+  final int tts;
+  final String ph;
+  final Map<String, String> args;
+
+  TimelineEvent._(this.name, this.cat, this.tid, this.pid, this.ts, this.tts,
+      this.ph, this.args);
+
+  factory TimelineEvent.from(Map m) {
+    return TimelineEvent._(
+      m['name'] as String,
+      m['cat'] as String,
+      m['tid'] as int,
+      m['pid'] as int,
+      m['ts'] as int,
+      m['tts'] as int,
+      m['ph'] as String,
+      m['args'].cast<String, String>(),
+    );
+  }
+
+  bool get isStart => ph == 'B';
+  bool get isEnd => ph == 'E';
+
+  String get isolateId => args['isolateId'];
+
+  String toString() =>
+      'TimelineEvent($name, $cat, $tid, $pid, $ts, $tts, $ph, $args)';
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 2496daf..c61949e 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -299,7 +299,9 @@
 
 [ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 dart/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
+dart/isolates/fast_object_copy_test*: SkipSlow
 dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
+dart_2/isolates/fast_object_copy_test*: SkipSlow
 
 [ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $builder_tag == tsan) ]
 dart/regress_45898_test: Pass, Slow
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index abfc8a7..a1f6765 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1172,6 +1172,16 @@
       return BuildInstanceSet(position);
     case kDynamicSet:
       return BuildDynamicSet(position);
+    case kAbstractSuperPropertyGet:
+      // Abstract super property getters must be converted into super property
+      // getters during mixin transformation.
+      UNREACHABLE();
+      break;
+    case kAbstractSuperPropertySet:
+      // Abstract super property setters must be converted into super property
+      // setters during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperPropertyGet:
       return BuildSuperPropertyGet(position);
     case kSuperPropertySet:
@@ -1192,6 +1202,11 @@
       return BuildEqualsCall(position);
     case kEqualsNull:
       return BuildEqualsNull(position);
+    case kAbstractSuperMethodInvocation:
+      // Abstract super method invocations must be converted into super
+      // method invocations during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperMethodInvocation:
       return BuildSuperMethodInvocation(position);
     case kStaticInvocation:
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 3a888c4..7347029 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -412,6 +412,16 @@
       BuildHash(ReadNameAsSetterName().Hash());  // read name.
       CalculateExpressionFingerprint();          // read value.
       return;
+    case kAbstractSuperPropertyGet:
+      // Abstract super property getters must be converted into super property
+      // getters during mixin transformation.
+      UNREACHABLE();
+      break;
+    case kAbstractSuperPropertySet:
+      // Abstract super property setters must be converted into super property
+      // setters during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperPropertyGet:
       ReadPosition();                            // read position.
       BuildHash(ReadNameAsGetterName().Hash());  // read name.
@@ -474,6 +484,11 @@
       ReadPosition();                    // read position.
       CalculateExpressionFingerprint();  // read expression.
       return;
+    case kAbstractSuperMethodInvocation:
+      // Abstract super method invocations must be converted into super
+      // method invocations during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperMethodInvocation:
       ReadPosition();                            // read position.
       BuildHash(ReadNameAsMethodName().Hash());  // read name.
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index e300802..d52cc58 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2420,6 +2420,16 @@
       SkipName();        // read name.
       SkipExpression();  // read value.
       return;
+    case kAbstractSuperPropertyGet:
+      // Abstract super property getters must be converted into super property
+      // getters during mixin transformation.
+      UNREACHABLE();
+      break;
+    case kAbstractSuperPropertySet:
+      // Abstract super property setters must be converted into super property
+      // setters during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperPropertyGet:
       ReadPosition();                      // read position.
       SkipName();                          // read name.
@@ -2482,6 +2492,11 @@
       ReadPosition();    // read position.
       SkipExpression();  // read expression.
       return;
+    case kAbstractSuperMethodInvocation:
+      // Abstract super method invocations must be converted into super
+      // method invocations during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperMethodInvocation:
       ReadPosition();                      // read position.
       SkipName();                          // read name.
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 89d7660..3282161 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -748,6 +748,16 @@
       helper_.SkipName();      // read name.
       VisitExpression();       // read value.
       return;
+    case kAbstractSuperPropertyGet:
+      // Abstract super property getters must be converted into super property
+      // getters during mixin transformation.
+      UNREACHABLE();
+      break;
+    case kAbstractSuperPropertySet:
+      // Abstract super property setters must be converted into super property
+      // setters during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperPropertyGet:
       HandleLoadReceiver();
       helper_.ReadPosition();                      // read position.
@@ -817,6 +827,11 @@
       helper_.ReadPosition();  // read position.
       VisitExpression();       // read expression.
       return;
+    case kAbstractSuperMethodInvocation:
+      // Abstract super method invocations must be converted into super
+      // method invocations during mixin transformation.
+      UNREACHABLE();
+      break;
     case kSuperMethodInvocation:
       HandleLoadReceiver();
       helper_.ReadPosition();  // read position.
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 6e6972f..96c196d 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 80;
-static const uint32_t kMaxSupportedKernelFormatVersion = 80;
+static const uint32_t kMinSupportedKernelFormatVersion = 81;
+static const uint32_t kMaxSupportedKernelFormatVersion = 81;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
@@ -49,10 +49,13 @@
   V(InvalidExpression, 19)                                                     \
   V(VariableGet, 20)                                                           \
   V(VariableSet, 21)                                                           \
+  V(AbstractSuperPropertyGet, 22)                                              \
+  V(AbstractSuperPropertySet, 23)                                              \
   V(SuperPropertyGet, 24)                                                      \
   V(SuperPropertySet, 25)                                                      \
   V(StaticGet, 26)                                                             \
   V(StaticSet, 27)                                                             \
+  V(AbstractSuperMethodInvocation, 28)                                         \
   V(SuperMethodInvocation, 29)                                                 \
   V(StaticInvocation, 30)                                                      \
   V(ConstructorInvocation, 31)                                                 \
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 86d3c8e..43c35b3 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -12,6 +12,7 @@
 #include "vm/object_store.h"
 #include "vm/snapshot.h"
 #include "vm/symbols.h"
+#include "vm/timeline.h"
 
 #define Z zone_
 
@@ -422,7 +423,7 @@
     return raw_from_to_[id + 1];
   }
 
-  void Insert(ObjectPtr from, ObjectPtr to) {
+  void Insert(ObjectPtr from, ObjectPtr to, intptr_t size) {
     ASSERT(ForwardedObject(from) == Marker());
     ASSERT(raw_from_to_.length() == raw_from_to_.length());
     const auto id = raw_from_to_.length();
@@ -430,6 +431,7 @@
     raw_from_to_.Resize(id + 2);
     raw_from_to_[id] = from;
     raw_from_to_[id + 1] = to;
+    allocated_bytes += size;
   }
 
   void AddTransferable(TransferableTypedDataPtr from,
@@ -460,6 +462,7 @@
   GrowableArray<WeakPropertyPtr> raw_weak_properties_;
   GrowableArray<WeakReferencePtr> raw_weak_references_;
   intptr_t fill_cursor_ = 0;
+  intptr_t allocated_bytes = 0;
 
   DISALLOW_COPY_AND_ASSIGN(FastForwardMap);
 };
@@ -482,13 +485,14 @@
     return from_to_[id + 1]->ptr();
   }
 
-  void Insert(ObjectPtr from, ObjectPtr to) {
+  void Insert(ObjectPtr from, ObjectPtr to, intptr_t size) {
     ASSERT(ForwardedObject(from) == Marker());
     const auto id = from_to_.length();
     SetObjectId(from, id);
     from_to_.Resize(id + 2);
     from_to_[id] = &Object::Handle(Z, from);
     from_to_[id + 1] = &Object::Handle(Z, to);
+    allocated_bytes += size;
   }
 
   void AddTransferable(const TransferableTypedData& from,
@@ -541,6 +545,7 @@
   GrowableArray<const WeakProperty*> weak_properties_;
   GrowableArray<const WeakReference*> weak_references_;
   intptr_t fill_cursor_ = 0;
+  intptr_t allocated_bytes = 0;
 
   DISALLOW_COPY_AND_ASSIGN(SlowForwardMap);
 };
@@ -780,7 +785,7 @@
       const uword alloc = new_space_->TryAllocate(thread_, size);
       if (alloc != 0) {
         ObjectPtr to(reinterpret_cast<UntaggedObject*>(alloc));
-        fast_forward_map_.Insert(from, to);
+        fast_forward_map_.Insert(from, to, size);
 
         if (IsExternalTypedDataClassId(cid)) {
           SetNewSpaceTaggingWord(to, cid, header_size);
@@ -986,7 +991,7 @@
       size = from.ptr().untag()->HeapSize();
     }
     ObjectPtr to = AllocateObject(cid, size);
-    slow_forward_map_.Insert(from.ptr(), to);
+    slow_forward_map_.Insert(from.ptr(), to, size);
     UpdateLengthField(cid, from.ptr(), to);
     if (cid == kArrayCid && !Heap::IsAllocatableInNewSpace(size)) {
       to.untag()->SetCardRememberedBitUnsynchronized();
@@ -1847,6 +1852,10 @@
     return result.ptr();
   }
 
+  intptr_t allocated_bytes() { return allocated_bytes_; }
+
+  intptr_t copied_objects() { return copied_objects_; }
+
  private:
   ObjectPtr CopyObjectGraphInternal(const Object& root,
                                     const char* volatile* exception_msg) {
@@ -1885,6 +1894,11 @@
             result_array.SetAt(2, fast_object_copy_.tmp_);
             HandlifyExternalTypedData();
             HandlifyTransferables();
+            allocated_bytes_ =
+                fast_object_copy_.fast_forward_map_.allocated_bytes;
+            copied_objects_ =
+                fast_object_copy_.fast_forward_map_.fill_cursor_ / 2 -
+                /*null_entry=*/1;
             return result_array.ptr();
           }
 
@@ -1924,6 +1938,9 @@
     result_array.SetAt(0, result);
     result_array.SetAt(1, slow_object_copy_.objects_to_rehash_);
     result_array.SetAt(2, slow_object_copy_.expandos_to_rehash_);
+    allocated_bytes_ = slow_object_copy_.slow_forward_map_.allocated_bytes;
+    copied_objects_ =
+        slow_object_copy_.slow_forward_map_.fill_cursor_ / 2 - /*null_entry=*/1;
     return result_array.ptr();
   }
 
@@ -1940,6 +1957,7 @@
     HandlifyExpandosToReHash();
     HandlifyFromToObjects();
     slow_forward_map.fill_cursor_ = fast_forward_map.fill_cursor_;
+    slow_forward_map.allocated_bytes = fast_forward_map.allocated_bytes;
   }
 
   void MakeUninitializedNewSpaceObjectsGCSafe() {
@@ -2029,12 +2047,23 @@
   Zone* zone_;
   FastObjectCopy fast_object_copy_;
   SlowObjectCopy slow_object_copy_;
+  intptr_t copied_objects_ = 0;
+  intptr_t allocated_bytes_ = 0;
 };
 
 ObjectPtr CopyMutableObjectGraph(const Object& object) {
   auto thread = Thread::Current();
+  TIMELINE_DURATION(thread, Isolate, "CopyMutableObjectGraph");
   ObjectGraphCopier copier(thread);
-  return copier.CopyObjectGraph(object);
+  ObjectPtr result = copier.CopyObjectGraph(object);
+#if defined(SUPPORT_TIMELINE)
+  if (tbes.enabled()) {
+    tbes.SetNumArguments(2);
+    tbes.FormatArgument(0, "CopiedObjects", "%" Pd, copier.copied_objects());
+    tbes.FormatArgument(1, "AllocatedBytes", "%" Pd, copier.allocated_bytes());
+  }
+#endif
+  return result;
 }
 
 }  // namespace dart
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index 1332aef..aa98b42 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -2174,8 +2174,24 @@
   /// ```
   int get bitLength {
     if (_used == 0) return 0;
-    if (_isNegative) return (~this).bitLength;
-    return _digitBits * (_used - 1) + _digits[_used - 1].bitLength;
+    final highBits = _digits[_used - 1];
+    assert(highBits != 0);
+    int length = _digitBits * (_used - 1) + highBits.bitLength;
+    if (!_isNegative) return length;
+
+    // `this` is negative, i.e. `-x` for the magnitude `x`. We want to find the
+    // bit length of `~this` or equivalently `-this-1`.
+    //
+    //     -this-1 == -(-x)-1 == x-1
+    //
+    // `x-1` will have the same bit length as `x` unless `x` is power of two
+    // (e.g. 0x1000-1 = 0x0FFF). The magnitude is a power of two if the high
+    // digit is a power of two and all the other digits are zero.
+    if (highBits & (highBits - 1) != 0) return length;
+    for (int i = _used - 2; i >= 0; i--) {
+      if (_digits[i] != 0) return length;
+    }
+    return length - 1;
   }
 
   /// Truncating division operator.
diff --git a/sdk/lib/_internal/vm/lib/bigint_patch.dart b/sdk/lib/_internal/vm/lib/bigint_patch.dart
index 9ab2e2f..affdfeb 100644
--- a/sdk/lib/_internal/vm/lib/bigint_patch.dart
+++ b/sdk/lib/_internal/vm/lib/bigint_patch.dart
@@ -1657,9 +1657,24 @@
    */
   int get bitLength {
     if (_used == 0) return 0;
-    var highBits = _digits[_used - 1];
-    if (_isNegative) highBits -= 1;
-    return _digitBits * (_used - 1) + highBits.bitLength;
+    final highBits = _digits[_used - 1];
+    assert(highBits != 0);
+    int length = _digitBits * (_used - 1) + highBits.bitLength;
+    if (!_isNegative) return length;
+
+    // `this` is negative, i.e. `-x` for the magnitude `x`. We want to find the
+    // bit length of `~this` or equivalently `-this-1`.
+    //
+    //     -this-1 == -(-x)-1 == x-1
+    //
+    // `x-1` will have the same bit length as `x` unless `x` is power of two
+    // (e.g. 0x1000-1 = 0x0FFF). The magnitude is a power of two if the high
+    // digit is a power of two and all the other digits are zero.
+    if (highBits & (highBits - 1) != 0) return length;
+    for (int i = _used - 2; i >= 0; i--) {
+      if (_digits[i] != 0) return length;
+    }
+    return length - 1;
   }
 
   /**
diff --git a/tests/corelib/bigint_bitlength_test.dart b/tests/corelib/bigint_bitlength_test.dart
new file mode 100644
index 0000000..ff7c87a
--- /dev/null
+++ b/tests/corelib/bigint_bitlength_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2022, 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+const debugPrint = bool.fromEnvironment('debugPrint');
+
+void check(int length, BigInt base) {
+  assert(length >= 5);
+  assert(base > BigInt.zero);
+
+  // Check with slight adjustments. We choose -3..+3 so that the lowest bit in
+  // the 2's-complement representation is both zero and one for both the postive
+  // [n] and its negative complement [m] below.
+  for (int delta = -3; delta <= 3; delta++) {
+    BigInt n = base + BigInt.from(delta);
+    assert(n >= BigInt.zero);
+
+    // Compute the bitLength by shifting the value into a small integer range
+    // and adjust the `int.bitLength` value by the shift count.
+    int shiftCount = length - 5;
+    int shiftedN = (n >> shiftCount).toInt();
+    int expectedLength = shiftCount + shiftedN.bitLength;
+
+    int nLength = n.bitLength;
+    Expect.equals(expectedLength, nLength);
+
+    // Use identity `x.bitLength == (-x-1).bitLength` to check negative values.
+    BigInt m = -n - BigInt.one;
+    int mLength = m.bitLength;
+
+    if (debugPrint) {
+      final printLength = length + 4;
+      final nDigits =
+          n.toUnsigned(printLength).toRadixString(2).padLeft(printLength);
+      final mDigits = m.toUnsigned(printLength).toRadixString(2);
+      print('$nDigits: $nLength');
+      print('$mDigits: $mLength');
+    }
+
+    Expect.equals(nLength, mLength);
+  }
+}
+
+void main() {
+  // For small values, [BigInt.bitLength] should be the same as [int.bitLength].
+  for (int i = 0; i <= 64; i++) {
+    Expect.equals(i.bitLength, BigInt.from(i).bitLength);
+    // Note: This is not quite redundant for `i==0` since on the web platform
+    // `-i` is negative zero and not the same as `0-i`.
+    Expect.equals((-i).bitLength, BigInt.from(-i).bitLength);
+  }
+
+  // Test x.bitLength for a large variety of lengths.
+  for (int length = 5; length <= 512; length++) {
+    BigInt base = BigInt.one << (length - 1);
+    Expect.equals(length, base.bitLength);
+
+    // Power of two.
+    check(length, base);
+
+    // Two high bits set.
+    check(length, base | base >> 1);
+
+    // Check for values with an additional bit set near a potential internal
+    // digit boundary.
+    for (int i1 = 16; i1 < length; i1 += 16) {
+      for (int i2 = -1; i2 <= 1; i2++) {
+        int i = i1 + i2;
+        if (i < length - 1) {
+          check(length, base | BigInt.one << (i - 1));
+        }
+      }
+    }
+  }
+}
diff --git a/tests/corelib_2/bigint_bitlength_test.dart b/tests/corelib_2/bigint_bitlength_test.dart
new file mode 100644
index 0000000..ff7c87a
--- /dev/null
+++ b/tests/corelib_2/bigint_bitlength_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2022, 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+const debugPrint = bool.fromEnvironment('debugPrint');
+
+void check(int length, BigInt base) {
+  assert(length >= 5);
+  assert(base > BigInt.zero);
+
+  // Check with slight adjustments. We choose -3..+3 so that the lowest bit in
+  // the 2's-complement representation is both zero and one for both the postive
+  // [n] and its negative complement [m] below.
+  for (int delta = -3; delta <= 3; delta++) {
+    BigInt n = base + BigInt.from(delta);
+    assert(n >= BigInt.zero);
+
+    // Compute the bitLength by shifting the value into a small integer range
+    // and adjust the `int.bitLength` value by the shift count.
+    int shiftCount = length - 5;
+    int shiftedN = (n >> shiftCount).toInt();
+    int expectedLength = shiftCount + shiftedN.bitLength;
+
+    int nLength = n.bitLength;
+    Expect.equals(expectedLength, nLength);
+
+    // Use identity `x.bitLength == (-x-1).bitLength` to check negative values.
+    BigInt m = -n - BigInt.one;
+    int mLength = m.bitLength;
+
+    if (debugPrint) {
+      final printLength = length + 4;
+      final nDigits =
+          n.toUnsigned(printLength).toRadixString(2).padLeft(printLength);
+      final mDigits = m.toUnsigned(printLength).toRadixString(2);
+      print('$nDigits: $nLength');
+      print('$mDigits: $mLength');
+    }
+
+    Expect.equals(nLength, mLength);
+  }
+}
+
+void main() {
+  // For small values, [BigInt.bitLength] should be the same as [int.bitLength].
+  for (int i = 0; i <= 64; i++) {
+    Expect.equals(i.bitLength, BigInt.from(i).bitLength);
+    // Note: This is not quite redundant for `i==0` since on the web platform
+    // `-i` is negative zero and not the same as `0-i`.
+    Expect.equals((-i).bitLength, BigInt.from(-i).bitLength);
+  }
+
+  // Test x.bitLength for a large variety of lengths.
+  for (int length = 5; length <= 512; length++) {
+    BigInt base = BigInt.one << (length - 1);
+    Expect.equals(length, base.bitLength);
+
+    // Power of two.
+    check(length, base);
+
+    // Two high bits set.
+    check(length, base | base >> 1);
+
+    // Check for values with an additional bit set near a potential internal
+    // digit boundary.
+    for (int i1 = 16; i1 < length; i1 += 16) {
+      for (int i2 = -1; i2 <= 1; i2++) {
+        int i = i1 + i2;
+        if (i < length - 1) {
+          check(length, base | BigInt.one << (i - 1));
+        }
+      }
+    }
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 16a594e..b393a78 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 136
+PRERELEASE 137
 PRERELEASE_PATCH 0
\ No newline at end of file