CQ. ErrorReporter, use atOffset() instead of reportErrorForOffset()

Change-Id: I506f71d1e7aa95f1c62fca1746e4a86c78720336
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/353782
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
index 9a8b876..2a238d4 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
@@ -80,8 +80,14 @@
         }
         accessors.add(accessor);
       } else {
-        errorReporter.reportErrorForOffset(TransformSetErrorCode.wrongToken,
-            token.offset + delta, token.length, ['.', token.kind.displayName]);
+        errorReporter.atOffset(
+          offset: token.offset + delta,
+          length: token.length,
+          errorCode: TransformSetErrorCode.wrongToken,
+          arguments: ['.', token.kind.displayName],
+          contextMessages: null,
+          data: null,
+        );
         return null;
       }
     }
@@ -106,8 +112,14 @@
     var expression = _parseLogicalAndExpression();
     if (currentIndex < _tokens.length) {
       var token = _tokens[currentIndex];
-      errorReporter.reportErrorForOffset(TransformSetErrorCode.unexpectedToken,
-          token.offset + delta, token.length, [token.kind.displayName]);
+      errorReporter.atOffset(
+        offset: token.offset + delta,
+        length: token.length,
+        errorCode: TransformSetErrorCode.unexpectedToken,
+        arguments: [token.kind.displayName],
+        contextMessages: null,
+        data: null,
+      );
       return null;
     }
     return expression;
@@ -140,16 +152,25 @@
         offset = last.offset;
         length = last.length;
       }
-      errorReporter.reportErrorForOffset(TransformSetErrorCode.missingToken,
-          offset + delta, length, [validKindsDisplayString()]);
+      errorReporter.atOffset(
+        offset: offset + delta,
+        length: length,
+        errorCode: TransformSetErrorCode.missingToken,
+        arguments: [validKindsDisplayString()],
+        contextMessages: null,
+        data: null,
+      );
       return null;
     }
     if (!validKinds.contains(token.kind)) {
-      errorReporter.reportErrorForOffset(
-          TransformSetErrorCode.wrongToken,
-          token.offset + delta,
-          token.length,
-          [validKindsDisplayString(), token.kind.displayName]);
+      errorReporter.atOffset(
+        offset: token.offset + delta,
+        length: token.length,
+        errorCode: TransformSetErrorCode.wrongToken,
+        arguments: [validKindsDisplayString(), token.kind.displayName],
+        contextMessages: null,
+        data: null,
+      );
       return null;
     }
     return token;
@@ -217,8 +238,14 @@
       advance();
       return TypeArgumentAccessor(argumentIndex);
     } else {
-      errorReporter.reportErrorForOffset(TransformSetErrorCode.unknownAccessor,
-          token.offset + delta, token.length, [identifier]);
+      errorReporter.atOffset(
+        offset: token.offset + delta,
+        length: token.length,
+        errorCode: TransformSetErrorCode.unknownAccessor,
+        arguments: [identifier],
+        contextMessages: null,
+        data: null,
+      );
       return null;
     }
   }
@@ -293,11 +320,14 @@
         var variableName = token.lexeme;
         var generator = variableScope.lookup(variableName);
         if (generator == null) {
-          errorReporter.reportErrorForOffset(
-              TransformSetErrorCode.undefinedVariable,
-              token.offset + delta,
-              token.length,
-              [variableName]);
+          errorReporter.atOffset(
+            offset: token.offset + delta,
+            length: token.length,
+            errorCode: TransformSetErrorCode.undefinedVariable,
+            arguments: [variableName],
+            contextMessages: null,
+            data: null,
+          );
           return null;
         }
         return VariableReference(generator);
@@ -323,8 +353,14 @@
       offset = token.offset + delta;
       length = token.length;
     }
-    errorReporter.reportErrorForOffset(
-        TransformSetErrorCode.expectedPrimary, offset, length);
+    errorReporter.atOffset(
+      offset: offset,
+      length: length,
+      errorCode: TransformSetErrorCode.expectedPrimary,
+      arguments: null,
+      contextMessages: null,
+      data: null,
+    );
     return null;
   }
 }
@@ -454,8 +490,14 @@
 
   /// Report the presence of an invalid character at the given [offset].
   Null _reportInvalidCharacter(int offset) {
-    errorReporter.reportErrorForOffset(TransformSetErrorCode.invalidCharacter,
-        offset + delta, 1, [content.substring(offset, offset + 1)]);
+    errorReporter.atOffset(
+      offset: offset + delta,
+      length: 1,
+      errorCode: TransformSetErrorCode.invalidCharacter,
+      arguments: [content.substring(offset, offset + 1)],
+      contextMessages: null,
+      data: null,
+    );
     return null;
   }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
index 04ec134..d60b2f0 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
@@ -190,10 +190,14 @@
       }
       var endIndex = template.indexOf(_closeComponent, variableStart + 2);
       if (endIndex < 0) {
-        errorReporter.reportErrorForOffset(
-            TransformSetErrorCode.missingTemplateEnd,
-            templateOffset + variableStart,
-            2);
+        errorReporter.atOffset(
+          offset: templateOffset + variableStart,
+          length: 2,
+          errorCode: TransformSetErrorCode.missingTemplateEnd,
+          arguments: null,
+          contextMessages: null,
+          data: null,
+        );
         // Ignore the invalid component, treating it as if it extended to the
         // end of the template.
         return components;
@@ -201,11 +205,14 @@
         var name = template.substring(variableStart + 2, endIndex).trim();
         var generator = variableScope.lookup(name);
         if (generator == null) {
-          errorReporter.reportErrorForOffset(
-              TransformSetErrorCode.undefinedVariable,
-              templateOffset + template.indexOf(name, variableStart),
-              name.length,
-              [name]);
+          errorReporter.atOffset(
+            offset: templateOffset + template.indexOf(name, variableStart),
+            length: name.length,
+            errorCode: TransformSetErrorCode.undefinedVariable,
+            arguments: [name],
+            contextMessages: null,
+            data: null,
+          );
           // Ignore the invalid component.
         } else {
           components.add(TemplateVariable(generator));
@@ -254,8 +261,14 @@
       var span = e.span;
       var offset = span?.start.offset ?? 0;
       var length = span?.length ?? 0;
-      errorReporter.reportErrorForOffset(
-          TransformSetErrorCode.yamlSyntaxError, offset, length, [e.message]);
+      errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: TransformSetErrorCode.yamlSyntaxError,
+        arguments: [e.message],
+        contextMessages: null,
+        data: null,
+      );
     }
     return null;
   }
