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>
This commit is contained in:
Konstantin Shcheglov 2024-02-22 19:51:39 +00:00 committed by Commit Queue
parent 167c0a1b78
commit bd38fbada4
34 changed files with 1114 additions and 552 deletions

View file

@ -80,8 +80,14 @@ class CodeFragmentParser {
}
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 @@ class CodeFragmentParser {
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 @@ class CodeFragmentParser {
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 @@ class CodeFragmentParser {
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 @@ class CodeFragmentParser {
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 @@ class CodeFragmentParser {
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 @@ class _CodeFragmentScanner {
/// 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;
}

View file

@ -190,10 +190,14 @@ class TransformSetParser {
}
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 @@ class TransformSetParser {
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 @@ class TransformSetParser {
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 @@ class TransformSetParser {
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

View file

@ -180,8 +180,14 @@ class ErrorReporter {
// 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 @@ class ErrorReporter {
/// 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 @@ class ErrorReporter {
/// 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 @@ class ErrorReporter {
@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.

View file

@ -276,12 +276,13 @@ class ConstantVerifier extends RecursiveAstVisitor<void> {
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():

View file

@ -581,12 +581,13 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
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 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
// 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(

View file

@ -125,7 +125,14 @@ class BinaryExpressionResolver {
? 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) {

View file

@ -106,11 +106,11 @@ class ExtensionMemberResolver {
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 @@ class ExtensionMemberResolver {
return "unnamed extension on '$type'";
}).commaSeparatedWithAnd,
],
contextMessages: null,
data: null,
);
return ResolutionResult.ambiguous;
},

View file

@ -356,11 +356,13 @@ class NamedTypeResolver with ScopeHelpers {
_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 @@ class NamedTypeResolver with ScopeHelpers {
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 @@ class NamedTypeResolver with ScopeHelpers {
}
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 @@ class _ErrorHelper {
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 @@ class _ErrorHelper {
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 @@ class _ErrorHelper {
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 @@ class _ErrorHelper {
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 @@ class _ErrorHelper {
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 @@ class _ErrorHelper {
}
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,
);
}

View file

@ -372,7 +372,14 @@ class PropertyElementResolver with ScopeHelpers {
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({

View file

@ -1708,7 +1708,14 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
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.

View file

@ -1083,10 +1083,13 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
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 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
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 @@ class _InvalidAccessVerifier {
}
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 @@ class _InvalidAccessVerifier {
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 @@ class _InvalidAccessVerifier {
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 @@ class _InvalidAccessVerifier {
}
}
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,
);
}
}
}

View file

@ -125,17 +125,19 @@ class CovariantParametersVerifier {
// 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,
);
}
}

View file

@ -234,10 +234,22 @@ class NullSafetyDeadCodeVerifier {
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 @@ class NullSafetyDeadCodeVerifier {
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 @@ class NullSafetyDeadCodeVerifier {
(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 @@ class NullSafetyDeadCodeVerifier {
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,
);
}
}
}

View file

@ -345,13 +345,15 @@ class DeprecatedMemberUseVerifier extends BaseDeprecatedMemberUseVerifier {
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 @@ class DeprecatedMemberUseVerifier extends BaseDeprecatedMemberUseVerifier {
!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,
);
}
}

View file

@ -42,10 +42,13 @@ class DocCommentVerifier {
}
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 @@ class DocCommentVerifier {
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 @@ class DocCommentVerifier {
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 @@ class DocCommentVerifier {
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 @@ class DocCommentVerifier {
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,
);
}

View file

@ -126,15 +126,23 @@ class IgnoreValidator {
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);
}

View file

@ -186,27 +186,39 @@ class LanguageVersionOverrideVerifier {
// 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 @@ class LanguageVersionOverrideVerifier {
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 @@ class LanguageVersionOverrideVerifier {
// 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 @@ class LanguageVersionOverrideVerifier {
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,
);
}
}

View file

@ -123,11 +123,13 @@ class RequiredParametersVerifier extends SimpleAstVisitor<void> {
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 @@ class RequiredParametersVerifier extends SimpleAstVisitor<void> {
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,
);
}
}

View file

@ -128,8 +128,14 @@ class TodoFinder {
}
}
_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;

View file

@ -131,11 +131,13 @@ class TypeArgumentsVerifier {
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,
);
}
}

View file

@ -30,7 +30,14 @@ class UnicodeTextVerifier {
? 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,
);
}
}
}

View file

@ -185,11 +185,13 @@ final class DocCommentBuilder {
// `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 @@ final class DocCommentBuilder {
}
// 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 @@ final class DocCommentBuilder {
// `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 @@ final class DocCommentBuilder {
_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 @@ final class _DirectiveParser {
// 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 @@ final class _DirectiveParser {
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;
}

View file

@ -32,297 +32,483 @@ class FastaErrorReporter {
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 @@ class FastaErrorReporter {
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(

View file

@ -3890,22 +3890,26 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
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 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
: 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,
);
}
}
}

View file

@ -2239,10 +2239,14 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
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 {

View file

@ -203,14 +203,16 @@ class SdkConstraintVerifier extends RecursiveAstVisitor<void> {
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,
);
}
}

View file

@ -751,8 +751,14 @@ abstract class LintRule extends Linter implements Comparable<LintRule> {
{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,

View file

@ -460,8 +460,14 @@ class ManifestValidator {
[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.

View file

@ -162,13 +162,13 @@ final class PubspecValidationContext {
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,
);
}
}

View file

@ -133,13 +133,13 @@ class MissingDependencyValidator {
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,
);
}
}

View file

@ -10,12 +10,26 @@ import 'package:yaml/yaml.dart';
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);
}

View file

@ -108,8 +108,11 @@ class _Visitor extends SimpleAstVisitor<void> {
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] == ':') {

View file

@ -225,8 +225,11 @@ class _Visitor extends SimpleAstVisitor {
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,
);
}
}
}

View file

@ -93,7 +93,11 @@ class _Visitor extends SimpleAstVisitor<void> {
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 @@ class _Visitor extends SimpleAstVisitor<void> {
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 == '"') {