Skip to content

Commit 5f9e3af

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate BinaryExpressionResolver.
Change-Id: I0dba2a875bb844aff5b8e10ebd879d563909daca Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408160 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 30d6cc9 commit 5f9e3af

File tree

4 files changed

+35
-42
lines changed

4 files changed

+35
-42
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,9 +1842,17 @@ final class BinaryExpressionImpl extends ExpressionImpl
18421842
@override
18431843
MethodElement2? get element => staticElement?.asElement2;
18441844

1845+
set element(MethodElement2? value) {
1846+
staticElement = value?.asElement;
1847+
}
1848+
18451849
@override
18461850
Token get endToken => _rightOperand.endToken;
18471851

1852+
set fragment(MethodFragment? value) {
1853+
staticElement = value as MethodElement;
1854+
}
1855+
18481856
@override
18491857
ExpressionImpl get leftOperand => _leftOperand;
18501858

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

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,23 +1688,10 @@ class TypeSystemImpl implements TypeSystem {
16881688
TokenType operator,
16891689
DartType rightType,
16901690
DartType currentType,
1691-
MethodElement? operatorElement) {
1691+
MethodElement2? operatorElement) {
16921692
if (operatorElement == null) return currentType;
16931693
return _refineNumericInvocationTypeNullSafe(
1694-
leftType, operatorElement, [rightType], currentType);
1695-
}
1696-
1697-
/// Determine the type of a binary expression with the given [operator] whose
1698-
/// left operand has the type [leftType] and whose right operand has the type
1699-
/// [rightType], given that resolution has so far produced the [currentType].
1700-
DartType refineBinaryExpressionType2(
1701-
DartType leftType,
1702-
TokenType operator,
1703-
DartType rightType,
1704-
DartType currentType,
1705-
MethodElement2? operatorElement) {
1706-
return refineBinaryExpressionType(
1707-
leftType, operator, rightType, currentType, operatorElement?.asElement);
1694+
leftType, operatorElement.asElement, [rightType], currentType);
17081695
}
17091696