@@ -266,8 +279,14 @@
   void _reportError(TransformSetErrorCode code, YamlNode node,
       [List<String> arguments = const []]) {
     var span = node.span;
-    errorReporter.reportErrorForOffset(
-        code, span.start.offset, span.length, arguments);
+    errorReporter.atOffset(
+      offset: span.start.offset,
+      length: span.length,
+      errorCode: code,
+      arguments: arguments,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   /// Report that the value represented by the [node] does not have the
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 68caab2..6613bca 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -180,8 +180,14 @@
     //  declaration. This might make it easier to be consistent.
     if (constructor.name != null) {
       var offset = constructor.returnType.offset;
-      reportErrorForOffset(
-          code, offset, constructor.name!.end - offset, arguments);
+      atOffset(
+        offset: offset,
+        length: constructor.name!.end - offset,
+        errorCode: code,
+        arguments: arguments,
+        contextMessages: null,
+        data: null,
+      );
     } else {
       atNode(
         constructor.returnType,
@@ -212,6 +218,7 @@
 
   /// Report an error with the given [errorCode] and [arguments]. The location
   /// of the error is specified by the given [offset] and [length].
+  @Deprecated('Use atOffset() instead')
   void reportErrorForOffset(
     ErrorCode errorCode,
     int offset,
@@ -234,7 +241,14 @@
   /// of the error is specified by the given [span].
   void reportErrorForSpan(ErrorCode errorCode, SourceSpan span,
       [List<Object>? arguments]) {
-    reportErrorForOffset(errorCode, span.start.offset, span.length, arguments);
+    atOffset(
+      offset: span.start.offset,
+      length: span.length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   /// Report an error with the given [errorCode] and [arguments]. The [token] is
@@ -268,7 +282,14 @@
   @Deprecated('Use reportErrorForNode(), it will convert types as well')
   void reportTypeErrorForNode(
       ErrorCode errorCode, AstNode node, List<Object> arguments) {
-    reportErrorForOffset(errorCode, node.offset, node.length, arguments);
+    atOffset(
+      offset: node.offset,
+      length: node.length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   /// Convert all [Element]s in the [arguments] into their display strings.
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index e5521bd..cb8da4d 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -276,12 +276,13 @@
         switch (result) {
           case InvalidConstant():
             if (!result.avoidReporting) {
-              _errorReporter.reportErrorForOffset(
-                result.errorCode,
-                result.offset,
-                result.length,
-                result.arguments,
-                result.contextMessages,
+              _errorReporter.atOffset(
+                offset: result.offset,
+                length: result.length,
+                errorCode: result.errorCode,
+                arguments: result.arguments,
+                contextMessages: result.contextMessages,
+                data: null,
               );
             }
           case DartObjectImpl():
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 61cb894..2958f19 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -581,12 +581,13 @@
   Constant evaluateAndReportInvalidConstant(AstNode node) {
     var result = evaluateConstant(node);
     if (result case InvalidConstant(avoidReporting: false)) {
-      _errorReporter.reportErrorForOffset(
-        result.errorCode,
-        result.offset,
-        result.length,
-        result.arguments,
-        result.contextMessages,
+      _errorReporter.atOffset(
+        offset: result.offset,
+        length: result.length,
+        errorCode: result.errorCode,
+        arguments: result.arguments,
+        contextMessages: result.contextMessages,
+        data: null,
       );
     }
     return result;
@@ -1946,12 +1947,13 @@
       // interaction with g3 more elegantly.
       case InvalidConstant(isUnresolved: true):
         if (!expressionValue.avoidReporting) {
-          _errorReporter.reportErrorForOffset(
-            expressionValue.errorCode,
-            expressionValue.offset,
-            expressionValue.length,
-            expressionValue.arguments,
-            expressionValue.contextMessages,
+          _errorReporter.atOffset(
+            offset: expressionValue.offset,
+            length: expressionValue.length,
+            errorCode: expressionValue.errorCode,
+            arguments: expressionValue.arguments,
+            contextMessages: expressionValue.contextMessages,
+            data: null,
           );
         }
         return ConstantEvaluationEngine._unresolvedObject(
diff --git a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
index 44dfc0f..9133efa 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -125,7 +125,14 @@
           ? WarningCode.UNNECESSARY_NULL_COMPARISON_FALSE
           : WarningCode.UNNECESSARY_NULL_COMPARISON_TRUE;
       var offset = start.offset;
-      _errorReporter.reportErrorForOffset(errorCode, offset, end.end - offset);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: end.end - offset,
+        errorCode: errorCode,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
     }
 
     if (left is SimpleIdentifierImpl && right is NullLiteralImpl) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
index ea00ba7..9bf1ac3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -106,11 +106,11 @@
         return extension.asResolutionResult;
       },
       (noneMoreSpecific) {
-        _errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS,
-          nameEntity.offset,
-          nameEntity.length,
-          [
+        _errorReporter.atOffset(
+          offset: nameEntity.offset,
+          length: nameEntity.length,
+          errorCode: CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS,
+          arguments: [
             name,
             noneMoreSpecific.map((e) {
               var name = e.extension.name;
@@ -121,6 +121,8 @@
               return "unnamed extension on '$type'";
             }).commaSeparatedWithAnd,
           ],
+          contextMessages: null,
+          data: null,
         );
         return ResolutionResult.ambiguous;
       },
diff --git a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index 90fe457..2feb377 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -356,11 +356,13 @@
       _ErrorHelper(errorReporter).reportNewWithNonType(node);
     } else {
       node.type = InvalidTypeImpl.instance;
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.NOT_A_TYPE,
-        importPrefix.offset,
-        nameToken.end - importPrefix.offset,
-        ['${importPrefix.name.lexeme}.${nameToken.lexeme}'],
+      errorReporter.atOffset(
+        offset: importPrefix.offset,
+        length: nameToken.end - importPrefix.offset,
+        errorCode: CompileTimeErrorCode.NOT_A_TYPE,
+        arguments: ['${importPrefix.name.lexeme}.${nameToken.lexeme}'],
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -413,19 +415,25 @@
         var errorRange = _ErrorHelper._getErrorRange(node);
         var constructorUsage = parent.parent;
         if (constructorUsage is InstanceCreationExpression) {
-          errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode
+          errorReporter.atOffset(
+            offset: errorRange.offset,
+            length: errorRange.length,
+            errorCode: CompileTimeErrorCode
                 .INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER,
-            errorRange.offset,
-            errorRange.length,
+            arguments: null,
+            contextMessages: null,
+            data: null,
           );
         } else if (constructorUsage is ConstructorDeclaration &&
             constructorUsage.redirectedConstructor == parent) {
-          errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode
+          errorReporter.atOffset(
+            offset: errorRange.offset,
+            length: errorRange.length,
+            errorCode: CompileTimeErrorCode
                 .REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER,
-            errorRange.offset,
-            errorRange.length,
+            arguments: null,
+            contextMessages: null,
+            data: null,
           );
         } else {
           throw UnimplementedError('${constructorUsage.runtimeType}');
@@ -450,10 +458,13 @@
       }
       if (errorCode != null) {
         var errorRange = _ErrorHelper._getErrorRange(node);
-        errorReporter.reportErrorForOffset(
-          errorCode,
-          errorRange.offset,
-          errorRange.length,
+        errorReporter.atOffset(
+          offset: errorRange.offset,
+          length: errorRange.length,
+          errorCode: errorCode,
+          arguments: null,
+          contextMessages: null,
+          data: null,
         );
         hasErrorReported = true;
         return InvalidTypeImpl.instance;
@@ -485,13 +496,15 @@
       var instanceCreation = constructorName.parent;
       if (instanceCreation is InstanceCreationExpression) {
         final errorRange = _getErrorRange(node, skipImportPrefix: true);
-        errorReporter.reportErrorForOffset(
-          instanceCreation.isConst
+        errorReporter.atOffset(
+          offset: errorRange.offset,
+          length: errorRange.length,
+          errorCode: instanceCreation.isConst
               ? CompileTimeErrorCode.CONST_WITH_NON_TYPE
               : CompileTimeErrorCode.NEW_WITH_NON_TYPE,
-          errorRange.offset,
-          errorRange.length,
-          [node.name2.lexeme],
+          arguments: [node.name2.lexeme],
+          contextMessages: null,
+          data: null,
         );
         return true;
       }
@@ -506,33 +519,39 @@
 
     if (node.name2.lexeme == 'boolean') {
       final errorRange = _getErrorRange(node, skipImportPrefix: true);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
 
     if (_isTypeInCatchClause(node)) {
       final errorRange = _getErrorRange(node);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
 
     if (_isTypeInAsExpression(node)) {
       final errorRange = _getErrorRange(node);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.CAST_TO_NON_TYPE,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.CAST_TO_NON_TYPE,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
@@ -540,18 +559,22 @@
     if (_isTypeInIsExpression(node)) {
       final errorRange = _getErrorRange(node);
       if (element != null) {
-        errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE,
-          errorRange.offset,
-          errorRange.length,
-          [node.name2.lexeme],
+        errorReporter.atOffset(
+          offset: errorRange.offset,
+          length: errorRange.length,
+          errorCode: CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE,
+          arguments: [node.name2.lexeme],
+          contextMessages: null,
+          data: null,
         );
       } else {
-        errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME,
-          errorRange.offset,
-          errorRange.length,
-          [node.name2.lexeme],
+        errorReporter.atOffset(
+          offset: errorRange.offset,
+          length: errorRange.length,
+          errorCode: CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME,
+          arguments: [node.name2.lexeme],
+          contextMessages: null,
+          data: null,
         );
       }
       return;
@@ -559,22 +582,26 @@
 
     if (_isRedirectingConstructor(node)) {
       final errorRange = _getErrorRange(node);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.REDIRECT_TO_NON_CLASS,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.REDIRECT_TO_NON_CLASS,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
 
     if (_isTypeInTypeArgumentList(node)) {
       final errorRange = _getErrorRange(node);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
@@ -607,11 +634,13 @@
 
     if (element != null) {
       final errorRange = _getErrorRange(node);
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.NOT_A_TYPE,
-        errorRange.offset,
-        errorRange.length,
-        [node.name2.lexeme],
+      errorReporter.atOffset(
+        offset: errorRange.offset,
+        length: errorRange.length,
+        errorCode: CompileTimeErrorCode.NOT_A_TYPE,
+        arguments: [node.name2.lexeme],
+        contextMessages: null,
+        data: null,
       );
       return;
     }
@@ -625,11 +654,13 @@
     }
 
     final errorRange = _getErrorRange(node);
-    errorReporter.reportErrorForOffset(
-      CompileTimeErrorCode.UNDEFINED_CLASS,
-      errorRange.offset,
-      errorRange.length,
-      [node.name2.lexeme],
+    errorReporter.atOffset(
+      offset: errorRange.offset,
+      length: errorRange.length,
+      errorCode: CompileTimeErrorCode.UNDEFINED_CLASS,
+      arguments: [node.name2.lexeme],
+      contextMessages: null,
+      data: null,
     );
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index a9ed833..2c39d6c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -372,7 +372,14 @@
     var offset = leftBracket.offset;
     var length = rightBracket.end - offset;
 
-    errorReporter.reportErrorForOffset(errorCode, offset, length, arguments);
+    errorReporter.atOffset(
+      offset: offset,
+      length: length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   PropertyElementResolverResult _resolve({
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index e1de80e..91f306d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -1708,7 +1708,14 @@
     final firstToken = namedType.importPrefix?.name ?? namedType.name2;
     final offset = firstToken.offset;
     final length = namedType.name2.end - offset;
-    _errorReporter.reportErrorForOffset(errorCode, offset, length);
+    _errorReporter.atOffset(
+      offset: offset,
+      length: length,
+      errorCode: errorCode,
+      arguments: null,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   /// Resolve the types in the given list of type names.
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index de97fea..0e107ef 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -1083,10 +1083,13 @@
       SyntacticEntity endEntity,
     ) {
       var offset = startEntity.offset;
-      _errorReporter.reportErrorForOffset(
-        errorCode,
-        offset,
-        endEntity.end - offset,
+      _errorReporter.atOffset(
+        offset: offset,
+        length: endEntity.end - offset,
+        errorCode: errorCode,
+        arguments: null,
+        contextMessages: null,
+        data: null,
       );
     }
 
@@ -1112,10 +1115,13 @@
       SyntacticEntity endEntity,
     ) {
       var offset = startEntity.offset;
-      _errorReporter.reportErrorForOffset(
-        errorCode,
-        offset,
-        endEntity.end - offset,
+      _errorReporter.atOffset(
+        offset: offset,
+        length: endEntity.end - offset,
+        errorCode: errorCode,
+        arguments: null,
+        contextMessages: null,
+        data: null,
       );
     }
 
@@ -1747,11 +1753,14 @@
       }
       var errorEntity = node.errorEntity;
 
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_USE_OF_INTERNAL_MEMBER,
-          errorEntity.offset,
-          errorEntity.length,
-          [element.displayName]);
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: WarningCode.INVALID_USE_OF_INTERNAL_MEMBER,
+        arguments: [element.displayName],
+        contextMessages: null,
+        data: null,
+      );
     }
 
     _checkForOtherInvalidAccess(node, element);
@@ -1793,11 +1802,13 @@
         node = nameToken;
       }
 
-      _errorReporter.reportErrorForOffset(
-        WarningCode.INVALID_USE_OF_INTERNAL_MEMBER,
-        node.offset,
-        node.length,
-        [name],
+      _errorReporter.atOffset(
+        offset: node.offset,
+        length: node.length,
+        errorCode: WarningCode.INVALID_USE_OF_INTERNAL_MEMBER,
+        arguments: [name],
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -1863,26 +1874,35 @@
       return;
     }
     if (hasProtected) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_USE_OF_PROTECTED_MEMBER,
-          errorEntity.offset,
-          errorEntity.length,
-          [name, definingClass.source!.uri]);
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: WarningCode.INVALID_USE_OF_PROTECTED_MEMBER,
+        arguments: [name, definingClass.source!.uri],
+        contextMessages: null,
+        data: null,
+      );
     }
     if (isVisibleForTemplateApplied) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER,
-          errorEntity.offset,
-          errorEntity.length,
-          [name, definingClass.source!.uri]);
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER,
+        arguments: [name, definingClass.source!.uri],
+        contextMessages: null,
+        data: null,
+      );
     }
 
     if (hasVisibleForTesting) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER,
-          errorEntity.offset,
-          errorEntity.length,
-          [name, definingClass.source!.uri]);
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: WarningCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER,
+        arguments: [name, definingClass.source!.uri],
+        contextMessages: null,
+        data: null,
+      );
     }
 
     if (hasVisibleForOverriding) {
@@ -1897,11 +1917,14 @@
         }
       }
       if (!validOverride) {
-        _errorReporter.reportErrorForOffset(
-            WarningCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER,
-            errorEntity.offset,
-            errorEntity.length,
-            [name]);
+        _errorReporter.atOffset(
+          offset: errorEntity.offset,
+          length: errorEntity.length,
+          errorCode: WarningCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER,
+          arguments: [name],
+          contextMessages: null,
+          data: null,
+        );
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 6bedb5a..5f385fb 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -125,17 +125,19 @@
           // always named, so we can safely assume
           // `_thisMember.enclosingElement3.name` and
           // `superMember.enclosingElement3.name` are non-`null`.
-          errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_OVERRIDE,
-            errorNode.offset,
-            errorNode.length,
-            [
+          errorReporter.atOffset(
+            offset: errorNode.offset,
+            length: errorNode.length,
+            errorCode: CompileTimeErrorCode.INVALID_OVERRIDE,
+            arguments: [
               _thisMember.name,
               _thisMember.enclosingElement.name!,
               _thisMember.type,
               superMember.enclosingElement.name!,
               superMember.type,
             ],
+            contextMessages: null,
+            data: null,
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index b9ae8164..b5c805d 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -234,10 +234,22 @@
             doEnd = body.leftBracket.end;
             whileOffset = body.rightBracket.offset;
           }
-          _errorReporter.reportErrorForOffset(
-              WarningCode.DEAD_CODE, doOffset, doEnd - doOffset);
-          _errorReporter.reportErrorForOffset(
-              WarningCode.DEAD_CODE, whileOffset, whileEnd - whileOffset);
+          _errorReporter.atOffset(
+            offset: doOffset,
+            length: doEnd - doOffset,
+            errorCode: WarningCode.DEAD_CODE,
+            arguments: null,
+            contextMessages: null,
+            data: null,
+          );
+          _errorReporter.atOffset(
+            offset: whileOffset,
+            length: whileEnd - whileOffset,
+            errorCode: WarningCode.DEAD_CODE,
+            arguments: null,
+            contextMessages: null,
+            data: null,
+          );
           offset = parent.semicolon.next!.offset;
           if (parent.hasBreakStatement) {
             offset = node.end;
@@ -257,8 +269,14 @@
 
         var length = node.end - offset;
         if (length > 0) {
-          _errorReporter.reportErrorForOffset(
-              WarningCode.DEAD_CODE, offset, length);
+          _errorReporter.atOffset(
+            offset: offset,
+            length: length,
+            errorCode: WarningCode.DEAD_CODE,
+            arguments: null,
+            contextMessages: null,
+            data: null,
+          );
         }
       }
 
@@ -272,11 +290,13 @@
       (first, last, errorCode, arguments) {
         var offset = first.offset;
         var length = last.end - offset;
-        _errorReporter.reportErrorForOffset(
-          errorCode,
-          offset,
-          length,
-          arguments,
+        _errorReporter.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: errorCode,
+          arguments: arguments,
+          contextMessages: null,
+          data: null,
         );
         _deadCatchClauseRanges.add(SourceRange(offset, length));
       },
@@ -362,8 +382,14 @@
       var beginToken = updaters.beginToken;
       var endToken = updaters.endToken;
       if (beginToken != null && endToken != null) {
-        _errorReporter.reportErrorForOffset(WarningCode.DEAD_CODE,
-            beginToken.offset, endToken.end - beginToken.offset);
+        _errorReporter.atOffset(
+          offset: beginToken.offset,
+          length: endToken.end - beginToken.offset,
+          errorCode: WarningCode.DEAD_CODE,
+          arguments: null,
+          contextMessages: null,
+          data: null,
+        );
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index 2fead05..df58dba 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -345,13 +345,15 @@
 
     message = message?.trim();
     if (message == null || message.isEmpty || message == '.') {
-      _errorReporter.reportErrorForOffset(
-        _isLibraryInWorkspacePackage(library)
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: _isLibraryInWorkspacePackage(library)
             ? HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE
             : HintCode.DEPRECATED_MEMBER_USE,
-        errorEntity.offset,
-        errorEntity.length,
-        [displayName],
+        arguments: [displayName],
+        contextMessages: null,
+        data: null,
       );
     } else {
       if (!message.endsWith('.') &&
@@ -359,13 +361,15 @@
           !message.endsWith('!')) {
         message = '$message.';
       }
-      _errorReporter.reportErrorForOffset(
-        _isLibraryInWorkspacePackage(library)
+      _errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.length,
+        errorCode: _isLibraryInWorkspacePackage(library)
             ? HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE
             : HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE,
-        errorEntity.offset,
-        errorEntity.length,
-        [displayName, message],
+        arguments: [displayName, message],
+        contextMessages: null,
+        data: null,
       );
     }
   }
diff --git a/pkg/analyzer/lib/src/error/doc_comment_verifier.dart b/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
index e000af3..a9fb851 100644
--- a/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
@@ -42,10 +42,13 @@
     }
     var configurations = docImport.import.configurations;
     if (configurations.isNotEmpty) {
-      _errorReporter.reportErrorForOffset(
-        WarningCode.DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS,
-        configurations.first.offset,
-        configurations.last.end - configurations.first.offset,
+      _errorReporter.atOffset(
+        offset: configurations.first.offset,
+        length: configurations.last.end - configurations.first.offset,
+        errorCode: WarningCode.DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS,
+        arguments: null,
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -58,22 +61,26 @@
     if (positionalArgumentCount < requiredCount) {
       var gap = requiredCount - positionalArgumentCount;
       if (gap == 1) {
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_MISSING_ONE_ARGUMENT,
-          tag.offset,
-          tag.end - tag.offset,
-          [tag.type.name, required.last.name],
+        _errorReporter.atOffset(
+          offset: tag.offset,
+          length: tag.end - tag.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_MISSING_ONE_ARGUMENT,
+          arguments: [tag.type.name, required.last.name],
+          contextMessages: null,
+          data: null,
         );
       } else if (gap == 2) {
         var missingArguments = [
           required[required.length - 2].name,
           required.last.name,
         ];
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS,
-          tag.offset,
-          tag.end - tag.offset,
-          [tag.type.name, ...missingArguments],
+        _errorReporter.atOffset(
+          offset: tag.offset,
+          length: tag.end - tag.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS,
+          arguments: [tag.type.name, ...missingArguments],
+          contextMessages: null,
+          data: null,
         );
       } else if (gap == 3) {
         var missingArguments = [
@@ -81,11 +88,13 @@
           required[required.length - 2].name,
           required.last.name,
         ];
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS,
-          tag.offset,
-          tag.end - tag.offset,
-          [tag.type.name, ...missingArguments],
+        _errorReporter.atOffset(
+          offset: tag.offset,
+          length: tag.end - tag.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS,
+          arguments: [tag.type.name, ...missingArguments],
+          contextMessages: null,
+          data: null,
         );
       }
     }
@@ -99,21 +108,25 @@
     if (positionalArgumentCount > requiredCount) {
       var errorOffset = tag.positionalArguments[requiredCount].offset;
       var errorLength = tag.positionalArguments.last.end - errorOffset;
-      _errorReporter.reportErrorForOffset(
-        WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS,
-        errorOffset,
-        errorLength,
-        [tag.type.name, positionalArgumentCount, requiredCount],
+      _errorReporter.atOffset(
+        offset: errorOffset,
+        length: errorLength,
+        errorCode: WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS,
+        arguments: [tag.type.name, positionalArgumentCount, requiredCount],
+        contextMessages: null,
+        data: null,
       );
     }
 
     for (var namedArgument in tag.namedArguments) {
       if (!tag.type.namedParameters.containsNamed(namedArgument.name)) {
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT,
-          namedArgument.offset,
-          namedArgument.end - namedArgument.offset,
-          [tag.type.name, namedArgument.name],
+        _errorReporter.atOffset(
+          offset: namedArgument.offset,
+          length: namedArgument.end - namedArgument.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT,
+          arguments: [tag.type.name, namedArgument.name],
+          contextMessages: null,
+          data: null,
         );
       }
     }
@@ -128,11 +141,13 @@
       var argument = tag.positionalArguments[i];
 
       void reportWrongFormat() {
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT,
-          argument.offset,
-          argument.end - argument.offset,
-          [parameter.name, parameter.expectedFormat.displayString],
+        _errorReporter.atOffset(
+          offset: argument.offset,
+          length: argument.end - argument.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT,
+          arguments: [parameter.name, parameter.expectedFormat.displayString],
+          contextMessages: null,
+          data: null,
         );
       }
 
diff --git a/pkg/analyzer/lib/src/error/ignore_validator.dart b/pkg/analyzer/lib/src/error/ignore_validator.dart
index ec1500a..1fc844e 100644
--- a/pkg/analyzer/lib/src/error/ignore_validator.dart
+++ b/pkg/analyzer/lib/src/error/ignore_validator.dart
@@ -126,15 +126,23 @@
     for (var ignoredElement in duplicated) {
       if (ignoredElement is DiagnosticName) {
         var name = ignoredElement.name;
-        _errorReporter.reportErrorForOffset(WarningCode.DUPLICATE_IGNORE,
-            ignoredElement.offset, name.length, [name]);
+        _errorReporter.atOffset(
+          offset: ignoredElement.offset,
+          length: name.length,
+          errorCode: WarningCode.DUPLICATE_IGNORE,
+          arguments: [name],
+          contextMessages: null,
+          data: null,
+        );
         list.remove(ignoredElement);
       } else if (ignoredElement is DiagnosticType) {
-        _errorReporter.reportErrorForOffset(
-          WarningCode.DUPLICATE_IGNORE,
-          ignoredElement.offset,
-          ignoredElement.length,
-          [ignoredElement.type],
+        _errorReporter.atOffset(
+          offset: ignoredElement.offset,
+          length: ignoredElement.length,
+          errorCode: WarningCode.DUPLICATE_IGNORE,
+          arguments: [ignoredElement.type],
+          contextMessages: null,
+          data: null,
         );
         list.remove(ignoredElement);
       }
diff --git a/pkg/analyzer/lib/src/error/language_version_override_verifier.dart b/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
index 86fd85f..aee08be 100644
--- a/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
+++ b/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
@@ -186,27 +186,39 @@
     // language version override comment.
 
     if (slashCount > 2) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES,
-          offset,
-          length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
       return false;
     }
 
     if (!atSignPresent) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN,
-          offset,
-          length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
       return false;
     }
 
     if (possibleDart != 'dart') {
       // The 4 characters after `@` are "dart", but in the wrong case.
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE,
-          offset,
-          length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
       return false;
     }
 
@@ -214,20 +226,38 @@
         comment.codeUnitAt(dartVersionSeparatorStartIndex) != 0x3D) {
       // The separator between "@dart" and the version number is either not
       // present, or is not a single "=" character.
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS, offset, length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
       return false;
     }
 
     if (containsInvalidVersionNumberPrefix) {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX, offset, length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
       return false;
     }
 
     void reportInvalidNumber() {
-      _errorReporter.reportErrorForOffset(
-          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER, offset, length);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER,
+        arguments: null,
+        contextMessages: null,
+        data: null,
+      );
     }
 
     // Nothing preceding the version number makes this comment invalid. Check
@@ -259,10 +289,15 @@
 
     // This comment is a valid language version override, except for trailing
     // characters.
-    _errorReporter.reportErrorForOffset(
-        WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS,
-        offset,
-        length);
+    _errorReporter.atOffset(
+      offset: offset,
+      length: length,
+      errorCode:
+          WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS,
+      arguments: null,
+      contextMessages: null,
+      data: null,
+    );
     return false;
   }
 
@@ -287,10 +322,13 @@
           var match = _overrideCommentLine.firstMatch(lexeme);
           if (match != null) {
             var atDartStart = lexeme.indexOf('@dart');
-            _errorReporter.reportErrorForOffset(
-              WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION,
-              commentToken.offset + atDartStart,
-              match.end - atDartStart,
+            _errorReporter.atOffset(
+              offset: commentToken.offset + atDartStart,
+              length: match.end - atDartStart,
+              errorCode: WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION,
+              arguments: null,
+              contextMessages: null,
+              data: null,
             );
           }
         }
diff --git a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
index d1c393f..984f19a 100644
--- a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
@@ -123,11 +123,13 @@
         String parameterName = parameter.name;
         if (!_containsNamedExpression(
             enclosingConstructor, arguments, parameterName)) {
-          _errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT,
-            errorNode.offset,
-            errorNode.length,
-            [parameterName],
+          _errorReporter.atOffset(
+            offset: errorNode.offset,
+            length: errorNode.length,
+            errorCode: CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT,
+            arguments: [parameterName],
+            contextMessages: null,
+            data: null,
           );
         }
       }
@@ -139,18 +141,22 @@
               enclosingConstructor, arguments, parameterName)) {
             var reason = annotation.getReason(strictCasts: true);
             if (reason != null) {
-              _errorReporter.reportErrorForOffset(
-                WarningCode.MISSING_REQUIRED_PARAM_WITH_DETAILS,
-                errorNode.offset,
-                errorNode.length,
-                [parameterName, reason],
+              _errorReporter.atOffset(
+                offset: errorNode.offset,
+                length: errorNode.length,
+                errorCode: WarningCode.MISSING_REQUIRED_PARAM_WITH_DETAILS,
+                arguments: [parameterName, reason],
+                contextMessages: null,
+                data: null,
               );
             } else {
-              _errorReporter.reportErrorForOffset(
-                WarningCode.MISSING_REQUIRED_PARAM,
-                errorNode.offset,
-                errorNode.length,
-                [parameterName],
+              _errorReporter.atOffset(
+                offset: errorNode.offset,
+                length: errorNode.length,
+                errorCode: WarningCode.MISSING_REQUIRED_PARAM,
+                arguments: [parameterName],
+                contextMessages: null,
+                data: null,
               );
             }
           }
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index a7b8bed..9f90ab5 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -128,8 +128,14 @@
         }
       }
 
-      _errorReporter.reportErrorForOffset(
-          Todo.forKind(todoKind), offset, end - offset, [todoText]);
+      _errorReporter.atOffset(
+        offset: offset,
+        length: end - offset,
+        errorCode: Todo.forKind(todoKind),
+        arguments: [todoText],
+        contextMessages: null,
+        data: null,
+      );
     }
 
     return nextComment;
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 2f4b3ce..67ca586 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -131,11 +131,13 @@
 
       if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
         final errorTarget = typeArgumentNodes?[i] ?? node.name;
-        _errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
-          errorTarget.offset,
-          errorTarget.length,
-          [typeArgument, typeParameter.name, bound],
+        _errorReporter.atOffset(
+          offset: errorTarget.offset,
+          length: errorTarget.length,
+          errorCode: CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
+          arguments: [typeArgument, typeParameter.name, bound],
+          contextMessages: null,
+          data: null,
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/error/unicode_text_verifier.dart b/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
index 046e8b4..16b5454 100644
--- a/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
@@ -30,7 +30,14 @@
                 ? WarningCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL
                 : WarningCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT;
         var code = codeUnit.toRadixString(16).toUpperCase();
-        errorReporter.reportErrorForOffset(errorCode, offset, 1, [code]);
+        errorReporter.atOffset(
+          offset: offset,
+          length: 1,
+          errorCode: errorCode,
+          arguments: [code],
+          contextMessages: null,
+          data: null,
+        );
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart b/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
index 999dc1b..1a3d74e 100644
--- a/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
@@ -185,11 +185,13 @@
           // `null`.
           var openingTag = builder.openingTag;
           if (openingTag != null) {
-            _errorReporter?.reportErrorForOffset(
-              WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG,
-              openingTag.offset,
-              openingTag.end - openingTag.offset,
-              [openingTag.type.opposingName!],
+            _errorReporter?.atOffset(
+              offset: openingTag.offset,
+              length: openingTag.end - openingTag.offset,
+              errorCode: WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG,
+              arguments: [openingTag.type.opposingName!],
+              contextMessages: null,
+              data: null,
             );
           }
           higherDirective.push(builder.build());
@@ -202,11 +204,13 @@
     }
 
     // No matching opening tag was found.
-    _errorReporter?.reportErrorForOffset(
-      WarningCode.DOC_DIRECTIVE_MISSING_OPENING_TAG,
-      closingTag.offset,
-      closingTag.end - closingTag.offset,
-      [closingTag.type.name],
+    _errorReporter?.atOffset(
+      offset: closingTag.offset,
+      length: closingTag.end - closingTag.offset,
+      errorCode: WarningCode.DOC_DIRECTIVE_MISSING_OPENING_TAG,
+      arguments: [closingTag.type.name],
+      contextMessages: null,
+      data: null,
     );
     _pushDocDirective(SimpleDocDirective(closingTag));
   }
@@ -282,11 +286,13 @@
       // `null`.
       var openingTag = builder.openingTag;
       if (openingTag != null) {
-        _errorReporter?.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG,
-          openingTag.offset,
-          openingTag.end - openingTag.offset,
-          [openingTag.type.opposingName!],
+        _errorReporter?.atOffset(
+          offset: openingTag.offset,
+          length: openingTag.end - openingTag.offset,
+          errorCode: WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG,
+          arguments: [openingTag.type.opposingName!],
+          contextMessages: null,
+          data: null,
         );
       }
       _pushBlockDocDirectiveAndInnerDirectives(builder);
@@ -428,11 +434,13 @@
         _pushDocDirective(parser.simpleDirective(DocDirectiveType.youtube));
         return true;
     }
-    _errorReporter?.reportErrorForOffset(
-      WarningCode.DOC_DIRECTIVE_UNKNOWN,
-      _characterSequence._offset + nameIndex,
-      nameEnd - nameIndex,
-      [name],
+    _errorReporter?.atOffset(
+      offset: _characterSequence._offset + nameIndex,
+      length: nameEnd - nameIndex,
+      errorCode: WarningCode.DOC_DIRECTIVE_UNKNOWN,
+      arguments: [name],
+      contextMessages: null,
+      data: null,
     );
     return false;
   }
@@ -1162,10 +1170,13 @@
 
     // We've hit EOL without closing brace.
     _end = _offset + index;
-    _errorReporter?.reportErrorForOffset(
-      WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE,
-      _offset + index - 1,
-      1,
+    _errorReporter?.atOffset(
+      offset: _offset + index - 1,
+      length: 1,
+      errorCode: WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE,
+      arguments: null,
+      contextMessages: null,
+      data: null,
     );
     return (positionalArguments, namedArguments);
   }
@@ -1197,20 +1208,26 @@
       index++;
       if (index == _length) {
         // Found extra arguments and no closing brace.
-        _errorReporter?.reportErrorForOffset(
-          WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE,
-          _offset + index - 1,
-          1,
+        _errorReporter?.atOffset(
+          offset: _offset + index - 1,
+          length: 1,
+          errorCode: WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE,
+          arguments: null,
+          contextMessages: null,
+          data: null,
         );
         break;
       }
     }
 
     var errorLength = _offset + index - extraArgumentsOffset;
-    _errorReporter?.reportErrorForOffset(
-      WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS,
-      extraArgumentsOffset,
-      errorLength,
+    _errorReporter?.atOffset(
+      offset: extraArgumentsOffset,
+      length: errorLength,
+      errorCode: WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS,
+      arguments: null,
+      contextMessages: null,
+      data: null,
     );
     _end = _offset + index;
   }
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index f4ca305..36b98aa 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -32,297 +32,483 @@
 
     switch (analyzerCode) {
       case "ASYNC_FOR_IN_WRONG_CONTEXT":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT,
+        );
         return;
       case "ASYNC_KEYWORD_USED_AS_IDENTIFIER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+        );
         return;
       case "AWAIT_IN_WRONG_CONTEXT":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT,
+        );
         return;
       case "BUILT_IN_IDENTIFIER_AS_TYPE":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE,
-            offset,
-            length,
-            [lexeme()]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE,
+          arguments: [lexeme()],
+        );
         return;
       case "CONCRETE_CLASS_WITH_ABSTRACT_MEMBER":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
+        );
         return;
       case "CONST_CONSTRUCTOR_WITH_BODY":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY,
+        );
         return;
       case "CONST_NOT_INITIALIZED":
         var name = arguments['name'] as String;
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.CONST_NOT_INITIALIZED, offset, length, [name]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.CONST_NOT_INITIALIZED,
+          arguments: [name],
+        );
         return;
       case "DEFAULT_VALUE_IN_FUNCTION_TYPE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE,
+        );
         return;
       case "LABEL_UNDEFINED":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.LABEL_UNDEFINED,
-            offset,
-            length,
-            [arguments['name'] as Object]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.LABEL_UNDEFINED,
+          arguments: [arguments['name'] as Object],
+        );
         return;
       case "EMPTY_ENUM_BODY":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EMPTY_ENUM_BODY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EMPTY_ENUM_BODY,
+        );
         return;
       case "EXPECTED_CLASS_MEMBER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXPECTED_CLASS_MEMBER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EXPECTED_CLASS_MEMBER,
+        );
         return;
       case "EXPECTED_EXECUTABLE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXPECTED_EXECUTABLE, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EXPECTED_EXECUTABLE,
+        );
         return;
       case "EXPECTED_STRING_LITERAL":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXPECTED_STRING_LITERAL, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EXPECTED_STRING_LITERAL,
+        );
         return;
       case "EXPECTED_TOKEN":
-        errorReporter?.reportErrorForOffset(ParserErrorCode.EXPECTED_TOKEN,
-            offset, length, [arguments['string'] as Object]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EXPECTED_TOKEN,
+          arguments: [arguments['string'] as Object],
+        );
         return;
       case "EXPECTED_TYPE_NAME":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXPECTED_TYPE_NAME, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.EXPECTED_TYPE_NAME,
+        );
         return;
       case "FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode:
