Skip to content

Commit ce1f3e9

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate PostfixExpressionResolver.
Change-Id: I474dd080ecea79678acb1dff478af5e528c51b82 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406180 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent b4eceec commit ce1f3e9

File tree

9 files changed

+84
-57
lines changed

9 files changed

+84
-57
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14170,6 +14170,10 @@ final class PostfixExpressionImpl extends ExpressionImpl
1417014170
@override
1417114171
MethodElement2? get element => staticElement?.asElement2;
1417214172

14173+
set element(MethodElement2? value) {
14174+
staticElement = value?.asElement;
14175+
}
14176+
1417314177
@override
1417414178
Token get endToken => operator;
1417514179

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

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4260,7 +4260,7 @@ class FieldElementImpl extends PropertyInducingElementImpl
42604260
bool inheritsCovariant = false;
42614261

42624262
/// The element corresponding to this fragment.
4263-
FieldElement2? _element;
4263+
FieldElementImpl2? _element;
42644264

42654265
/// Initialize a newly created synthetic field element to have the given
42664266
/// [name] at the given [offset].
@@ -4275,7 +4275,7 @@ class FieldElementImpl extends PropertyInducingElementImpl
42754275
FieldElement get declaration => this;
42764276

42774277
@override
4278-
FieldElement2 get element {
4278+
FieldElementImpl2 get element {
42794279
if (_element != null) {
42804280
return _element!;
42814281
}
@@ -4290,7 +4290,7 @@ class FieldElementImpl extends PropertyInducingElementImpl
42904290
return FieldElementImpl2(firstFragment as FieldElementImpl);
42914291
}
42924292

4293-
set element(FieldElement2 element) => _element = element;
4293+
set element(FieldElementImpl2 element) => _element = element;
42944294

42954295
@override
42964296
bool get isAbstract {
@@ -5502,6 +5502,11 @@ class GenericFunctionTypeElementImpl2 extends FunctionTypedElementImpl2
55025502
}
55035503
}
55045504

5505+
/// Common base class for all analyzer-internal classes that implement
5506+
/// [GetterElement].
5507+
abstract class GetterElement2OrMember
5508+
implements PropertyAccessorElement2OrMember, GetterElement {}
5509+
55055510
class GetterElementImpl extends PropertyAccessorElementImpl2
55065511
with
55075512
FragmentedExecutableElementMixin<GetterFragment>,
@@ -5510,7 +5515,7 @@ class GetterElementImpl extends PropertyAccessorElementImpl2
55105515
FragmentedAnnotatableElementMixin<GetterFragment>,
55115516
FragmentedElementMixin<GetterFragment>,
55125517
_HasSinceSdkVersionMixin
5513-
implements GetterElement {
5518+
implements GetterElement2OrMember {
55145519
@override
55155520
final PropertyAccessorElementImpl firstFragment;
55165521

@@ -9942,7 +9947,10 @@ abstract class PromotableElementImpl2 extends VariableElementImpl2
99429947
/// Common base class for all analyzer-internal classes that implement
99439948
/// `PropertyAccessorElement2`.
99449949
abstract class PropertyAccessorElement2OrMember
9945-
implements PropertyAccessorElement2, ExecutableElement2OrMember {}
9950+
implements PropertyAccessorElement2, ExecutableElement2OrMember {
9951+
@override
9952+
PropertyInducingElement2OrMember? get variable3;
9953+
}
99469954

99479955
/// A concrete implementation of a [PropertyAccessorElement].
99489956
class PropertyAccessorElementImpl extends ExecutableElementImpl
@@ -10165,7 +10173,9 @@ abstract class PropertyAccessorElementImpl2 extends ExecutableElementImpl2
1016510173
String? get name3 => firstFragment.name2;
1016610174

1016710175
@override
10168-
PropertyInducingElement2? get variable3 => firstFragment.variable2?.element;
10176+
PropertyInducingElementImpl2? get variable3 {
10177+
return firstFragment.variable2?.element;
10178+
}
1016910179
}
1017010180

1017110181
/// Implicit getter for a [PropertyInducingElementImpl].
@@ -10310,6 +10320,11 @@ abstract class PropertyAccessorElementOrMember
1031010320
PropertyInducingElementOrMember? get variable2;
1031110321
}
1031210322

