Skip to content

Commit 7d808b2

Browse files
pqCommit Queue
authored andcommitted
[element model] migrate assignment_expression_resolver
Change-Id: I1d7befa9efdda790dbd3f67b11901b5a2040be40 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406222 Auto-Submit: Phil Quitslund <[email protected]> Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 9677798 commit 7d808b2

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,10 @@ final class AssignmentExpressionImpl extends ExpressionImpl
897897
@override
898898
MethodElement2? get element => staticElement?.asElement2;
899899

900+
set element(MethodElement2? element) {
901+
staticElement = element?.asElement;
902+
}
903+
900904
@override
901905
Token get endToken => _rightHandSide.endToken;
902906

pkg/analyzer/lib/src/dart/element/type_system.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,6 +1674,19 @@ class TypeSystemImpl implements TypeSystem {
16741674
leftType, operatorElement, [rightType], currentType);
16751675
}
16761676

1677+
/// Determine the type of a binary expression with the given [operator] whose
1678+
/// left operand has the type [leftType] and whose right operand has the type
1679+
/// [rightType], given that resolution has so far produced the [currentType].
1680+
DartType refineBinaryExpressionType2(
1681+
DartType leftType,
1682+
TokenType operator,
1683+
DartType rightType,
1684+
DartType currentType,
1685+
MethodElement2? operatorElement) {
1686+
return refineBinaryExpressionType(
1687+
leftType, operator, rightType, currentType, operatorElement?.asElement);
1688+
}
1689+
16771690
/// Determines the context type for the parameters of a method invocation
16781691
/// where the type of the target is [targetType], the method being invoked is
16791692
/// [methodElement], the context surrounding the method invocation is
@@ -1693,6 +1706,20 @@ class TypeSystemImpl implements TypeSystem {
16931706
}
16941707
}
16951708

1709+
/// Determines the context type for the parameters of a method invocation
1710+
/// where the type of the target is [targetType], the method being invoked is
1711+
/// [methodElement], the context surrounding the method invocation is
1712+
/// [invocationContext], and the context type produced so far by resolution is
1713+
/// [currentType].
1714+
TypeImpl refineNumericInvocationContext2(
1715+
DartType? targetType,
1716+
Element2? methodElement,
1717+
DartType invocationContext,
1718+
TypeImpl currentType) {
1719+
return refineNumericInvocationContext(
1720+
targetType, methodElement?.asElement, invocationContext, currentType);
1721+
}
1722+
16961723
/// Determines the type of a method invocation where the type of the target is
16971724
/// [targetType], the method being invoked is [methodElement], the types of
16981725
/// the arguments passed to the method are [argumentTypes], and the type

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

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
75
import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
86
import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
97
import 'package:analyzer/dart/analysis/features.dart';
108
import 'package:analyzer/dart/ast/token.dart';
11-
import 'package:analyzer/dart/element/element.dart';
9+
import 'package:analyzer/dart/element/element2.dart';
1210
import 'package:analyzer/dart/element/type.dart';
1311
import 'package:analyzer/error/listener.dart';
1412
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -21,7 +19,6 @@ import 'package:analyzer/src/dart/element/type_system.dart';
2119
import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
2220
import 'package:analyzer/src/error/codes.dart';
2321
import 'package:analyzer/src/generated/resolver.dart';
24-
import 'package:analyzer/src/utilities/extensions/element.dart';
2522

2623
/// Helper for resolving [AssignmentExpression]s.
2724
class AssignmentExpressionResolver {
@@ -56,14 +53,14 @@ class AssignmentExpressionResolver {
5653
var left = node.leftHandSide;
5754
var right = node.rightHandSide;
5855

59-
var readElement = leftResolution.readElement;
60-
var writeElement = leftResolution.writeElement;
56+
var readElement = leftResolution.readElement2;
57+
var writeElement = leftResolution.writeElement2;
6158
var writeElement2 = leftResolution.writeElement2;
6259

6360
if (hasRead) {
6461
_resolver.setReadElement(
6562
left,
66-
readElement.asElement2,
63+
readElement,
6764
atDynamicTarget: leftResolution.atDynamicTarget,
6865
);
6966
{
@@ -76,7 +73,7 @@ class AssignmentExpressionResolver {
7673
}
7774
_resolver.setWriteElement(
7875
left,
79-
writeElement.asElement2,
76+
writeElement,
8077
atDynamicTarget: leftResolution.atDynamicTarget,
8178
);
8279

@@ -86,7 +83,7 @@ class AssignmentExpressionResolver {
8683
TypeImpl rhsContext;
8784
{
8885
var leftType = node.writeType;
89-
if (writeElement is VariableElement) {
86+
if (writeElement is VariableElement2) {
9087
leftType = _resolver.localVariableTypeProvider
9188
.getType(left as SimpleIdentifierImpl, isRead: false);
9289
}
@@ -195,11 +192,11 @@ class AssignmentExpressionResolver {
195192
case TokenType.BAR_BAR_EQ:
196193
return _typeProvider.boolType;
197194
default:
198-
var method = node.staticElement;
195+
var method = node.element;
199196
if (method != null) {
200-
var parameters = method.parameters;
197+
var parameters = method.formalParameters;
201198
if (parameters.isNotEmpty) {
202-
return _typeSystem.refineNumericInvocationContext(
199+
return _typeSystem.refineNumericInvocationContext2(
203200
leftType,
204201
method,
205202
leftType,
@@ -255,7 +252,7 @@ class AssignmentExpressionResolver {
255252
propertyErrorEntity: operator,
256253
nameErrorEntity: operator,
257254
);
258-
node.staticElement = result.getter2?.asElement as MethodElement?;
255+
node.element = result.getter2 as MethodElement2?;
259256
if (result.needsGetterError) {
260257
_errorReporter.atToken(
261258
operator,
@@ -282,12 +279,12 @@ class AssignmentExpressionResolver {
282279
assignedType = _typeProvider.boolType;
283280
} else {
284281
var leftType = node.readType!;
285-
var operatorElement = node.staticElement;
282+
var operatorElement = node.element;
286283
if (leftType is DynamicType) {
287284
assignedType = DynamicTypeImpl.instance;
288285
} else if (operatorElement != null) {
289286
var rightType = rightHandSide.typeOrThrow;
290-
assignedType = _typeSystem.refineBinaryExpressionType(
287+
assignedType = _typeSystem.refineBinaryExpressionType2(
291288
leftType,
292289
operator,
293290
rightType,

0 commit comments

Comments
 (0)