+              CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR,
+        );
         return;
       case "FINAL_NOT_INITIALIZED":
         var name = arguments['name'] as String;
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.FINAL_NOT_INITIALIZED, offset, length, [name]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.FINAL_NOT_INITIALIZED,
+          arguments: [name],
+        );
         return;
       case "FINAL_NOT_INITIALIZED_CONSTRUCTOR_1":
         var name = arguments['name'] as String;
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
-            offset,
-            length,
-            [name]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
+          arguments: [name],
+        );
         return;
       case "GETTER_WITH_PARAMETERS":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.GETTER_WITH_PARAMETERS, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.GETTER_WITH_PARAMETERS,
+        );
         return;
       case "ILLEGAL_CHARACTER":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.ILLEGAL_CHARACTER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ScannerErrorCode.ILLEGAL_CHARACTER,
+        );
         return;
       case "INVALID_ASSIGNMENT":
         var type1 = arguments['type'] as Object;
         var type2 = arguments['type2'] as Object;
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_ASSIGNMENT,
-            offset,
-            length,
-            [type1, type2]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_ASSIGNMENT,
+          arguments: [type1, type2],
+        );
         return;
       case "INVALID_INLINE_FUNCTION_TYPE":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE,
+        );
         return;
       case "INVALID_LITERAL_IN_CONFIGURATION":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION,