17101697
/// Determines the context type for the parameters of a method invocation

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ class AssignmentExpressionResolver {
284284
assignedType = DynamicTypeImpl.instance;
285285
} else if (operatorElement != null) {
286286
var rightType = rightHandSide.typeOrThrow;
287-
assignedType = _typeSystem.refineBinaryExpressionType2(
287+
assignedType = _typeSystem.refineBinaryExpressionType(
288288
leftType,
289289
operator,
290290
rightType,

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

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
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/syntactic_entity.dart';
119
import 'package:analyzer/dart/ast/token.dart';
12-
import 'package:analyzer/dart/element/element.dart';
10+
import 'package:analyzer/dart/element/element2.dart';
1311
import 'package:analyzer/dart/element/type.dart';
1412
import 'package:analyzer/error/listener.dart';
1513
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -24,7 +22,6 @@ import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
2422
import 'package:analyzer/src/error/codes.dart';
2523
import 'package:analyzer/src/generated/resolver.dart';
2624
import 'package:analyzer/src/generated/super_context.dart';
27-
import 'package:analyzer/src/utilities/extensions/element.dart';
2825

2926
/// Helper for resolving [BinaryExpression]s.
3027
class BinaryExpressionResolver {
@@ -289,13 +286,13 @@ class BinaryExpressionResolver {
289286

290287
var invokeType = node.staticInvokeType;
291288
TypeImpl rightContextType;
292-
if (invokeType != null && invokeType.parameters.isNotEmpty) {
289+
if (invokeType != null && invokeType.formalParameters.isNotEmpty) {
293290
// If this is a user-defined operator, set the right operand context
294291
// using the operator method's parameter type.
295-
var rightParam = invokeType.parameters[0];
296-
rightContextType = _typeSystem.refineNumericInvocationContext(
292+
var rightParam = invokeType.formalParameters[0];
293+
rightContextType = _typeSystem.refineNumericInvocationContext2(
297294
left.staticType,
298-
node.staticElement,
295+
node.element,
299296
contextType,
300297
// TODO(paulberry): eliminate this cast by changing the type of
301298
// `FunctionTypeImpl.parameters` to `List<ParameterElementMixin>`.
@@ -373,13 +370,13 @@ class BinaryExpressionResolver {
373370
left.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
374371

375372
switch (augmentationTarget) {
376-
case MethodElement operatorElement:
377-
left.element = operatorElement;
373+
case MethodFragment fragment:
374+
left.fragment = fragment;
378375
left.setPseudoExpressionStaticType(
379376
_resolver.thisType ?? InvalidTypeImpl.instance);
380-
if (operatorElement.name == methodName) {
381-
node.staticElement = operatorElement;
382-
node.staticInvokeType = operatorElement.type;
377+
if (fragment.name2 == methodName) {
378+
node.fragment = fragment;
379+
node.staticInvokeType = fragment.element.type;
383380
} else {
384381
_errorReporter.atToken(
385382
left.augmentedKeyword,
@@ -389,20 +386,21 @@ class BinaryExpressionResolver {
389386
],
390387
);
391388
}
392-
case PropertyAccessorElement accessor:
393-
left.element = accessor;
394-
if (accessor.isGetter) {
395-
left.setPseudoExpressionStaticType(accessor.returnType);
389+
case PropertyAccessorFragment fragment:
390+
left.fragment = fragment;
391+
var element = fragment.element;
392+
if (element is GetterElement) {
393+
left.setPseudoExpressionStaticType(element.returnType);
396394
_resolveUserDefinableElement(node, methodName);
397395
} else {
398396
_errorReporter.atToken(
399397
left.augmentedKeyword,
400398
CompileTimeErrorCode.AUGMENTED_EXPRESSION_IS_SETTER,
401399
);
402400
}
403-
case PropertyInducingElement property:
404-
left.element = property;
405-
left.setPseudoExpressionStaticType(property.type);
401+
case PropertyInducingFragment fragment:
402+
left.fragment = fragment;
403+
left.setPseudoExpressionStaticType(fragment.element.type);
406404
_resolveUserDefinableElement(node, methodName);
407405
}
408406

@@ -417,18 +415,18 @@ class BinaryExpressionResolver {
417415
ExpressionImpl leftOperand = node.leftOperand;
418416

419417
if (leftOperand is ExtensionOverrideImpl) {
420-
var extension = leftOperand.element;
421-
var member = extension.getMethod(methodName);
418+
var extension = leftOperand.element2;
419+
var member = extension.getMethod2(methodName);
422420
if (member == null) {
423421
// Extension overrides can only be used with named extensions so it is
424422
// safe to assume `extension.name` is non-`null`.
425423
_errorReporter.atToken(
426424
node.operator,
427425
CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
428-
arguments: [methodName, extension.name!],
426+
arguments: [methodName, extension.name3!],
429427
);
430428
}
431-
node.staticElement = member;
429+
node.element = member;
432430
node.staticInvokeType = member?.type;
433431
return;
434432
}
@@ -455,7 +453,7 @@ class BinaryExpressionResolver {
455453
nameErrorEntity: node,
456454
);
457455

458-
node.staticElement = result.getter2?.asElement as MethodElement?;
456+
node.element = result.getter2 as MethodElement2?;
459457
node.staticInvokeType = result.getter2?.type;
460458
if (result.needsGetterError) {
461459
if (leftOperand is SuperExpression) {
@@ -506,7 +504,7 @@ class BinaryExpressionResolver {
506504
node.operator.type,
507505
node.rightOperand.typeOrThrow,
508506
staticType,
509-
node.staticElement,
507+
node.element,
510508
);
511509
}
512510
node.recordStaticType(staticType, resolver: _resolver);

0 commit comments

Comments
 (0)