mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 02:07:06 +00:00
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:
parent
167c0a1b78
commit
bd38fbada4
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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] == ':') {
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 == '"') {
|
||||
|
|
Loading…
Reference in a new issue