+        );
         return;
       case "IMPORT_OF_NON_LIBRARY":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY,
+        );
         return;
       case "INVALID_CAST_FUNCTION":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_FUNCTION, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_FUNCTION,
+        );
         return;
       case "INVALID_CAST_FUNCTION_EXPR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR,
+        );
         return;
       case "INVALID_CAST_LITERAL_LIST":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST,
+        );
         return;
       case "INVALID_CAST_LITERAL_MAP":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP,
+        );
         return;
       case "INVALID_CAST_LITERAL_SET":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_LITERAL_SET, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_LITERAL_SET,
+        );
         return;
       case "INVALID_CAST_METHOD":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_METHOD, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_METHOD,
+        );
         return;
       case "INVALID_CAST_NEW_EXPR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_CAST_NEW_EXPR, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_CAST_NEW_EXPR,
+        );
         return;
       case "INVALID_CODE_POINT":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_CODE_POINT, offset, length, ['\\u{...}']);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.INVALID_CODE_POINT,
+          arguments: ['\\u{...}'],
+        );
         return;
       case "INVALID_GENERIC_FUNCTION_TYPE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE,
+        );
         return;
       case "INVALID_METHOD_OVERRIDE":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.INVALID_OVERRIDE, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_OVERRIDE,
+        );
         return;
       case "INVALID_MODIFIER_ON_SETTER":
