Skip to content

Commit a080545

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Report errors on the compound assignment operator, not the left expression.
Change-Id: Icc53a35082cdbbb05db3f009eb9d6b743ef9e7a7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/162782 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent 1587b16 commit a080545

12 files changed

+48
-27
lines changed

pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,16 +192,15 @@ class AssignmentExpressionResolver {
192192
return;
193193
}
194194

195-
operatorType = operatorFromCompoundAssignment(operatorType);
196-
var methodName = operatorType.lexeme;
197-
// TODO(brianwilkerson) Change the [methodNameNode] from the left hand
198-
// side to the operator.
195+
var binaryOperatorType = operatorFromCompoundAssignment(operatorType);
196+
var methodName = binaryOperatorType.lexeme;
197+
199198
var result = _typePropertyResolver.resolve(
200199
receiver: leftHandSide,
201200
receiverType: leftType,
202201
name: methodName,
203202
receiverErrorNode: leftHandSide,
204-
nameErrorNode: leftHandSide,
203+
nameErrorEntity: operator,
205204
);
206205
node.staticElement = result.getter;
207206
if (_shouldReportInvalidMember(leftType, result)) {

pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ class BinaryExpressionResolver {
339339
receiverType: leftType,
340340
name: methodName,
341341
receiverErrorNode: leftOperand,
342-
nameErrorNode: node,
342+
nameErrorEntity: node,
343343
);
344344

345345
node.staticElement = result.getter;

pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analyzer/dart/ast/ast.dart';
6+
import 'package:analyzer/dart/ast/syntactic_entity.dart';
67
import 'package:analyzer/dart/element/element.dart';
78
import 'package:analyzer/dart/element/scope.dart';
89
import 'package:analyzer/dart/element/type.dart';
@@ -40,12 +41,12 @@ class ExtensionMemberResolver {
4041
///
4142
/// If no applicable extensions, return [ResolutionResult.none].
4243
///
43-
/// If the match is ambiguous, report an error and return
44-
/// [ResolutionResult.ambiguous].
44+
/// If the match is ambiguous, report an error on the [nameEntity], and
45+
/// return [ResolutionResult.ambiguous].
4546
ResolutionResult findExtension(
4647
DartType type,
48+
SyntacticEntity nameEntity,
4749
String name,
48-
Expression target,
4950
) {
5051
var extensions = _getApplicable(type, name);
5152

@@ -62,9 +63,10 @@ class ExtensionMemberResolver {
6263
return extension.asResolutionResult;
6364
}
6465

65-
_errorReporter.reportErrorForNode(
66+
_errorReporter.reportErrorForOffset(
6667
CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS,
67-
target,
68+
nameEntity.offset,
69+
nameEntity.length,
6870
[
6971
name,
7072
extensions[0].extension.name,

pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class FunctionExpressionInvocationResolver {
121121
receiverType: receiverType,
122122
name: FunctionElement.CALL_METHOD_NAME,
123123
receiverErrorNode: function,
124-
nameErrorNode: function,
124+
nameErrorEntity: function,
125125
);
126126
var callElement = result.getter;
127127

pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class LexicalLookup {
5858
receiverType: thisType,
5959
name: id,
6060
receiverErrorNode: node,
61-
nameErrorNode: node,
61+
nameErrorEntity: node,
6262
);
6363

6464
if (setter) {

pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ class MethodInvocationResolver {
638638
receiverType: receiverType,
639639
name: name,
640640
receiverErrorNode: receiverErrorNode,
641-
nameErrorNode: nameNode,
641+
nameErrorEntity: nameNode,
642642
);
643643

644644
if (result.isAmbiguous) {

pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class PostfixExpressionResolver {
158158
receiverType: receiverType,
159159
name: methodName,
160160
receiverErrorNode: operand,
161-
nameErrorNode: operand,
161+
nameErrorEntity: operand,
162162
);
163163
node.staticElement = result.getter;
164164
if (_shouldReportInvalidMember(receiverType, result)) {

pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ class PrefixExpressionResolver {
192192
receiverType: readType,
193193
name: methodName,
194194
receiverErrorNode: operand,
195-
nameErrorNode: operand,
195+
nameErrorEntity: operand,
196196
);
197197
node.staticElement = result.getter;
198198
if (_shouldReportInvalidMember(readType, result)) {

pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class PropertyElementResolver {
174174
receiverType: targetType,
175175
name: propertyName.name,
176176
receiverErrorNode: target,
177-
nameErrorNode: propertyName,
177+
nameErrorEntity: propertyName,
178178
);
179179

180180
if (targetType is DynamicTypeImpl || targetType is NeverTypeImpl) {

pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analyzer/dart/ast/ast.dart';
6+
import 'package:analyzer/dart/ast/syntactic_entity.dart';
67
import 'package:analyzer/dart/element/element.dart';
78
import 'package:analyzer/dart/element/type.dart';
89
import 'package:analyzer/src/dart/element/element.dart';
@@ -24,8 +25,8 @@ class TypePropertyResolver {
2425
final ExtensionMemberResolver _extensionResolver;
2526

2627
Expression _receiver;
28+
SyntacticEntity _nameErrorEntity;
2729
String _name;
28-
AstNode _nameErrorNode;
2930

3031
ResolutionResult _result = ResolutionResult.none;
3132

@@ -43,18 +44,18 @@ class TypePropertyResolver {
4344
/// The [receiverErrorNode] is the node to report nullable dereference,
4445
/// if the [receiverType] is potentially nullable.
4546
///
46-
/// The [nameErrorNode] is used to report the ambiguous extension issue.
47+
/// The [nameErrorEntity] is used to report the ambiguous extension issue.
4748
ResolutionResult resolve({
4849
@required Expression receiver,
4950
@required DartType receiverType,
5051
@required String name,
5152
@required AstNode receiverErrorNode,
52-
@required Expression nameErrorNode,
53+
@required SyntacticEntity nameErrorEntity,
5354
}) {
5455
assert(receiverType != null);
5556
_receiver = receiver;
5657
_name = name;
57-
_nameErrorNode = nameErrorNode;
58+
_nameErrorEntity = nameErrorEntity;
5859
_result = ResolutionResult.none;
5960

6061
receiverType = _resolveTypeParameter(receiverType);
@@ -95,7 +96,7 @@ class TypePropertyResolver {
9596
}
9697

9798
void _lookupExtension(DartType type) {
98-
_result = _extensionResolver.findExtension(type, _name, _nameErrorNode);
99+
_result = _extensionResolver.findExtension(type, _nameErrorEntity, _name);
99100
}
100101

101102
void _lookupInterfaceType(InterfaceType type) {

0 commit comments

Comments
 (0)