10323+
/// Common base class for all analyzer-internal classes that implement
10324+
/// [PropertyInducingElement2].
10325+
abstract class PropertyInducingElement2OrMember
10326+
implements VariableElement2OrMember, PropertyInducingElement2 {}
10327+
1031310328
/// A concrete implementation of a [PropertyInducingElement].
1031410329
abstract class PropertyInducingElementImpl
1031510330
extends NonParameterVariableElementImpl
@@ -10351,6 +10366,9 @@ abstract class PropertyInducingElementImpl
1035110366
@override
1035210367
List<Fragment> get children3 => const [];
1035310368

10369+
@override
10370+
PropertyInducingElementImpl2 get element;
10371+
1035410372
@override
1035510373
Fragment? get enclosingFragment => enclosingElement3 as Fragment;
1035610374

@@ -10491,7 +10509,7 @@ abstract class PropertyInducingElementImpl
1049110509
}
1049210510

1049310511
abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
10494-
implements PropertyInducingElement2 {
10512+
implements PropertyInducingElement2OrMember {
1049510513
@override
1049610514
bool get hasInitializer {
1049710515
return _fragments.any((f) => f.hasInitializer);
@@ -10529,6 +10547,11 @@ abstract class PropertyInducingElementTypeInference {
1052910547
TypeImpl perform();
1053010548
}
1053110549

10550+
/// Common base class for all analyzer-internal classes that implement
10551+
/// [SetterElement].
10552+
abstract class SetterElement2OrMember
10553+
implements PropertyAccessorElement2OrMember, SetterElement {}
10554+
1053210555
class SetterElementImpl extends PropertyAccessorElementImpl2
1053310556
with
1053410557
FragmentedExecutableElementMixin<SetterFragment>,
@@ -10537,7 +10560,7 @@ class SetterElementImpl extends PropertyAccessorElementImpl2
1053710560
FragmentedAnnotatableElementMixin<SetterFragment>,
1053810561
FragmentedElementMixin<SetterFragment>,
1053910562
_HasSinceSdkVersionMixin
10540-
implements SetterElement {
10563+
implements SetterElement2OrMember {
1054110564
@override
1054210565
final PropertyAccessorElementImpl firstFragment;
1054310566

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,8 @@ class FieldMember extends VariableMember
510510
FieldElementOrMember,
511511
FieldElement2,
512512
VariableElement2OrMember,
513-
PropertyInducingElementOrMember {
513+
PropertyInducingElementOrMember,
514+
PropertyInducingElement2OrMember {
514515
/// Initialize a newly created element to represent a field, based on the
515516
/// [declaration], with applied [substitution].
516517
FieldMember(
@@ -726,7 +727,8 @@ class FieldMember extends VariableMember
726727

727728
/// A getter element defined in a parameterized type where the values of the
728729
/// type parameters are known.
729-
class GetterMember extends PropertyAccessorMember implements GetterElement {
730+
class GetterMember extends PropertyAccessorMember
731+
implements GetterElement2OrMember {
730732
GetterMember._(
731733
super.declaration,
732734
super.augmentationSubstitution,
@@ -763,8 +765,8 @@ class GetterMember extends PropertyAccessorMember implements GetterElement {
763765
String? get lookupName => _element2.lookupName;
764766

765767
@override
766-
PropertyInducingElement2? get variable3 =>
767-
variable2.asElement2 as PropertyInducingElement2?;
768+
PropertyInducingElement2OrMember? get variable3 =>
769+
variable2.asElement2 as PropertyInducingElement2OrMember?;
768770

769771
@override
770772
GetterElement get _element2 => declaration.asElement2 as GetterElement;
@@ -1484,7 +1486,8 @@ abstract class PropertyAccessorMember extends ExecutableMember
14841486

14851487
/// A setter element defined in a parameterized type where the values of the
14861488
/// type parameters are known.
1487-
class SetterMember extends PropertyAccessorMember implements SetterElement {
1489+
class SetterMember extends PropertyAccessorMember
1490+
implements SetterElement2OrMember {
14881491
SetterMember._(
14891492
super.declaration,
14901493
super.augmentationSubstitution,
@@ -1521,8 +1524,8 @@ class SetterMember extends PropertyAccessorMember implements SetterElement {
15211524
String? get lookupName => _element2.lookupName;
15221525

15231526
@override
1524-
PropertyInducingElement2? get variable3 =>
1525-
variable2.asElement2 as PropertyInducingElement2?;
1527+
PropertyInducingElement2OrMember? get variable3 =>
1528+
variable2.asElement2 as PropertyInducingElement2OrMember?;
15261529

15271530
@override
15281531
SetterElement get _element2 => declaration.asElement2 as SetterElement;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class AssignmentExpressionResolver {
6363
if (hasRead) {
6464
_resolver.setReadElement(
6565
left,
66-
readElement,
66+
readElement.asElement2,
6767
atDynamicTarget: leftResolution.atDynamicTarget,
6868
);
6969
{
@@ -76,7 +76,7 @@ class AssignmentExpressionResolver {
7676
}
7777
_resolver.setWriteElement(
7878
left,
79-
writeElement,
79+
writeElement.asElement2,
8080
atDynamicTarget: leftResolution.atDynamicTarget,
8181
);
8282

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
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/types/shared_type.dart';
86
import 'package:analyzer/dart/analysis/features.dart';
97
import 'package:analyzer/dart/ast/token.dart';
10-
import 'package:analyzer/dart/element/element.dart';
8+
import 'package:analyzer/dart/element/element2.dart';
119
import 'package:analyzer/dart/element/type.dart';
1210
import 'package:analyzer/error/listener.dart';
1311
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -21,7 +19,6 @@ import 'package:analyzer/src/dart/resolver/invocation_inferrer.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 [PostfixExpression]s.
2724
class PostfixExpressionResolver {
@@ -52,8 +49,8 @@ class PostfixExpressionResolver {
5249
hasRead: true,
5350
);
5451

55-
var readElement = operandResolution.readElement;
56-
var writeElement = operandResolution.writeElement;
52+
var readElement = operandResolution.readElement2;
53+
var writeElement = operandResolution.writeElement2;
5754

5855
var operand = node.operand;
5956
_resolver.setReadElement(
@@ -98,8 +95,8 @@ class PostfixExpressionResolver {
9895
/// @return the static return type that was computed
9996
///
10097
// TODO(scheglov): this is duplicate
101-
TypeImpl _computeStaticReturnType(Element? element) {
102-
if (element is PropertyAccessorElement) {
98+
TypeImpl _computeStaticReturnType(Element2? element) {
99+
if (element is PropertyAccessorElement2) {
103100
//
104101
// This is a function invocation expression disguised as something else.
105102
// We are invoking a getter and then invoking the returned function.
@@ -108,7 +105,7 @@ class PostfixExpressionResolver {
108105
return InvocationInferrer.computeInvokeReturnType(
109106
propertyType.returnType,
110107
);
111-
} else if (element is ExecutableElement) {
108+
} else if (element is ExecutableElement2) {
112109
return InvocationInferrer.computeInvokeReturnType(element.type);
113110
}
114111
return DynamicTypeImpl.instance;
@@ -145,7 +142,7 @@ class PostfixExpressionResolver {
145142
propertyErrorEntity: node.operator,
146143
nameErrorEntity: operand,
147144
);
148-
node.staticElement = result.getter2?.asElement as MethodElement?;
145+
node.element = result.getter2 as MethodElement2?;
149146
if (result.needsGetterError) {
150147
if (operand is SuperExpression) {
151148
_errorReporter.atToken(
@@ -174,7 +171,7 @@ class PostfixExpressionResolver {
174171
// No need to check for `intVar++`, the result is `int`.
175172
operatorReturnType = receiverType;
176173
} else {
177-
var operatorElement = node.staticElement;
174+
var operatorElement = node.element;
178175
operatorReturnType = _computeStaticReturnType(operatorElement);
179176
_checkForInvalidAssignmentIncDec(node, operand, operatorReturnType);
180177
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ class PrefixExpressionResolver {
6868

6969
_resolver.setReadElement(
7070
operand,
71-
readElement,
71+
readElement.asElement2,
7272
atDynamicTarget: operandResolution.atDynamicTarget,
7373
);
7474
_resolver.setWriteElement(
7575
operand,
76-
writeElement,
76+
writeElement.asElement2,
7777
atDynamicTarget: operandResolution.atDynamicTarget,
7878
);
7979

0 commit comments

Comments
 (0)