-        _reportByCode(CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER, message,
-            offset, length);
+        _reportByCode(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
+          message: message,
+        );
         return;
       case "INVALID_OPERATOR_FOR_SUPER":
-        _reportByCode(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, message,
-            offset, length);
+        _reportByCode(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.INVALID_OPERATOR_FOR_SUPER,
+          message: message,
+        );
         return;
       case "MISSING_DIGIT":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.MISSING_DIGIT, offset, length);
+        errorReporter?.atOffset(
+          errorCode: ScannerErrorCode.MISSING_DIGIT,
+          offset: offset,
+          length: length,
+        );
         return;
       case "MISSING_ENUM_BODY":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_ENUM_BODY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_ENUM_BODY,
+        );
         return;
       case "MISSING_FUNCTION_BODY":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_FUNCTION_BODY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_FUNCTION_BODY,
+        );
         return;
       case "MISSING_FUNCTION_PARAMETERS":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_FUNCTION_PARAMETERS, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_FUNCTION_PARAMETERS,
+        );
         return;
       case "MISSING_HEX_DIGIT":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.MISSING_HEX_DIGIT, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ScannerErrorCode.MISSING_HEX_DIGIT,
+        );
         return;
       case "MISSING_IDENTIFIER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_IDENTIFIER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_IDENTIFIER,
