diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
index 74a310a..808f5f9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
@@ -1281,10 +1281,12 @@
       'AMPERSAND_AMPERSAND_EQ',
       ASSIGNMENT_PRECEDENCE,
       AMPERSAND_AMPERSAND_EQ_TOKEN,
+      binaryOperatorOfCompoundAssignment: TokenType.AMPERSAND_AMPERSAND,
       isOperator: true);
 
   static const TokenType AMPERSAND_EQ = const TokenType(
       '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN,
+      binaryOperatorOfCompoundAssignment: TokenType.AMPERSAND,
       isOperator: true);
 
   static const TokenType AT =
@@ -1312,11 +1314,11 @@
   // This is not yet part of the language and not supported by fasta
   static const TokenType BAR_BAR_EQ = const TokenType(
       '||=', 'BAR_BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_BAR_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.BAR_BAR, isOperator: true);
 
   static const TokenType BAR_EQ = const TokenType(
       '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.BAR, isOperator: true);
 
   static const TokenType COLON =
       const TokenType(':', 'COLON', NO_PRECEDENCE, COLON_TOKEN);
@@ -1330,7 +1332,7 @@
 
   static const TokenType CARET_EQ = const TokenType(
       '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.CARET, isOperator: true);
 
   static const TokenType CLOSE_CURLY_BRACKET = const TokenType(
       '}', 'CLOSE_CURLY_BRACKET', NO_PRECEDENCE, CLOSE_CURLY_BRACKET_TOKEN);
@@ -1372,7 +1374,7 @@
 
   static const TokenType GT_GT_EQ = const TokenType(
       '>>=', 'GT_GT_EQ', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.GT_GT, isOperator: true);
 
   static const TokenType GT_GT_GT = const TokenType(
       '>>>', 'GT_GT_GT', SHIFT_PRECEDENCE, GT_GT_GT_TOKEN,
@@ -1380,7 +1382,7 @@
 
   static const TokenType GT_GT_GT_EQ = const TokenType(
       '>>>=', 'GT_GT_GT_EQ', ASSIGNMENT_PRECEDENCE, GT_GT_GT_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.GT_GT_GT, isOperator: true);
 
   static const TokenType HASH =
       const TokenType('#', 'HASH', NO_PRECEDENCE, HASH_TOKEN);
@@ -1407,7 +1409,7 @@
 
   static const TokenType LT_LT_EQ = const TokenType(
       '<<=', 'LT_LT_EQ', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.LT_LT, isOperator: true);
 
   static const TokenType MINUS = const TokenType(
       '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN,
@@ -1415,7 +1417,7 @@
 
   static const TokenType MINUS_EQ = const TokenType(
       '-=', 'MINUS_EQ', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.MINUS, isOperator: true);
 
   static const TokenType MINUS_MINUS = const TokenType(
       '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN,
@@ -1436,7 +1438,7 @@
 
   static const TokenType PERCENT_EQ = const TokenType(
       '%=', 'PERCENT_EQ', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.PERCENT, isOperator: true);
 
   static const TokenType PERIOD =
       const TokenType('.', 'PERIOD', SELECTOR_PRECEDENCE, PERIOD_TOKEN);
@@ -1451,7 +1453,7 @@
 
   static const TokenType PLUS_EQ = const TokenType(
       '+=', 'PLUS_EQ', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.PLUS, isOperator: true);
 
   static const TokenType PLUS_PLUS = const TokenType(
       '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN,
@@ -1471,6 +1473,7 @@
 
   static const TokenType QUESTION_QUESTION_EQ = const TokenType('??=',
       'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN,
+      binaryOperatorOfCompoundAssignment: TokenType.QUESTION_QUESTION,
       isOperator: true);
 
   static const TokenType SEMICOLON =
@@ -1482,7 +1485,7 @@
 
   static const TokenType SLASH_EQ = const TokenType(
       '/=', 'SLASH_EQ', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.SLASH, isOperator: true);
 
   static const TokenType STAR = const TokenType(
       '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN,
@@ -1490,7 +1493,7 @@
 
   static const TokenType STAR_EQ = const TokenType(
       '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN,
-      isOperator: true);
+      binaryOperatorOfCompoundAssignment: TokenType.STAR, isOperator: true);
 
   static const TokenType STRING_INTERPOLATION_EXPRESSION = const TokenType(
       '\${',
@@ -1514,6 +1517,7 @@
 
   static const TokenType TILDE_SLASH_EQ = const TokenType(
       '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN,
+      binaryOperatorOfCompoundAssignment: TokenType.TILDE_SLASH,
       isOperator: true);
 
   static const TokenType BACKPING =
@@ -1647,6 +1651,12 @@
     //TokenType.RECOVERY,
   ];
 
+  /**
+   * The binary operator that is invoked by this compound assignment operator,
+   * or `null` otherwise.
+   */
+  final TokenType? binaryOperatorOfCompoundAssignment;
+
   final int kind;
 
   /**
@@ -1700,9 +1710,10 @@
   final String? stringValue;
 
   const TokenType(this.lexeme, this.name, this.precedence, this.kind,
-      {this.isModifier: false,
-      this.isOperator: false,
+      {this.binaryOperatorOfCompoundAssignment,
       this.isBinaryOperator: false,
+      this.isModifier: false,
+      this.isOperator: false,
       this.isTopLevelKeyword: false,
       this.isUserDefinableOperator: false,
       String? stringValue: 'unspecified'})
diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dart b/pkg/analysis_server/benchmark/integration/input_converter.dart
index 0f86919..da47e28 100644
--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
+++ b/pkg/analysis_server/benchmark/integration/input_converter.dart
@@ -253,51 +253,62 @@
 
   /// The number of lines read before the underlying converter was determined
   /// or the end of file was reached.
-  int headerLineCount = 0;
+  int _headerLineCount = 0;
 
   /// The underlying converter used to translate lines into operations
   /// or `null` if it has not yet been determined.
-  Converter<String, Operation?>? converter;
+  Converter<String, Operation?>? _converter;
 
-  /// [active] is `true` if converting lines to operations
+  /// [_active] is `true` if converting lines to operations
   /// or `false` if an exception has occurred.
-  bool active = true;
+  bool _active = true;
 
   InputConverter(this.tmpSrcDirPath, this.srcPathMap);
 
   @override
   Operation? convert(String line) {
-    if (!active) {
+    if (!_active) {
       return null;
     }
-    var converter = this.converter;
-    if (converter != null) {
-      try {
-        return converter.convert(line);
-      } catch (e) {
-        active = false;
-        rethrow;
+    try {
+      var converter = _getConverter(line);
+      if (converter == null) {
+        logger.log(Level.INFO, 'skipped input line: $line');
+        return null;
       }
-    }
-    if (headerLineCount == 20) {
-      throw 'Failed to determine input file format';
-    }
-    if (InstrumentationInputConverter.isFormat(line)) {
-      converter = InstrumentationInputConverter(tmpSrcDirPath, srcPathMap);
-    } else if (LogFileInputConverter.isFormat(line)) {
-      converter = LogFileInputConverter(tmpSrcDirPath, srcPathMap);
-    }
-    if (converter != null) {
       return converter.convert(line);
+    } catch (_) {
+      _active = false;
+      rethrow;
     }
-    logger.log(Level.INFO, 'skipped input line: $line');
-    return null;
   }
 
   @override
   _InputSink startChunkedConversion(outSink) {
     return _InputSink(this, outSink);
   }
+
+  /// Return the previously determined converter, or determine it from the
+  /// given [line]. Return `null` if cannot be determined yet. Throw an
+  /// exception if could not be determined after some number of tries.
+  Converter<String, Operation?>? _getConverter(String line) {
+    var converter = _converter;
+    if (converter != null) {
+      return converter;
+    }
+
+    if (_headerLineCount++ == 20) {
+      throw 'Failed to determine input file format';
+    }
+
+    if (InstrumentationInputConverter.isFormat(line)) {
+      _converter = InstrumentationInputConverter(tmpSrcDirPath, srcPathMap);
+    } else if (LogFileInputConverter.isFormat(line)) {
+      _converter = LogFileInputConverter(tmpSrcDirPath, srcPathMap);
+    }
+
+    return _converter;
+  }
 }
 
 /// A container of [PathMapEntry]s used to translate a source path in the log
diff --git a/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart b/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
index 037c9b0..a701840 100644
--- a/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
+++ b/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
@@ -32,7 +32,7 @@
     try {
       fields = _parseFields(line);
       if (fields.length < 2) {
-        var readBuffer = this.readBuffer;
+        final readBuffer = this.readBuffer;
         if (readBuffer != null) {
           readBuffer.writeln(fields.length == 1 ? fields[0] : '');
           return null;
diff --git a/pkg/analysis_server/lib/protocol/protocol.dart b/pkg/analysis_server/lib/protocol/protocol.dart
index e9d5c9d..9d15dac 100644
--- a/pkg/analysis_server/lib/protocol/protocol.dart
+++ b/pkg/analysis_server/lib/protocol/protocol.dart
@@ -46,7 +46,7 @@
   Map<String, Object> toJson() {
     var jsonObject = <String, Object>{};
     jsonObject[EVENT] = event;
-    var params = this.params;
+    final params = this.params;
     if (params != null) {
       jsonObject[PARAMS] = params;
     }
@@ -114,7 +114,7 @@
     if (params.isNotEmpty) {
       jsonObject[PARAMS] = params;
     }
-    var clientRequestTime = this.clientRequestTime;
+    final clientRequestTime = this.clientRequestTime;
     if (clientRequestTime != null) {
       jsonObject[CLIENT_REQUEST_TIME] = clientRequestTime;
     }
@@ -505,11 +505,11 @@
   Map<String, Object> toJson() {
     var jsonObject = <String, Object>{};
     jsonObject[ID] = id;
-    var error = this.error;
+    final error = this.error;
     if (error != null) {
       jsonObject[ERROR] = error.toJson();
     }
-    var result = this.result;
+    final result = this.result;
     if (result != null) {
       jsonObject[RESULT] = result;
     }
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 4c5becb..57d87fe 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -1227,7 +1227,7 @@
     initStatus = await refactoring.checkInitialConditions();
     _checkForReset_afterInitialConditions();
     if (refactoring is ExtractLocalRefactoring) {
-      var feedback = this.feedback as ExtractLocalVariableFeedback;
+      final feedback = this.feedback as ExtractLocalVariableFeedback;
       feedback.names = refactoring.names;
       feedback.offsets = refactoring.offsets;
       feedback.lengths = refactoring.lengths;
@@ -1236,7 +1236,7 @@
       feedback.coveringExpressionLengths =
           refactoring.coveringExpressionLengths;
     } else if (refactoring is ExtractMethodRefactoring) {
-      var feedback = this.feedback as ExtractMethodFeedback;
+      final feedback = this.feedback as ExtractMethodFeedback;
       feedback.canCreateGetter = refactoring.canCreateGetter;
       feedback.returnType = refactoring.returnType;
       feedback.names = refactoring.names;
@@ -1255,7 +1255,7 @@
             className: refactoring.className);
       }
     } else if (refactoring is RenameRefactoring) {
-      var feedback = this.feedback as RenameFeedback;
+      final feedback = this.feedback as RenameFeedback;
       feedback.elementKindName = refactoring.elementKindName;
       feedback.oldName = refactoring.oldName;
     }
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index f9d8355..fa51e73 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -364,12 +364,7 @@
         supportsDeprecatedFlag || supportsDeprecatedTag),
     deprecated:
         supportsDeprecatedFlag && declaration.isDeprecated ? true : null,
-    // Relevance is a number, highest being best. LSP does text sort so subtract
-    // from a large number so that a text sort will result in the correct order.
-    // 555 -> 999455
-    //  10 -> 999990
-    //   1 -> 999999
-    sortText: (1000000 - itemRelevance).toString(),
+    sortText: relevanceToSortText(itemRelevance),
     filterText: completion != label
         ? completion
         : null, // filterText uses label if not set
@@ -776,6 +771,22 @@
   }
 }
 
+/// Converts a numeric relevance to a sortable string.
+///
+/// The servers relevance value is a number with highest being best. LSP uses a
+/// a string sort on the `sortText` field. Subtracting the relevance from a large
+/// number will produce text that will sort correctly.
+///
+/// Relevance can be 0, so it's important to subtract from a number like 999
+/// and not 1000 or the 0 relevance items will sort at the top instead of the
+/// bottom.
+///
+/// 555 -> 9999999 - 555 -> 9 999 444
+///  10 -> 9999999 -  10 -> 9 999 989
+///   1 -> 9999999 -   1 -> 9 999 998
+///   0 -> 9999999 -   0 -> 9 999 999
+String relevanceToSortText(int relevance) => (9999999 - relevance).toString();
+
 lsp.Location? searchResultToLocation(
     server.SearchResult result, server.LineInfo? lineInfo) {
   final location = result.location;
@@ -957,12 +968,7 @@
     deprecated: supportsCompletionDeprecatedFlag && suggestion.isDeprecated
         ? true
         : null,
-    // Relevance is a number, highest being best. LSP does text sort so subtract
-    // from a large number so that a text sort will result in the correct order.
-    // 555 -> 999455
-    //  10 -> 999990
-    //   1 -> 999999
-    sortText: (1000000 - suggestion.relevance).toString(),
+    sortText: relevanceToSortText(suggestion.relevance),
     filterText: filterText != label
         ? filterText
         : null, // filterText uses label if not set
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index 08f8fb6..07c4956 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -901,7 +901,7 @@
   /// Send a request, based on the given [parameters]. Return a future that will
   /// complete when a response is received.
   Future<Response> sendRequest(RequestParams parameters) {
-    var channel = this.channel;
+    final channel = this.channel;
     if (channel == null) {
       throw StateError('Cannot send a request to a plugin that has stopped.');
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index e47f4f0..05f7592 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -133,7 +133,7 @@
 
   /// Return the number of arguments in the argument list.
   int _argCount() {
-    var argumentList = this.argumentList;
+    final argumentList = this.argumentList;
     if (argumentList != null) {
       var paren = argumentList.rightParenthesis;
       if (request.target.entity == paren) {
@@ -159,7 +159,7 @@
   /// Return `true` if the caret is preceding an arg where a name could be added
   /// (turning a positional arg into a named arg).
   bool _isAddingLabelToPositional() {
-    var argumentList = this.argumentList;
+    final argumentList = this.argumentList;
     if (argumentList != null) {
       var entity = request.target.entity;
       if (entity is! Expression) {
@@ -194,7 +194,7 @@
   /// Return `true` if the completion target is at the end of the list of
   /// arguments.
   bool _isAppendingToArgList() {
-    var argumentList = this.argumentList;
+    final argumentList = this.argumentList;
     if (argumentList != null) {
       var entity = request.target.entity;
       if (entity == argumentList.rightParenthesis) {
@@ -275,7 +275,7 @@
   /// [_isInsertingToArgListWithNoSynthetic] have been called and both returned
   /// `false`.
   bool _isInsertingToArgListWithSynthetic() {
-    var argumentList = this.argumentList;
+    final argumentList = this.argumentList;
     if (argumentList != null) {
       var entity = request.target.entity;
       if (entity is SimpleIdentifier) {
@@ -295,7 +295,7 @@
   /// Return a list containing the currently specified named arguments.
   List<String> _namedArgs() {
     var namedArgs = <String>[];
-    var argumentList = this.argumentList;
+    final argumentList = this.argumentList;
     if (argumentList != null) {
       for (var arg in argumentList.arguments) {
         if (arg is NamedExpression) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index 66989f9..1ea7a5a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -199,7 +199,8 @@
   }
 
   void _addIncludedSuggestionRelevanceTags(DartCompletionRequestImpl request) {
-    var includedSuggestionRelevanceTags = this.includedSuggestionRelevanceTags!;
+    final includedSuggestionRelevanceTags =
+        this.includedSuggestionRelevanceTags!;
     var location = request.opType.completionLocation;
     if (location != null) {
       var locationTable = elementKindRelevance[location];
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index f6d2263..7da38ea 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -1015,7 +1015,7 @@
 extension on ArgumentList {
   /// Return the [FunctionType], if there is one, for this [ArgumentList].
   FunctionType? get functionType {
-    var parent = this.parent;
+    final parent = this.parent;
     if (parent is InstanceCreationExpression) {
       return parent.constructorName.staticElement?.type;
     } else if (parent is MethodInvocation) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index dafe115..d44cb1a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -56,7 +56,7 @@
         return;
       }
     }
-    var entity = this.entity;
+    final entity = this.entity;
     if (entity == node.rightParenthesis) {
       _addExpressionKeywords(node);
       var previous = node.findPrevious(entity as Token);
@@ -142,7 +142,7 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    var entity = this.entity;
+    final entity = this.entity;
     // Don't suggest class name
     if (entity == node.name) {
       return;
@@ -544,7 +544,7 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    var entity = this.entity;
+    final entity = this.entity;
     // Don't suggest mixin name
     if (entity == node.name) {
       return;
@@ -906,7 +906,7 @@
     if (block == null) {
       return false;
     }
-    var entity = this.entity;
+    final entity = this.entity;
     if (entity is Statement) {
       var entityIndex = block.statements.indexOf(entity);
       if (entityIndex > 0) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index c21bf0b..0c52fb4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -373,7 +373,7 @@
   AstNode? get coveredNode {
     // TODO(brianwilkerson) Consider renaming this to `coveringNode`.
     if (_coveredNode == null) {
-      var diagnostic = this.diagnostic;
+      final diagnostic = this.diagnostic;
       if (diagnostic == null) {
         return null;
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
index 289a537..32499c0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
@@ -46,7 +46,7 @@
     } else {
       var body = node.thisOrAncestorOfType<FunctionBody>();
       if (body != null && body.keyword == null) {
-        var typeProvider = this.typeProvider;
+        final typeProvider = this.typeProvider;
         await builder.addDartFileEdit(file, (builder) {
           builder.convertFunctionFromSyncToAsync(body, typeProvider);
         });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
index 84311ad..cd0bf2a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
@@ -17,27 +17,27 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    AstNode? node = this.node;
-    if (node is SimpleIdentifier) {
-      node = node.parent;
+    AstNode? targetNode = node;
+    if (targetNode is SimpleIdentifier) {
+      targetNode = targetNode.parent;
     }
-    if (node is ConstructorDeclaration) {
-      var node_final = node;
+    if (targetNode is ConstructorDeclaration) {
+      var node_final = targetNode;
       await builder.addDartFileEdit(file, (builder) {
         final offset = node_final.firstTokenAfterCommentAndMetadata.offset;
         builder.addSimpleInsertion(offset, 'const ');
       });
       return;
     }
-    if (node is TypeName) {
-      node = node.parent;
+    if (targetNode is TypeName) {
+      targetNode = targetNode.parent;
     }
-    if (node is ConstructorName) {
-      node = node.parent;
+    if (targetNode is ConstructorName) {
+      targetNode = targetNode.parent;
     }
-    if (node is InstanceCreationExpression) {
-      if (node.keyword == null) {
-        var node_final = node;
+    if (targetNode is InstanceCreationExpression) {
+      if (targetNode.keyword == null) {
+        var node_final = targetNode;
         await builder.addDartFileEdit(file, (builder) {
           builder.addSimpleInsertion(node_final.offset, 'const ');
         });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
index cc3293b..733d4ea 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
@@ -21,7 +21,7 @@
     if (!libraryElement.isNonNullableByDefault) {
       return;
     }
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       var variable = node.parent;
       var variableList = variable?.parent;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
index da82a33..0dd82a1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
@@ -21,7 +21,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     // Prepare the name of the missing parameter.
-    var node = this.node;
+    final node = this.node;
     if (node is! SimpleIdentifier) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
index c3aa42d..84d563c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
@@ -42,7 +42,7 @@
       }
     }
 
-    var diagnostic = this.diagnostic;
+    final diagnostic = this.diagnostic;
     if (diagnostic == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_ne_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_ne_null.dart
index d5facaf..970dedf 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_ne_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_ne_null.dart
@@ -20,7 +20,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     if (unit.featureSet.isEnabled(Feature.non_nullable)) {
-      var node = this.node;
+      final node = this.node;
       if (node is Expression &&
           node.staticType?.nullabilitySuffix == NullabilitySuffix.none) {
         return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_null_check.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_null_check.dart
index 11bf784..33c5944 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_null_check.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_null_check.dart
@@ -23,7 +23,7 @@
       return;
     }
     Expression? target;
-    var coveredNode = this.coveredNode;
+    final coveredNode = this.coveredNode;
     var coveredNodeParent = coveredNode?.parent;
     if (coveredNode is SimpleIdentifier) {
       if (coveredNodeParent is MethodInvocation) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
index 08bd321..8a89c1f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
@@ -27,7 +27,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       var parent = node.parent;
       if (parent is SimpleFormalParameter) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
index 75c187f..0442afb 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
@@ -53,7 +53,7 @@
   }
 
   _NamedExpressionContext? _getNamedParameterNames() {
-    var node = this.node;
+    final node = this.node;
     var namedExpression = node.parent?.parent;
     if (node is SimpleIdentifier &&
         namedExpression is NamedExpression &&
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index 0f81d93..0ec47fc 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -53,7 +53,7 @@
   }
 
   Future<void> _proposeAnnotation(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is Annotation) {
       var name = node.name;
       if (name.staticElement == null) {
@@ -105,7 +105,7 @@
 
   Future<void> _proposeClassOrMixinMember(ChangeBuilder builder,
       Expression? target, _ElementPredicate predicate) async {
-    var node = this.node;
+    final node = this.node;
     var targetIdentifierElement =
         target is Identifier ? target.staticElement : null;
     if (node is SimpleIdentifier) {
@@ -139,7 +139,7 @@
   }
 
   Future<void> _proposeFunction(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       // Prepare the optional import prefix name.
       String? prefixName;
@@ -181,7 +181,7 @@
   }
 
   Future<void> _proposeGetterOrSetter(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       // prepare target
       Expression? target;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not.dart
index e84c81f..b81db26 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not.dart
@@ -21,7 +21,7 @@
     // Find the is expression
     var isExpression = node.thisOrAncestorOfType<IsExpression>();
     if (isExpression == null) {
-      var node = this.node;
+      final node = this.node;
       if (node is PrefixExpression) {
         var operand = node.operand;
         if (operand is ParenthesizedExpression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
index 5e45165..67cfb7d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
@@ -20,7 +20,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleStringLiteral) {
       await _simpleStringLiteral(builder, node);
     } else if (node is StringInterpolation) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
index d8ca1d2..24ba7dd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
@@ -19,7 +19,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is ConditionalExpression &&
         node.offset == errorOffset &&
         node.length == errorLength) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_multiline_string.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_multiline_string.dart
index 51861d9..0807076 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_multiline_string.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_multiline_string.dart
@@ -15,12 +15,12 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
-    if (node is InterpolationElement) {
-      node = node.parent!;
+    var targetNode = node;
+    if (targetNode is InterpolationElement) {
+      targetNode = targetNode.parent!;
     }
-    if (node is SingleStringLiteral) {
-      var literal = node;
+    if (targetNode is SingleStringLiteral) {
+      var literal = targetNode;
       if (!literal.isSynthetic && !literal.isMultiline) {
         await builder.addDartFileEdit(file, (builder) {
           var newQuote = literal.isSingleQuoted ? "'''" : '"""';
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_null_aware.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_null_aware.dart
index 013e4fe..da0f269 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_null_aware.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_null_aware.dart
@@ -25,18 +25,18 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
-    var parent = node.parent;
+    var targetNode = node;
+    var parent = targetNode.parent;
     if (parent is BinaryExpression) {
       var grandParent = parent.parent;
       if (grandParent is ConditionalExpression) {
-        node = grandParent;
+        targetNode = grandParent;
       }
     }
-    if (node is! ConditionalExpression) {
+    if (targetNode is! ConditionalExpression) {
       return;
     }
-    var condition = node.condition.unParenthesized;
+    var condition = targetNode.condition.unParenthesized;
     SimpleIdentifier identifier;
     Expression nullExpression;
     Expression nonNullExpression;
@@ -67,11 +67,11 @@
       // is the save variable being compared to `null`.
       //
       if (condition.operator.type == TokenType.EQ_EQ) {
-        nullExpression = node.thenExpression;
-        nonNullExpression = node.elseExpression;
+        nullExpression = targetNode.thenExpression;
+        nonNullExpression = targetNode.elseExpression;
       } else if (condition.operator.type == TokenType.BANG_EQ) {
-        nonNullExpression = node.thenExpression;
-        nullExpression = node.elseExpression;
+        nonNullExpression = targetNode.thenExpression;
+        nullExpression = targetNode.elseExpression;
       } else {
         return;
       }
@@ -100,9 +100,9 @@
       periodOffset = operator.offset;
 
       await builder.addDartFileEdit(file, (builder) {
-        builder.addDeletion(range.startStart(node, nonNullExpression));
+        builder.addDeletion(range.startStart(targetNode, nonNullExpression));
         builder.addSimpleInsertion(periodOffset, '?');
-        builder.addDeletion(range.endEnd(nonNullExpression, node));
+        builder.addDeletion(range.endEnd(nonNullExpression, targetNode));
       });
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
index a40b1b2..b9020ea 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
@@ -23,12 +23,12 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
-    if (node is StringLiteral) {
-      node = node.parent!;
+    var targetNode = node;
+    if (targetNode is StringLiteral) {
+      targetNode = targetNode.parent!;
     }
-    if (node is ImportDirective) {
-      var importDirective = node;
+    if (targetNode is ImportDirective) {
+      var importDirective = targetNode;
       var uriSource = importDirective.uriSource;
 
       // Ignore if invalid URI.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
index 48a99d7..7b97d09 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
@@ -24,16 +24,16 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
-    if (node is StringLiteral) {
-      node = node.parent!;
+    var targetNode = node;
+    if (targetNode is StringLiteral) {
+      targetNode = targetNode.parent!;
     }
-    if (node is! ImportDirective) {
+    if (targetNode is! ImportDirective) {
       return;
     }
 
     // Ignore if invalid URI.
-    if (node.uriSource == null) {
+    if (targetNode.uriSource == null) {
       return;
     }
 
@@ -45,7 +45,7 @@
 
     Uri importUri;
     try {
-      var uriContent = node.uriContent;
+      var uriContent = targetNode.uriContent;
       if (uriContent == null) {
         return;
       }
@@ -75,7 +75,7 @@
       from: path.dirname(sourceUri.path),
     );
 
-    final node_final = node;
+    final node_final = targetNode;
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleReplacement(
         range.node(node_final.uri).getExpanded(-1),
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
index 833a8db..9c01f35 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
@@ -22,29 +22,29 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    var targetNode = node;
     Element? prefixElement;
     SimpleIdentifier nameNode;
     ArgumentList? arguments;
 
-    if (node is Annotation) {
-      var name = node.name;
-      arguments = node.arguments;
+    if (targetNode is Annotation) {
+      var name = targetNode.name;
+      arguments = targetNode.arguments;
       if (name.staticElement != null || arguments == null) {
         // TODO(brianwilkerson) Consider supporting creating a class when the
         //  arguments are missing by also adding an empty argument list.
         return;
       }
-      node = name;
+      targetNode = name;
     }
-    if (node is SimpleIdentifier) {
-      nameNode = node;
-    } else if (node is PrefixedIdentifier) {
-      prefixElement = node.prefix.staticElement;
+    if (targetNode is SimpleIdentifier) {
+      nameNode = targetNode;
+    } else if (targetNode is PrefixedIdentifier) {
+      prefixElement = targetNode.prefix.staticElement;
       if (prefixElement == null) {
         return;
       }
-      nameNode = node.identifier;
+      nameNode = targetNode.identifier;
     } else {
       return;
     }
@@ -60,7 +60,7 @@
     String? filePath;
     if (prefixElement == null) {
       targetUnit = unit.declaredElement!;
-      var enclosingMember = node.thisOrAncestorMatching((node) =>
+      var enclosingMember = targetNode.thisOrAncestorMatching((node) =>
           node is CompilationUnitMember && node.parent is CompilationUnit);
       if (enclosingMember == null) {
         return;
@@ -111,7 +111,7 @@
         builder.write(suffix);
       });
       if (prefixElement == null) {
-        builder.addLinkedPosition(range.node(node), 'NAME');
+        builder.addLinkedPosition(range.node(targetNode), 'NAME');
       }
     });
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
index a76ce2a..2edd32e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
@@ -95,7 +95,7 @@
 
     CompilationUnitMember? targetNode;
     var target = invocation.realTarget;
-    var utils = this.utils;
+    var utilsForTargetNode = utils;
     if (target is ExtensionOverride) {
       targetElement = target.staticElement;
       if (targetElement is ExtensionElement) {
@@ -152,12 +152,13 @@
       if (targetResolveResult is! ResolvedUnitResult) {
         return;
       }
-      utils = CorrectionUtils(targetResolveResult);
+      utilsForTargetNode = CorrectionUtils(targetResolveResult);
     }
     if (targetElement == null || targetNode == null) {
       return;
     }
-    var targetLocation = utils.prepareNewMethodLocation(targetNode);
+    var targetLocation =
+        utilsForTargetNode.prepareNewMethodLocation(targetNode);
     if (targetLocation == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
index 14c4598..dbc9020 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
@@ -24,7 +24,7 @@
   Future<void> compute(ChangeBuilder builder) async {
     Element? prefixElement;
     SimpleIdentifier nameNode;
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       var parent = node.parent;
       var grandParent = parent?.parent;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart b/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
index 5261db3..ed399ac 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
@@ -54,7 +54,7 @@
       return setsForTests;
     }
     var transformSets = TransformSetManager.instance.forLibrary(library);
-    var overrideSet = this.overrideSet;
+    final overrideSet = this.overrideSet;
     if (overrideSet != null) {
       transformSets =
           transformSets.map((set) => set.applyOverrides(overrideSet)).toList();
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
index 52ed499..b9557d0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
@@ -19,7 +19,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var diagnostic = this.diagnostic;
+    final diagnostic = this.diagnostic;
     if (diagnostic == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_children.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_children.dart
index 1c0f0ca..755c644 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_children.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_children.dart
@@ -18,7 +18,7 @@
     // Find "child: widget" under selection.
     NamedExpression namedExp;
     {
-      var node = this.node;
+      final node = this.node;
       var parent = node.parent;
       var parent2 = parent?.parent;
       if (node is SimpleIdentifier &&
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index 2274c6e..1499ae6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -52,44 +52,44 @@
         ]);
       }
     } else if (_importKind == _ImportKind.forTopLevelVariable) {
-      var node = this.node;
-      if (node is Annotation) {
-        var name = node.name;
+      var targetNode = node;
+      if (targetNode is Annotation) {
+        var name = targetNode.name;
         if (name.staticElement == null) {
-          if (node.arguments != null) {
+          if (targetNode.arguments != null) {
             return;
           }
-          node = name;
+          targetNode = name;
         }
       }
-      if (node is SimpleIdentifier) {
-        var name = node.name;
+      if (targetNode is SimpleIdentifier) {
+        var name = targetNode.name;
         yield* _importLibraryForElement(
             name,
             const [ElementKind.TOP_LEVEL_VARIABLE],
             const [TopLevelDeclarationKind.variable]);
       }
     } else if (_importKind == _ImportKind.forType) {
-      var node = this.node;
-      if (node is Annotation) {
-        var name = node.name;
+      var targetNode = node;
+      if (targetNode is Annotation) {
+        var name = targetNode.name;
         if (name.staticElement == null) {
-          if (node.arguments == null) {
+          if (targetNode.arguments == null) {
             return;
           }
-          node = name;
+          targetNode = name;
         }
       }
-      if (mightBeTypeIdentifier(node)) {
-        var typeName = (node is SimpleIdentifier)
-            ? node.name
-            : (node as PrefixedIdentifier).prefix.name;
+      if (mightBeTypeIdentifier(targetNode)) {
+        var typeName = (targetNode is SimpleIdentifier)
+            ? targetNode.name
+            : (targetNode as PrefixedIdentifier).prefix.name;
         yield* _importLibraryForElement(
             typeName,
             const [ElementKind.CLASS, ElementKind.FUNCTION_TYPE_ALIAS],
             const [TopLevelDeclarationKind.type]);
-      } else if (mightBeImplicitConstructor(node)) {
-        var typeName = (node as SimpleIdentifier).name;
+      } else if (mightBeImplicitConstructor(targetNode)) {
+        var typeName = (targetNode as SimpleIdentifier).name;
         yield* _importLibraryForElement(typeName, const [ElementKind.CLASS],
             const [TopLevelDeclarationKind.type]);
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/inline_invocation.dart b/pkg/analysis_server/lib/src/services/correction/dart/inline_invocation.dart
index c2e0711..c784ce4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/inline_invocation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/inline_invocation.dart
@@ -29,7 +29,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is! SimpleIdentifier || node.name != 'add') {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/insert_semicolon.dart b/pkg/analysis_server/lib/src/services/correction/dart/insert_semicolon.dart
index b50d526..c2bf057 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/insert_semicolon.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/insert_semicolon.dart
@@ -14,7 +14,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var diagnostic = this.diagnostic;
+    final diagnostic = this.diagnostic;
     if (diagnostic == null) {
       return;
     }
@@ -32,7 +32,7 @@
   }
 
   bool _isAwaitNode() {
-    var node = this.node;
+    final node = this.node;
     return node is SimpleIdentifier && node.name == 'await';
   }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
index 015acb8..8b97a1d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
@@ -16,7 +16,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is SimpleIdentifier) {
       var parent = node.parent;
       if (parent is AssignmentExpression &&
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
index a2c636a..374d184 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
@@ -23,7 +23,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is! SimpleIdentifier) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
index 3ff063a..aba8e02 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
@@ -19,7 +19,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     var parent = node.parent;
     var grandParent = parent?.parent;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
index 20b6cac..2f2107d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
@@ -20,7 +20,7 @@
       return;
     }
 
-    var node = this.node;
+    final node = this.node;
     if (node is! Expression) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_not_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_not_final.dart
index 0ac959f..f3f1695 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_not_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_not_final.dart
@@ -23,7 +23,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is! SimpleIdentifier) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
index 3c37c95..9f349e7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
@@ -16,7 +16,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var coveredNode = this.coveredNode;
+    final coveredNode = this.coveredNode;
     var parent = coveredNode?.parent;
 
     if (coveredNode is Expression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_interpolation_braces.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_interpolation_braces.dart
index d63185f..c5ed780 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_interpolation_braces.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_interpolation_braces.dart
@@ -18,7 +18,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is InterpolationExpression) {
       var right = node.rightBracket;
       if (right != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
index cf13f53..236ac60 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
@@ -15,7 +15,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is MethodDeclaration) {
       // Support for the analyzer error.
       var name = node.name;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_question_mark.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_question_mark.dart
index 96e0280..7039b72 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_question_mark.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_question_mark.dart
@@ -18,17 +18,17 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    AstNode? node = this.node;
-    if (node is VariableDeclaration) {
-      var parent = node.parent;
+    AstNode? targetNode = node;
+    if (targetNode is VariableDeclaration) {
+      var parent = targetNode.parent;
       if (parent is VariableDeclarationList) {
-        node = parent.type;
+        targetNode = parent.type;
       } else {
         return;
       }
     }
-    if (node is TypeName) {
-      var questionMark = node.question;
+    if (targetNode is TypeName) {
+      var questionMark = targetNode.question;
       if (questionMark == null) {
         return;
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_this_expression.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_this_expression.dart
index 68f1350..c9c41ae 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_this_expression.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_this_expression.dart
@@ -18,7 +18,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     if (node is ConstructorFieldInitializer) {
       var thisKeyword = node.thisKeyword;
       if (thisKeyword != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
index e8db9a3..fda7453 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
@@ -18,12 +18,12 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    AstNode? node = this.node;
-    if (node is ConstructorName) {
-      node = node.parent;
+    AstNode? targetNode = node;
+    if (targetNode is ConstructorName) {
+      targetNode = targetNode.parent;
     }
-    if (node is InstanceCreationExpression) {
-      final keyword = node.keyword;
+    if (targetNode is InstanceCreationExpression) {
+      final keyword = targetNode.keyword;
       if (keyword != null) {
         await builder.addDartFileEdit(file, (builder) {
           builder.addSimpleReplacement(range.token(keyword), 'const');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_conditional_assignment.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_conditional_assignment.dart
index 9d69d50..acdd6a4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_conditional_assignment.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_conditional_assignment.dart
@@ -19,7 +19,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var node = this.node;
+    final node = this.node;
     var ifStatement =
         node is IfStatement ? node : node.thisOrAncestorOfType<IfStatement>();
     if (ifStatement == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
index c46f159..b18b4ef 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
@@ -67,6 +67,7 @@
       builder.addInsertion(offset, (builder) {
         // TODO(brianwilkerson) Conditionally write a type annotation instead of
         //  'var' when we're able to discover user preferences.
+        // TODO(brianwilkerson) Consider writing `final` rather than `var`.
         builder.write('var ');
         builder.write(fieldName);
         builder.write(' = this.');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/wrap_in_future.dart b/pkg/analysis_server/lib/src/services/correction/dart/wrap_in_future.dart
index c1892ff..cbe9212 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/wrap_in_future.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/wrap_in_future.dart
@@ -19,7 +19,7 @@
     // Extract the information needed to build the edit.
     //
     Expression? expression;
-    var node = this.node;
+    final node = this.node;
     if (node is ReturnStatement) {
       expression = node.expression;
     } else if (node is Expression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
index 86dcc3b..1631742 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
@@ -73,7 +73,7 @@
       return _TypeArgumentData(typeArguments, parent.argumentList.offset);
     } else if (parent is MethodDeclaration) {
       // invalid_override
-      var extendedType = this.extendedType;
+      final extendedType = this.extendedType;
       if (extendedType != null && !extendedType.validate(context)) {
         return null;
       }
@@ -130,7 +130,7 @@
 
     void writeParameter(DartEditBuilder builder) {
       builder.write(name);
-      var extendedType = this.extendedType;
+      final extendedType = this.extendedType;
       if (extendedType != null) {
         builder.write(' extends ');
         extendedType.writeOn(builder, context);
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
index 729692e..1072578 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
@@ -114,7 +114,7 @@
   /// Return the parameter of this method whose name matches the given [name],
   /// or `null` if there is no such parameter.
   FormalParameter? parameterNamed(String name) {
-    var parameters = this.parameters;
+    final parameters = this.parameters;
     if (parameters != null) {
       for (var parameter in parameters.parameters) {
         if (parameter.declaredElement?.name == name) {
diff --git a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
index 320aae7..9f1c68a 100644
--- a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
@@ -92,7 +92,7 @@
   @override
   void visitDoStatement(DoStatement node) {
     super.visitDoStatement(node);
-    var selectedNodes = this.selectedNodes;
+    final selectedNodes = this.selectedNodes;
     if (_contains(selectedNodes, node.body)) {
       invalidSelection(
           "Operation not applicable to a 'do' statement's body and expression.");
@@ -104,7 +104,7 @@
     super.visitForStatement(node);
     var forLoopParts = node.forLoopParts;
     if (forLoopParts is ForParts) {
-      var selectedNodes = this.selectedNodes;
+      final selectedNodes = this.selectedNodes;
       bool containsInit;
       if (forLoopParts is ForPartsWithExpression) {
         containsInit = _contains(selectedNodes, forLoopParts.initialization);
@@ -132,7 +132,7 @@
   @override
   void visitSwitchStatement(SwitchStatement node) {
     super.visitSwitchStatement(node);
-    var selectedNodes = this.selectedNodes;
+    final selectedNodes = this.selectedNodes;
     List<SwitchMember> switchMembers = node.members;
     for (var selectedNode in selectedNodes) {
       if (switchMembers.contains(selectedNode)) {
@@ -146,7 +146,7 @@
   @override
   void visitTryStatement(TryStatement node) {
     super.visitTryStatement(node);
-    var firstSelectedNode = this.firstSelectedNode;
+    final firstSelectedNode = this.firstSelectedNode;
     if (firstSelectedNode != null) {
       if (firstSelectedNode == node.body ||
           firstSelectedNode == node.finallyBlock) {
@@ -169,7 +169,7 @@
   @override
   void visitWhileStatement(WhileStatement node) {
     super.visitWhileStatement(node);
-    var selectedNodes = this.selectedNodes;
+    final selectedNodes = this.selectedNodes;
     if (_contains(selectedNodes, node.condition) &&
         _contains(selectedNodes, node.body)) {
       invalidSelection(
diff --git a/pkg/analysis_server/lib/src/services/correction/status.dart b/pkg/analysis_server/lib/src/services/correction/status.dart
index d148d34..9909658 100644
--- a/pkg/analysis_server/lib/src/services/correction/status.dart
+++ b/pkg/analysis_server/lib/src/services/correction/status.dart
@@ -55,7 +55,7 @@
   /// Returns the message of the [RefactoringProblem] with highest severity;
   /// may be `null` if no problems.
   String? get message {
-    var problem = this.problem;
+    final problem = this.problem;
     if (problem == null) {
       return null;
     }
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index f9c3c66..257fa24 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -440,7 +440,7 @@
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     // constant node
     var constDeclVName =
-        addNodeAndFacts(schema.CONSTANT_KIND, element: node.declaredElement!);
+        addNodeAndFacts(schema.CONSTANT_KIND, element: node.declaredElement);
 
     // anchor- defines/binding, defines
     addAnchorEdgesContainingEdge(
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
index 7d7ebbe..d0990db 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
@@ -168,15 +168,15 @@
   /// Begin a request to pre-load the package name list.
   void beginPackageNamePreload() {
     // If first time, try to read from disk.
-    var packageCache = this.packageCache;
-    if (packageCache == null) {
-      packageCache ??= readDiskCache() ?? PackageDetailsCache.empty();
-      this.packageCache = packageCache;
+    var cache = packageCache;
+    if (cache == null) {
+      cache ??= readDiskCache() ?? PackageDetailsCache.empty();
+      packageCache = cache;
     }
 
     // If there is no queued request, initialize one when the current cache expires.
     _nextPackageNameListRequestTimer ??=
-        Timer(packageCache.cacheTimeRemaining, _fetchFromServer);
+        Timer(cache.cacheTimeRemaining, _fetchFromServer);
   }
 
   /// Gets the cached package details for package [packageName].
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 16ca48b..2432c5b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -121,7 +121,7 @@
   Future<SourceChange> createChange() {
     var change = SourceChange(refactoringName);
     // prepare occurrences
-    List<SourceRange> occurrences;
+    late final List<SourceRange> occurrences;
     if (extractAll) {
       occurrences = this.occurrences;
     } else {
@@ -130,7 +130,7 @@
     occurrences.sort((a, b) => a.offset - b.offset);
     // If the whole expression of a statement is selected, like '1 + 2',
     // then convert it into a variable declaration statement.
-    var singleExpression = this.singleExpression;
+    final singleExpression = this.singleExpression;
     if (singleExpression != null &&
         singleExpression.parent is ExpressionStatement &&
         occurrences.length == 1) {
@@ -490,7 +490,7 @@
 
     // prepare selection
     String? selectionSource;
-    var singleExpression = this.singleExpression;
+    final singleExpression = this.singleExpression;
     if (singleExpression != null) {
       var tokens = TokenUtils.getNodeTokens(singleExpression);
       selectionSource = _encodeExpressionTokens(singleExpression, tokens);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index eb2745e..6fe772e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -93,7 +93,7 @@
 
   /// Fills [elements] with [Element]s to rename.
   Future _prepareElements() async {
-    var element = this.element;
+    final element = this.element;
     if (element is ParameterElement && element.isNamed) {
       elements = await getHierarchyNamedParameters(searchEngine, element);
     } else {
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
index 92403c0..af573e9 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
@@ -117,7 +117,7 @@
 
 extension MethodDeclarationExtension on MethodDeclaration {
   Token? get propertyKeywordGet {
-    var propertyKeyword = this.propertyKeyword;
+    final propertyKeyword = this.propertyKeyword;
     return propertyKeyword != null && propertyKeyword.keyword == Keyword.GET
         ? propertyKeyword
         : null;
@@ -126,7 +126,7 @@
 
 extension VariableDeclarationListExtension on VariableDeclarationList {
   Token? get finalKeyword {
-    var keyword = this.keyword;
+    final keyword = this.keyword;
     return keyword != null && keyword.keyword == Keyword.FINAL ? keyword : null;
   }
 }
diff --git a/pkg/analysis_server/lib/src/utilities/request_statistics.dart b/pkg/analysis_server/lib/src/utilities/request_statistics.dart
index 3921409..7cdf234 100644
--- a/pkg/analysis_server/lib/src/utilities/request_statistics.dart
+++ b/pkg/analysis_server/lib/src/utilities/request_statistics.dart
@@ -218,7 +218,7 @@
   _RequestStatisticsItem(this.name, {this.timeValue});
 
   Map<String, Object> toJson() {
-    var timeValue = this.timeValue;
+    final timeValue = this.timeValue;
     if (timeValue != null) {
       return {
         'name': name,
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 827f06d..4585df2 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -379,8 +379,8 @@
       mismatches.add(simpleDescription('is not a map'));
       return;
     }
-    var requiredFields = this.requiredFields;
-    var optionalFields = this.optionalFields;
+    final requiredFields = this.requiredFields;
+    final optionalFields = this.optionalFields;
     if (requiredFields != null) {
       requiredFields.forEach((String key, Matcher valueMatcher) {
         if (!item.containsKey(key)) {
diff --git a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
index 5b8f242..2a9e372 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -123,7 +123,7 @@
         CodeActionKind('quickfix.create.file'), "Create file 'newfile.dart'")!;
 
     final edit = fixAction.edit!;
-    expect(edit.documentChanges!, isNotNull);
+    expect(edit.documentChanges, isNotNull);
 
     // Ensure applying the changes creates the file and with the expected content.
     final contents = {
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index ce08941..896b994 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -72,6 +72,22 @@
     expect(result, isNull);
   }
 
+  void test_relevanceToSortText() {
+    // The expected order is the same as from the highest relevance.
+    final expectedOrder =
+        [999999, 1000, 100, 1, 0].map(lsp.relevanceToSortText).toList();
+
+    // Test with inputs in both directions to ensure the results are actually
+    // unique and sorted.
+    final results1 =
+        [999999, 1000, 100, 1, 0].map(lsp.relevanceToSortText).toList()..sort();
+    final results2 =
+        [0, 1, 100, 1000, 999999].map(lsp.relevanceToSortText).toList()..sort();
+
+    expect(results1, equals(expectedOrder));
+    expect(results2, equals(expectedOrder));
+  }
+
   Future<void> test_tabStopsInSnippets_contains() async {
     var result = lsp.buildSnippetStringWithTabStops('a, b, c', [3, 1]);
     expect(result, equals(r'a, ${0:b}, c'));
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 9515144..144cf47 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -799,7 +799,7 @@
 }
 ''');
     await findElementReferences('ppp;', false);
-    var searchElement = this.searchElement!;
+    final searchElement = this.searchElement!;
     expect(searchElement.kind, ElementKind.PREFIX);
     expect(searchElement.name, 'ppp');
     expect(searchElement.location!.startLine, 1);
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 281b5f0..4a0f551 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -1760,11 +1760,11 @@
     var status = await refactoring.checkInitialConditions();
     assertRefactoringStatusOK(status);
     // configure
-    var deleteSource = this.deleteSource;
+    final deleteSource = this.deleteSource;
     if (deleteSource != null) {
       refactoring.deleteSource = deleteSource;
     }
-    var inlineAll = this.inlineAll;
+    final inlineAll = this.inlineAll;
     if (inlineAll != null) {
       refactoring.inlineAll = inlineAll;
     }
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index 53d4588..1c7bb82 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -110,7 +110,7 @@
         null);
 
     server.createAnalysisServer(channel);
-    errorNotifier.server = server.analysisServer!;
+    errorNotifier.server = server.analysisServer;
     AnalysisEngine.instance.instrumentationService = errorNotifier;
 
     return server;
diff --git a/pkg/analysis_server/test/stress/utilities/git.dart b/pkg/analysis_server/test/stress/utilities/git.dart
index 05cc2a3..5db46e7 100644
--- a/pkg/analysis_server/test/stress/utilities/git.dart
+++ b/pkg/analysis_server/test/stress/utilities/git.dart
@@ -287,8 +287,8 @@
 
   /// Return `true` if this diff applies to a file with the given name.
   bool isFor(String fileName) {
-    var srcPath = this.srcPath;
-    var dstPath = this.dstPath;
+    final srcPath = this.srcPath;
+    final dstPath = this.dstPath;
     return (srcPath != null && fileName == path.basename(srcPath)) ||
         (dstPath != null && fileName == path.basename(dstPath));
   }
diff --git a/pkg/analysis_server/test/utils/test_support.dart b/pkg/analysis_server/test/utils/test_support.dart
index a917926..a791cfb 100644
--- a/pkg/analysis_server/test/utils/test_support.dart
+++ b/pkg/analysis_server/test/utils/test_support.dart
@@ -80,7 +80,7 @@
     if (message != null && error.message != message) {
       return false;
     }
-    var messageContains = this.messageContains;
+    final messageContains = this.messageContains;
     if (messageContains != null &&
         error.message.contains(messageContains) != true) {
       return false;
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 596d170..99eea81 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -436,7 +436,7 @@
   /// Perform any operations required in order to revert computing the kind of
   /// completions represented by this metrics collector.
   void disable() {
-    var disableFunction = this.disableFunction;
+    final disableFunction = this.disableFunction;
     if (disableFunction != null) {
       disableFunction();
     }
@@ -445,7 +445,7 @@
   /// Perform any initialization required in order to compute the kind of
   /// completions represented by this metrics collector.
   void enable() {
-    var enableFunction = this.enableFunction;
+    final enableFunction = this.enableFunction;
     if (enableFunction != null) {
       enableFunction();
     }
diff --git a/pkg/analysis_server/tool/instrumentation/page/log_page.dart b/pkg/analysis_server/tool/instrumentation/page/log_page.dart
index 6853dc1..9288cf5 100644
--- a/pkg/analysis_server/tool/instrumentation/page/log_page.dart
+++ b/pkg/analysis_server/tool/instrumentation/page/log_page.dart
@@ -224,7 +224,7 @@
   /// Write the entries in the instrumentation log to the given [sink].
   void _writeLeftColumn(StringSink sink) {
     var length = entries.length;
-    var pageLength = this.pageLength;
+    final pageLength = this.pageLength;
     var pageEnd =
         pageLength == null ? length : math.min(pageStart + pageLength, length);
     //
diff --git a/pkg/analysis_server/tool/spec/api.dart b/pkg/analysis_server/tool/spec/api.dart
index 95fddb4f..8e6696e 100644
--- a/pkg/analysis_server/tool/spec/api.dart
+++ b/pkg/analysis_server/tool/spec/api.dart
@@ -202,7 +202,7 @@
           value: '$domainName.$event')
     ];
 
-    var params = this.params;
+    final params = this.params;
     if (params != null) {
       fields.add(TypeObjectField('params', params, null));
     }
@@ -275,7 +275,7 @@
           value: '$domainName.$method')
     ];
 
-    var params = this.params;
+    final params = this.params;
     if (params != null) {
       fields.add(TypeObjectField('params', params, null));
     }
@@ -292,7 +292,7 @@
           optional: true)
     ];
 
-    var result = this.result;
+    final result = this.result;
     if (result != null) {
       fields.add(TypeObjectField('result', result, null));
     }
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 3bf1331..51e3bc8 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -23,7 +23,7 @@
 String? _getStandardStateLocation() {
   final Map<String, String> env = io.Platform.environment;
   if (env.containsKey('ANALYZER_STATE_LOCATION_OVERRIDE')) {
-    return env['ANALYZER_STATE_LOCATION_OVERRIDE']!;
+    return env['ANALYZER_STATE_LOCATION_OVERRIDE'];
   }
 
   final home = io.Platform.isWindows ? env['LOCALAPPDATA'] : env['HOME'];
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index 85fe63e..fe3dce6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/analysis/dependency/node.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
 
 /// Collector of information about external nodes referenced by a node.
 ///
@@ -202,11 +201,13 @@
 
     if (assignmentType != TokenType.EQ &&
         assignmentType != TokenType.QUESTION_QUESTION_EQ) {
-      var operatorType = operatorFromCompoundAssignment(assignmentType);
-      _recordClassMemberReference(
-        targetType: node.readType,
-        name: operatorType.lexeme,
-      );
+      var operatorType = assignmentType.binaryOperatorOfCompoundAssignment;
+      if (operatorType != null) {
+        _recordClassMemberReference(
+          targetType: node.readType,
+          name: operatorType.lexeme,
+        );
+      }
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index c15e091..e728899 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -94,7 +94,7 @@
     String? classMemberName;
     if (element.enclosingElement is ClassElement ||
         element.enclosingElement is ExtensionElement) {
-      classMemberName = element.name!;
+      classMemberName = element.name;
       element = element.enclosingElement!;
     }
 
diff --git a/pkg/analyzer/lib/src/dart/ast/token.dart b/pkg/analyzer/lib/src/dart/ast/token.dart
index d1753398..17d6198 100644
--- a/pkg/analyzer/lib/src/dart/ast/token.dart
+++ b/pkg/analyzer/lib/src/dart/ast/token.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/token.dart';
-
 export 'package:_fe_analyzer_shared/src/scanner/token.dart'
     show
         BeginToken,
@@ -17,36 +15,3 @@
         SyntheticStringToken,
         SyntheticToken,
         TokenClass;
-
-/// Return the binary operator that is invoked by the given compound assignment
-/// [operator]. Throw [StateError] if the assignment [operator] does not
-/// correspond to a binary operator.
-TokenType operatorFromCompoundAssignment(TokenType operator) {
-  if (operator == TokenType.AMPERSAND_EQ) {
-    return TokenType.AMPERSAND;
-  } else if (operator == TokenType.BAR_EQ) {
-    return TokenType.BAR;
-  } else if (operator == TokenType.CARET_EQ) {
-    return TokenType.CARET;
-  } else if (operator == TokenType.GT_GT_EQ) {
-    return TokenType.GT_GT;
-  } else if (operator == TokenType.GT_GT_GT_EQ) {
-    return TokenType.GT_GT_GT;
-  } else if (operator == TokenType.LT_LT_EQ) {
-    return TokenType.LT_LT;
-  } else if (operator == TokenType.MINUS_EQ) {
-    return TokenType.MINUS;
-  } else if (operator == TokenType.PERCENT_EQ) {
-    return TokenType.PERCENT;
-  } else if (operator == TokenType.PLUS_EQ) {
-    return TokenType.PLUS;
-  } else if (operator == TokenType.SLASH_EQ) {
-    return TokenType.SLASH;
-  } else if (operator == TokenType.STAR_EQ) {
-    return TokenType.STAR;
-  } else if (operator == TokenType.TILDE_SLASH_EQ) {
-    return TokenType.TILDE_SLASH;
-  } else {
-    throw StateError('Unknown assignment operator: $operator');
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index b975efd..840b7b8 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
@@ -28,7 +27,7 @@
 
   AssignmentExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
@@ -177,7 +176,10 @@
       return;
     }
 
-    var binaryOperatorType = operatorFromCompoundAssignment(operatorType);
+    var binaryOperatorType = operatorType.binaryOperatorOfCompoundAssignment;
+    if (binaryOperatorType == null) {
+      return;
+    }
     var methodName = binaryOperatorType.lexeme;
 
     var result = _typePropertyResolver.resolve(
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index 45c9c66..a838b86 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -85,7 +85,7 @@
   @override
   void visitFunctionExpression(FunctionExpression node) {
     if (node.parent is! FunctionDeclaration) {
-      usedElements.addElement(node.declaredElement!);
+      usedElements.addElement(node.declaredElement);
     }
     super.visitFunctionExpression(node);
   }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 0036512..aefa6c7 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -467,10 +467,10 @@
         target = target.function;
       } else if (target is MethodInvocation) {
         argumentList = target.argumentList;
-        target = target.target!;
+        target = target.target;
       } else if (target is PropertyAccess) {
         argumentList = null;
-        target = target.target!;
+        target = target.target;
       } else {
         break;
       }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index cedd048..3e45b52 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -561,7 +561,7 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     var outerEnum = _enclosingEnum;
     try {
-      _enclosingEnum = node.declaredElement!;
+      _enclosingEnum = node.declaredElement;
       _duplicateDefinitionVerifier.checkEnum(node);
       super.visitEnumDeclaration(node);
     } finally {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2ccfebc..b7c8023 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1221,7 +1221,7 @@
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement!;
+    _enclosingFunction = node.declaredElement;
 
     flowAnalysis!.topLevelDeclaration_enter(node, node.parameters, node.body);
     flowAnalysis!.executableDeclaration_enter(node, node.parameters, false);
@@ -1510,7 +1510,7 @@
   @override
   void visitFunctionExpression(covariant FunctionExpressionImpl node) {
     var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement!;
+    _enclosingFunction = node.declaredElement;
 
     if (node.parent is FunctionDeclaration) {
       _functionExpressionResolver.resolve(node);
@@ -1711,7 +1711,7 @@
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
     var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement!;
+    _enclosingFunction = node.declaredElement;
 
     flowAnalysis!.topLevelDeclaration_enter(node, node.parameters, node.body);
     flowAnalysis!.executableDeclaration_enter(node, node.parameters, false);
diff --git a/pkg/analyzer/lib/src/lint/pub.dart b/pkg/analyzer/lib/src/lint/pub.dart
index db19bb6..d68ecdf 100644
--- a/pkg/analyzer/lib/src/lint/pub.dart
+++ b/pkg/analyzer/lib/src/lint/pub.dart
@@ -303,7 +303,7 @@
   @override
   Source get source => (resourceProvider ?? PhysicalResourceProvider.INSTANCE)
       .getFile(span.sourceUrl!.toFilePath())
-      .createSource(span.sourceUrl!);
+      .createSource(span.sourceUrl);
 
   @override
   String toString() => '$text';
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 5d78a69..ecb1d5b 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -62,7 +62,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ClassElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
     element.accessors; // create elements
     element.constructors; // create elements
     element.methods; // create elements
@@ -91,7 +91,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ClassElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
 
     _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
@@ -119,7 +119,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ConstructorElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
     element.parameters; // create elements
 
     scope = TypeParameterScope(scope, element.typeParameters);
@@ -153,7 +153,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ExtensionElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
 
     _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
@@ -208,7 +208,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ExecutableElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
     element.parameters; // create elements
 
     _createTypeParameterElements(
@@ -238,7 +238,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as TypeAliasElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
 
     _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(outerScope, element.typeParameters);
@@ -247,7 +247,7 @@
     node.typeParameters?.accept(this);
 
     var function = element.aliasedElement as GenericFunctionTypeElementImpl;
-    reference = function.reference!;
+    reference = function.reference;
     function.parameters; // create elements
     node.parameters.accept(this);
 
@@ -291,7 +291,7 @@
 
     var element = GenericFunctionTypeElementImpl.forLinkedNode(
       unitReference.element as CompilationUnitElementImpl,
-      reference!,
+      reference,
       node,
     );
     element.parameters; // create elements
@@ -318,7 +318,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as TypeAliasElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
 
     _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(outerScope, element.typeParameters);
@@ -349,7 +349,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as ExecutableElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
     element.parameters; // create elements
 
     _createTypeParameterElements(element, node.typeParameters);
@@ -372,7 +372,7 @@
     var outerReference = reference;
 
     var element = node.declaredElement as MixinElementImpl;
-    reference = element.reference!;
+    reference = element.reference;
     element.accessors; // create elements
     element.constructors; // create elements
     element.methods; // create elements
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 1852dbe..ab12ee4 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1636,7 +1636,7 @@
     expect(result.units, hasLength(1));
     expect(result.units![0].path, testFile);
     expect(result.units![0].content, content);
-    expect(result.units![0].unit!, isNotNull);
+    expect(result.units![0].unit, isNotNull);
     expect(result.units![0].errors, isEmpty);
   }
 
@@ -1689,7 +1689,7 @@
     expect(result.uri.toString(), 'package:test/test.dart');
     expect(result.state, ResultState.VALID);
     expect(result.content, content);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
 
     var f = result.unit!.declarations[0] as FunctionDeclaration;
@@ -2135,7 +2135,7 @@
 
     var result = await resultFuture;
     expect(result.path, testFile);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
   }
 
   test_getResult_twoPendingFutures() async {
@@ -2150,7 +2150,7 @@
     ResolvedUnitResult result2 = await future2;
     expect(result2, same(result1));
     expect(result1.path, testFile);
-    expect(result1.unit!, isNotNull);
+    expect(result1.unit, isNotNull);
   }
 
   @deprecated
@@ -3158,7 +3158,7 @@
     // A and B references.
     ResolvedUnitResult result = await driver.getResultValid(c);
     expect(result.errors, isNotEmpty);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
   }
 
   test_part_getUnitElement2_afterLibrary() async {
@@ -3536,7 +3536,7 @@
     // analyze the delayed parts.
     ResolvedUnitResult result = allResults.lastWhere((r) => r.path == c);
     expect(result.errors, isEmpty);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
   }
 
   test_removeFile_changeFile_implicitlyAnalyzed() async {
@@ -3786,7 +3786,7 @@
     expect(result.path, testFile);
     expect(result.uri.toString(), 'package:test/test.dart');
     expect(result.content, content);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
 
     var f = result.unit!.declarations[0] as FunctionDeclaration;
@@ -3811,7 +3811,7 @@
     expect(allResults, hasLength(3));
     ResolvedUnitResult result = allResults[0];
     expect(result.path, b);
-    expect(result.unit!, isNotNull);
+    expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 5b351a0..ca2b79e 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -324,7 +324,7 @@
   }) {
     assertElement(node, element);
     assertType(node.extendedType, extendedType);
-    assertElementTypeStrings(node.typeArgumentTypes!, typeArgumentTypes);
+    assertElementTypeStrings(node.typeArgumentTypes, typeArgumentTypes);
   }
 
   void assertFunctionExpressionInvocation(
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index b65d7e4..933f6f9 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -569,7 +569,7 @@
     assertBinaryExpression(
       findNode.binary('=='),
       element: elementMatcher(
-        objectElement.getMethod('==')!,
+        objectElement.getMethod('=='),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'bool',
@@ -619,7 +619,7 @@
     assertSimpleIdentifier(
       findNode.simple('toString'),
       element: elementMatcher(
-        objectElement.getMethod('toString')!,
+        objectElement.getMethod('toString'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'String Function()',
@@ -636,7 +636,7 @@
     assertSimpleIdentifier(
       findNode.simple('hashCode'),
       element: elementMatcher(
-        objectElement.getGetter('hashCode')!,
+        objectElement.getGetter('hashCode'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
index f76dd2b..64accd6 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
@@ -504,7 +504,7 @@
       writeElement: findElement.setter('x'),
       writeType: 'int',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
@@ -517,7 +517,7 @@
       writeElement: findElement.setter('y'),
       writeType: 'int?',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
@@ -560,7 +560,7 @@
       writeElement: findElement.setter('x'),
       writeType: 'int',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int?',
@@ -573,7 +573,7 @@
       writeElement: findElement.setter('x'),
       writeType: 'int',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
@@ -607,7 +607,7 @@
       writeElement: findElement.parameter('x'),
       writeType: 'int',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
@@ -620,7 +620,7 @@
       writeElement: findElement.parameter('y'),
       writeType: 'int?',
       operatorElement: elementMatcher(
-        numElement.getMethod('+')!,
+        numElement.getMethod('+'),
         isLegacy: isNullSafetySdkAndLegacyLibrary,
       ),
       type: 'int',
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index ce28397..b1bfca5 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -583,7 +583,7 @@
       writeNode(e.name);
       if (e.constructorName != null) {
         buffer.write('.');
-        writeNode(e.constructorName!);
+        writeNode(e.constructorName);
       }
       if (e.arguments != null) {
         writeList('(', ')', e.arguments!.arguments, ', ', writeNode,
@@ -598,7 +598,7 @@
       writeNode(e.condition);
       if (e.message != null) {
         buffer.write(', ');
-        writeNode(e.message!);
+        writeNode(e.message);
       }
       buffer.write(')');
     } else if (e is BinaryExpression) {
@@ -623,13 +623,13 @@
       writeNode(e.type);
       if (e.name != null) {
         buffer.write('.');
-        writeNode(e.name!);
+        writeNode(e.name);
       }
     } else if (e is DoubleLiteral) {
       buffer.write(e.value);
     } else if (e is GenericFunctionType) {
       if (e.returnType != null) {
-        writeNode(e.returnType!);
+        writeNode(e.returnType);
         buffer.write(' ');
       }
       buffer.write('Function');
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index 861711b..c951716 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -21,7 +21,6 @@
   Dart2jsConstantEvaluator(
       ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
       {Map<String, String> environment: const {},
-      bool enableTripleShift = false,
       bool supportReevaluationForTesting: false,
       ir.EvaluationMode evaluationMode})
       : _supportReevaluationForTesting = supportReevaluationForTesting,
@@ -31,7 +30,7 @@
             environment,
             typeEnvironment,
             new ErrorReporter(reportError),
-            enableTripleShift: enableTripleShift,
+            enableTripleShift: true,
             evaluationMode: evaluationMode);
 
   @override
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 4d42c97..a1c35bf 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -1170,7 +1170,6 @@
       reportLocatedMessage(reporter, message, context);
     },
         environment: _environment.toMap(),
-        enableTripleShift: options.enableTripleShift,
         evaluationMode: options.useLegacySubtyping
             ? ir.EvaluationMode.weak
             : ir.EvaluationMode.strong);
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index a677ae9..d568cea 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -817,7 +817,6 @@
       reportLocatedMessage(reporter, message, context);
     },
         environment: _environment.toMap(),
-        enableTripleShift: options.enableTripleShift,
         evaluationMode: options.useLegacySubtyping
             ? ir.EvaluationMode.weak
             : ir.EvaluationMode.strong);
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index ce9cddb..7f0403f 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -133,11 +133,6 @@
       fe.isExperimentEnabled(fe.ExperimentalFlag.nonNullable,
           explicitExperimentalFlags: explicitExperimentalFlags);
 
-  /// Whether `--enable-experiment=triple-shift` is provided.
-  bool get enableTripleShift =>
-      fe.isExperimentEnabled(fe.ExperimentalFlag.tripleShift,
-          explicitExperimentalFlags: explicitExperimentalFlags);
-
   /// A possibly null state object for kernel compilation.
   fe.InitializedCompilerState kernelInitializedCompilerState;
 
diff --git a/pkg/compiler/test/codegen/codegen_test_helper.dart b/pkg/compiler/test/codegen/codegen_test_helper.dart
index e4f9c73..f28f670 100644
--- a/pkg/compiler/test/codegen/codegen_test_helper.dart
+++ b/pkg/compiler/test/codegen/codegen_test_helper.dart
@@ -33,7 +33,7 @@
       shards: 2,
       directory: 'data',
       skip: skip,
-      options: [Flags.soundNullSafety, '--enable-experiment=triple-shift']);
+      options: [Flags.soundNullSafety]);
 }
 
 runTests2(List<String> args, [int shardIndex]) {
diff --git a/pkg/compiler/test/codegen/shift_right_unsigned_test.dart b/pkg/compiler/test/codegen/shift_right_unsigned_test.dart
index d4d6d2c..8b5dcc0 100644
--- a/pkg/compiler/test/codegen/shift_right_unsigned_test.dart
+++ b/pkg/compiler/test/codegen/shift_right_unsigned_test.dart
@@ -132,7 +132,6 @@
           entry: 'main',
           methodName: 'foo',
           disableTypeInference: false,
-          enableTripleShift: true,
           soundNullSafety: true,
           check: checkerForAbsentPresent(test));
     }
diff --git a/pkg/compiler/test/helpers/compiler_helper.dart b/pkg/compiler/test/helpers/compiler_helper.dart
index 514b1ca..463d171 100644
--- a/pkg/compiler/test/helpers/compiler_helper.dart
+++ b/pkg/compiler/test/helpers/compiler_helper.dart
@@ -44,7 +44,6 @@
     bool disableInlining: true,
     bool disableTypeInference: true,
     bool omitImplicitChecks: true,
-    bool enableTripleShift: false, // TODO(30890): remove.
     bool enableVariance: false,
     void check(String generatedEntry),
     bool returnAll: false,
@@ -66,9 +65,6 @@
   if (disableInlining) {
     options.add(Flags.disableInlining);
   }
-  if (enableTripleShift) {
-    options.add('${Flags.enableLanguageExperiments}=triple-shift');
-  }
   if (enableVariance) {
     options.add('${Flags.enableLanguageExperiments}=variance');
   }
diff --git a/pkg/compiler/test/inference/data/shift_right_unsigned.dart b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
index a229111..52390cc 100644
--- a/pkg/compiler/test/inference/data/shift_right_unsigned.dart
+++ b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
@@ -21,20 +21,20 @@
 test1() {
   int a = 1234;
   int b = 2;
-  return a /*invoke: [exact=JSUInt31]*/>>> b;
+  return a /*invoke: [exact=JSUInt31]*/ >>> b;
 }
 
 /*member: test2:[subclass=JSUInt32]*/
 test2() {
-  return g1 /*invoke: [subclass=JSInt]*/>>> g1;
+  return g1 /*invoke: [subclass=JSInt]*/ >>> g1;
 }
 
 /*member: test3:[subclass=JSUInt32]*/
 test3() {
-  return g1 /*invoke: [subclass=JSInt]*/>>> 1;
+  return g1 /*invoke: [subclass=JSInt]*/ >>> 1;
 }
 
 /*member: test4:[exact=JSUInt31]*/
 test4() {
-  return 10 /*invoke: [exact=JSUInt31]*/>>> g1;
+  return 10 /*invoke: [exact=JSUInt31]*/ >>> g1;
 }
diff --git a/pkg/compiler/test/inference/inference_test_helper.dart b/pkg/compiler/test/inference/inference_test_helper.dart
index b51b0e6..33565b7 100644
--- a/pkg/compiler/test/inference/inference_test_helper.dart
+++ b/pkg/compiler/test/inference/inference_test_helper.dart
@@ -32,7 +32,7 @@
     await checkTests(dataDir, const TypeMaskDataComputer(),
         forUserLibrariesOnly: true,
         args: args,
-        options: [stopAfterTypeInference, '--enable-experiment=triple-shift'],
+        options: [stopAfterTypeInference],
         testedConfigs: allInternalConfigs,
         skip: skip,
         shardIndex: shardIndex ?? 0,
diff --git a/pkg/compiler/test/optimization/optimization_test.dart b/pkg/compiler/test/optimization/optimization_test.dart
index baf38d0..c89e863 100644
--- a/pkg/compiler/test/optimization/optimization_test.dart
+++ b/pkg/compiler/test/optimization/optimization_test.dart
@@ -27,7 +27,7 @@
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     bool strict = args.contains('-s');
     await checkTests(dataDir, new OptimizationDataComputer(strict: strict),
-        options: [Flags.disableInlining, '--enable-experiment=triple-shift'],
+      options: [Flags.disableInlining],
         args: args);
   });
 }
diff --git a/tools/VERSION b/tools/VERSION
index 8450a34..1f35b2e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 40
+PRERELEASE 41
 PRERELEASE_PATCH 0
\ No newline at end of file