+        );
         return;
       case "MISSING_METHOD_PARAMETERS":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_METHOD_PARAMETERS, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_METHOD_PARAMETERS,
+        );
         return;
       case "MISSING_STAR_AFTER_SYNC":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_STAR_AFTER_SYNC, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_STAR_AFTER_SYNC,
+        );
         return;
       case "MISSING_TYPEDEF_PARAMETERS":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MISSING_TYPEDEF_PARAMETERS,
+        );
         return;
       case "MULTIPLE_IMPLEMENTS_CLAUSES":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
+        );
         return;
       case "NAMED_FUNCTION_EXPRESSION":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.NAMED_FUNCTION_EXPRESSION, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.NAMED_FUNCTION_EXPRESSION,
+        );
         return;
       case "NAMED_PARAMETER_OUTSIDE_GROUP":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP,
+        );
         return;
       case "NON_PART_OF_DIRECTIVE_IN_PART":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART,
+        );
         return;
       case "NON_SYNC_FACTORY":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.NON_SYNC_FACTORY, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.NON_SYNC_FACTORY,
+        );
         return;
       case "POSITIONAL_AFTER_NAMED_ARGUMENT":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT,
+        );
         return;
       case "RECURSIVE_CONSTRUCTOR_REDIRECT":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
+        );
         return;
       case "RETURN_IN_GENERATOR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.RETURN_IN_GENERATOR, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.RETURN_IN_GENERATOR,
+        );
         return;
       case "SUPER_INVOCATION_NOT_LAST":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST,
+        );
         return;
       case "SUPER_IN_REDIRECTING_CONSTRUCTOR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
+        );
         return;
       case "UNDEFINED_CLASS":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.UNDEFINED_CLASS,
+        );
         return;
       case "UNDEFINED_GETTER":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.UNDEFINED_GETTER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.UNDEFINED_GETTER,
+        );
         return;
       case "UNDEFINED_METHOD":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.UNDEFINED_METHOD, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.UNDEFINED_METHOD,
+        );
         return;
       case "UNDEFINED_SETTER":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.UNDEFINED_SETTER, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.UNDEFINED_SETTER,
+        );
         return;
       case "UNEXPECTED_DOLLAR_IN_STRING":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING,
+        );
         return;
       case "UNEXPECTED_TOKEN":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [lexeme()]);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.UNEXPECTED_TOKEN,
+          arguments: [lexeme()],
+        );
         return;
       case "UNTERMINATED_MULTI_LINE_COMMENT":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT,
+        );
         return;
       case "UNTERMINATED_STRING_LITERAL":
-        errorReporter?.reportErrorForOffset(
-            ScannerErrorCode.UNTERMINATED_STRING_LITERAL, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+        );
         return;
       case "WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER,
+        );
         return;
       case "WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
-            offset,
-            length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
+        );
         return;
       case "YIELD_IN_NON_GENERATOR":
-        errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.YIELD_IN_NON_GENERATOR, offset, length);
+        errorReporter?.atOffset(
+          offset: offset,
+          length: length,
+          errorCode: CompileTimeErrorCode.YIELD_IN_NON_GENERATOR,
+        );
         return;
       case "BUILT_IN_IDENTIFIER_IN_DECLARATION":
         // Reported by [ErrorVerifier._checkForBuiltInIdentifierAsName].
@@ -393,12 +579,20 @@
       ScannerErrorCode errorCode, int offset, List<Object>? arguments) {
     // TODO(danrubel): update client to pass length in addition to offset.
     int length = 1;
-    errorReporter?.reportErrorForOffset(
-        errorCode, offset, length, arguments ?? const []);
+    errorReporter?.atOffset(
+      errorCode: errorCode,
+      offset: offset,
+      length: length,
+      arguments: arguments ?? const [],
+    );
   }
 
-  void _reportByCode(
-      ErrorCode errorCode, Message message, int offset, int length) {
+  void _reportByCode({
+    required int offset,
+    required int length,
+    required ErrorCode errorCode,
+    required Message message,
+  }) {
     if (errorReporter != null) {
       errorReporter!.reportError(
         AnalysisError.tmp(
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 854589e..297a6d3 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -3890,22 +3890,26 @@
         for (var constantName in constantNames) {
           int offset = statement.offset;
           int end = statement.rightParenthesis.end;
-          errorReporter.reportErrorForOffset(
-            StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
-            offset,
-            end - offset,
-            [constantName],
+          errorReporter.atOffset(
+            offset: offset,
+            length: end - offset,
+            errorCode: StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
+            arguments: [constantName],
+            contextMessages: null,
+            data: null,
           );
         }
 
         if (typeSystem.isNullable(expressionType) && !hasCaseNull) {
           int offset = statement.offset;
           int end = statement.rightParenthesis.end;
-          errorReporter.reportErrorForOffset(
-            StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
-            offset,
-            end - offset,
-            ['null'],
+          errorReporter.atOffset(
+            offset: offset,
+            length: end - offset,
+            errorCode: StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
+            arguments: ['null'],
+            contextMessages: null,
+            data: null,
           );
         }
       }
@@ -4760,10 +4764,13 @@
     if (redirectedElement != null &&
         element.isConst &&
         !redirectedElement.isConst) {
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR,
-        errorEntity.offset,
-        errorEntity.end - errorEntity.offset,
+      errorReporter.atOffset(
+        offset: errorEntity.offset,
+        length: errorEntity.end - errorEntity.offset,
+        errorCode: CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR,
+        arguments: null,
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -5134,7 +5141,14 @@
       var name = constructor.name;
       int offset = returnType.offset;
       int length = (name != null ? name.end : returnType.end) - offset;
-      errorReporter.reportErrorForOffset(errorCode, offset, length, arguments);
+      errorReporter.atOffset(
+        offset: offset,
+        length: length,
+        errorCode: errorCode,
+        arguments: arguments,
+        contextMessages: null,
+        data: null,
+      );
     }
 
     if (!_currentLibrary.featureSet.isEnabled(Feature.super_parameters)) {
@@ -5233,11 +5247,13 @@
         if (targetElement is InterfaceElement ||
             targetElement is ExtensionElement ||
             targetElement is TypeAliasElement) {
-          errorReporter.reportErrorForOffset(
-            errorCode,
-            operator.offset,
-            endToken.end - operator.offset,
-            arguments,
+          errorReporter.atOffset(
+            offset: operator.offset,
+            length: endToken.end - operator.offset,
+            errorCode: errorCode,
+            arguments: arguments,
+            contextMessages: null,
+            data: null,
           );
         }
       }
@@ -5258,11 +5274,13 @@
           return;
         }
       }
-      errorReporter.reportErrorForOffset(
-        errorCode,
-        operator.offset,
-        endToken.end - operator.offset,
-        arguments,
+      errorReporter.atOffset(
+        offset: operator.offset,
+        length: endToken.end - operator.offset,
+        errorCode: errorCode,
+        arguments: arguments,
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -5605,15 +5623,17 @@
     TypeParameterElementImpl typeParameterImpl =
         typeParameter as TypeParameterElementImpl;
     if (!variance.greaterThanOrEqual(typeParameterImpl.variance)) {
-      errorReporter.reportErrorForOffset(
-        CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION,
-        errorTarget.offset,
-        errorTarget.length,
-        [
+      errorReporter.atOffset(
+        offset: errorTarget.offset,
+        length: errorTarget.length,
+        errorCode: CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION,
+        arguments: [
           typeParameterImpl.variance.toKeywordString(),
           typeParameterImpl.name,
           variance.toKeywordString()
         ],
+        contextMessages: null,
+        data: null,
       );
     }
   }
@@ -5770,10 +5790,14 @@
         if (parameter.isRequiredNamed) {
           if (parameter.defaultValue != null) {
             final errorTarget = _parameterName(parameter) ?? parameter;
-            errorReporter.reportErrorForOffset(
-              CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER,
-              errorTarget.offset,
-              errorTarget.length,
+            errorReporter.atOffset(
+              offset: errorTarget.offset,
+              length: errorTarget.length,
+              errorCode:
+                  CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER,
+              arguments: null,
+              contextMessages: null,
+              data: null,
             );
           }
         } else if (defaultValuesAreExpected) {
@@ -5796,8 +5820,14 @@
                     : CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER;
                 arguments = [parameterName?.lexeme ?? '?'];
               }
-              errorReporter.reportErrorForOffset(
-                  errorCode, errorTarget.offset, errorTarget.length, arguments);
+              errorReporter.atOffset(
+                offset: errorTarget.offset,
+                length: errorTarget.length,
+                errorCode: errorCode,
+                arguments: arguments,
+                contextMessages: null,
+                data: null,
+              );
             }
           }
         }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 5215470..73ea22e 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2239,10 +2239,14 @@
         if (constructorElement.isFactory) {
           final constructorName = node.arguments?.constructorSelector?.name;
           final errorTarget = constructorName ?? node.name;
-          errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode.ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR,
-            errorTarget.offset,
-            errorTarget.length,
+          errorReporter.atOffset(
+            offset: errorTarget.offset,
+            length: errorTarget.length,
+            errorCode:
+                CompileTimeErrorCode.ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR,
+            arguments: null,
+            contextMessages: null,
+            data: null,
           );
         }
       } else {
diff --git a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
index b2cbecf4..a8257d1 100644
--- a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
+++ b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
@@ -203,14 +203,16 @@
               throw UnimplementedError('(${target.runtimeType}) $target');
             }
           }
-          _errorReporter.reportErrorForOffset(
-            WarningCode.SDK_VERSION_SINCE,
-            errorEntity.offset,
-            errorEntity.length,
-            [
+          _errorReporter.atOffset(
+            offset: errorEntity.offset,
+            length: errorEntity.length,
+            errorCode: WarningCode.SDK_VERSION_SINCE,
+            arguments: [
               sinceSdkVersion.toString(),
               _versionConstraint.toString(),
             ],
+            contextMessages: null,
+            data: null,
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 64a13bd..acfde04 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -751,8 +751,14 @@
       {List<Object> arguments = const [],
       List<DiagnosticMessage>? contextMessages,
       ErrorCode? errorCode}) {
-    reporter.reportErrorForOffset(
-        errorCode ?? lintCode, offset, length, arguments, contextMessages);
+    reporter.atOffset(
+      offset: offset,
+      length: length,
+      errorCode: errorCode ?? lintCode,
+      arguments: arguments,
+      contextMessages: contextMessages,
+      data: null,
+    );
   }
 
   void reportLintForToken(Token? token,
diff --git a/pkg/analyzer/lib/src/manifest/manifest_validator.dart b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
index 9a84dbe..ce066d9 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_validator.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
@@ -460,8 +460,14 @@
       [List<Object>? arguments]) {
     var span =
         key == null ? node.sourceSpan! : node.attributes[key]!.sourceSpan;
-    reporter.reportErrorForOffset(
-        errorCode, span.start.offset, span.length, arguments);
+    reporter.atOffset(
+      offset: span.start.offset,
+      length: span.length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: null,
+      data: null,
+    );
   }
 
   /// Validate the 'activity' tags.
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
index e605ac6..1b330cf 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
@@ -162,13 +162,13 @@
     Object? data,
   ]) {
     final span = node.span;
-    reporter.reportErrorForOffset(
-      errorCode,
-      span.start.offset,
-      span.length,
-      arguments,
-      messages,
-      data,
+    reporter.atOffset(
+      offset: span.start.offset,
+      length: span.length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: messages,
+      data: data,
     );
   }
 }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
index 96f2539..8b30299 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
@@ -133,13 +133,13 @@
     Object? data,
   ]) {
     final span = node.span;
-    reporter.reportErrorForOffset(
-      errorCode,
-      span.start.offset,
-      span.length,
-      arguments,
-      messages,
-      data,
+    reporter.atOffset(
+      offset: span.start.offset,
+      length: span.length,
+      errorCode: errorCode,
+      arguments: arguments,
+      contextMessages: messages,
+      data: data,
     );
   }
 }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
index aff8ed9..9f06e18 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
@@ -10,12 +10,26 @@
 void nameValidator(PubspecValidationContext ctx) {
   final contents = ctx.contents;
   if (contents is! YamlMap) {
-    ctx.reporter.reportErrorForOffset(PubspecWarningCode.MISSING_NAME, 0, 0);
+    ctx.reporter.atOffset(
+      offset: 0,
+      length: 0,
+      errorCode: PubspecWarningCode.MISSING_NAME,
+      arguments: null,
+      contextMessages: null,
+      data: null,
+    );
     return;
   }
   var nameField = contents.nodes[PubspecField.NAME_FIELD];
   if (nameField == null) {
-    ctx.reporter.reportErrorForOffset(PubspecWarningCode.MISSING_NAME, 0, 0);
+    ctx.reporter.atOffset(
+      offset: 0,
+      length: 0,
+      errorCode: PubspecWarningCode.MISSING_NAME,
+      arguments: null,
+      contextMessages: null,
+      data: null,
+    );
   } else if (nameField is! YamlScalar || nameField.value is! String) {
     ctx.reportErrorForNode(nameField, PubspecWarningCode.NAME_NOT_STRING);
   }
diff --git a/pkg/linter/lib/src/rules/comment_references.dart b/pkg/linter/lib/src/rules/comment_references.dart
index 13051cd..d48a3ca 100644
--- a/pkg/linter/lib/src/rules/comment_references.dart
+++ b/pkg/linter/lib/src/rules/comment_references.dart
@@ -108,8 +108,11 @@
             var reference = comment.substring(leftIndex + 1, rightIndex);
             if (_isParserSpecialCase(reference)) {
               var nameOffset = token.offset + leftIndex + 1;
-              rule.reporter.reportErrorForOffset(
-                  rule.lintCode, nameOffset, reference.length);
+              rule.reporter.atOffset(
+                offset: nameOffset,
+                length: reference.length,
+                errorCode: rule.lintCode,
+              );
             }
             if (rightIndex + 1 < comment.length &&
                 comment[rightIndex + 1] == ':') {
diff --git a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
index 33b5ae5..a5063f9 100644
--- a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
+++ b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
@@ -225,8 +225,11 @@
 
     for (var line in longLines) {
       if (allowedLines.contains(line.index + 1)) continue;
-      rule.reporter
-          .reportErrorForOffset(rule.lintCode, line.offset, line.length);
+      rule.reporter.atOffset(
+        offset: line.offset,
+        length: line.length,
+        errorCode: rule.lintCode,
+      );
     }
   }
 }
diff --git a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
index d1ef00c..e1ab63f 100644
--- a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
@@ -93,7 +93,11 @@
         for (var index in escapeIndexes) {
           // case for '''___\'''' : without last backslash it leads a parsing error
           if (contentsEnd != token.end && index + 2 == contentsEnd) continue;
-          rule.reporter.reportErrorForOffset(rule.lintCode, index, 1);
+          rule.reporter.atOffset(
+            offset: index,
+            length: 1,
+            errorCode: rule.lintCode,
+          );
         }
       }
     }
@@ -110,8 +114,11 @@
         if (isSingleQuoted && current == '"' ||
             !isSingleQuoted && current == "'" ||
             !allowedEscapedChars.contains(current)) {
-          rule.reporter
-              .reportErrorForOffset(rule.lintCode, contentsOffset + i - 1, 1);
+          rule.reporter.atOffset(
+            offset: contentsOffset + i - 1,
+            length: 1,
+            errorCode: rule.lintCode,
+          );
         }
       }
       if (isSingleQuoted ? current == "'" : current == '"') {