Skip to content

Commit 0235cf4

Browse files
committed
Elements. Migrate PrefixExpressionResolver.
Change-Id: I0d54fc62353e87e10193d707e9586604585bba37 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406900 Reviewed-by: Phil Quitslund <[email protected]>
1 parent f287cd2 commit 0235cf4

File tree

11 files changed

+82
-64
lines changed

11 files changed

+82
-64
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,11 +1582,9 @@ abstract final class AugmentedExpression implements Expression {
15821582
/// The referenced augmented element: getter, setter, variable.
15831583
Element? get element;
15841584

1585-
/// The referenced augmented element: getter, setter, variable.
1586-
// TODO(brianwilkerson): Consider resolving this to a fragment rather than an
1587-
// element. In this case I think that's closer to the right semantics.
1585+
/// The referenced augmented fragment: getter, setter, variable.
15881586
@experimental
1589-
Element2? get element2;
1587+
Fragment? get fragment;
15901588
}
15911589

15921590
final class AugmentedExpressionImpl extends ExpressionImpl
@@ -1604,12 +1602,16 @@ final class AugmentedExpressionImpl extends ExpressionImpl
16041602
@override
16051603
Token get beginToken => augmentedKeyword;
16061604

1607-
@experimental
16081605
@override
1609-
Element2? get element2 => (element as Fragment?)?.element;
1606+
Token get endToken => augmentedKeyword;
16101607

1608+
@experimental
16111609
@override
1612-
Token get endToken => augmentedKeyword;
1610+
Fragment? get fragment => element as Fragment?;
1611+
1612+
set fragment(Fragment? value) {
1613+
element = value as Element?;
1614+
}
16131615

16141616
@override
16151617
bool get isAssignable => true;
@@ -14393,6 +14395,10 @@ final class PrefixExpressionImpl extends ExpressionImpl
1439314395
@override
1439414396
MethodElement2? get element => staticElement?.asElement2;
1439514397

14398+
set element(MethodElement2? element) {
14399+
staticElement = element?.asElement;
14400+
}
14401+
1439614402
@override
1439714403
Token get endToken => _operand.endToken;
1439814404

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5908,7 +5908,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
59085908

59095909
@override
59105910
MethodElement2? getMethod2(String name) {
5911-
return methods2.firstWhereOrNull((e) => e.name3 == name);
5911+
return methods2.firstWhereOrNull((e) => e.lookupName == name);
59125912
}
59135913

59145914
@override

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

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
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/ast/token.dart';
9-
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
108
import 'package:analyzer/dart/element/type.dart';
119
import 'package:analyzer/error/listener.dart';
1210
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 [PrefixExpression]s.
2724
class PrefixExpressionResolver {
@@ -63,17 +60,17 @@ class PrefixExpressionResolver {
6360
hasRead: true,
6461
);
6562

66-
var readElement = operandResolution.readElement;
67-
var writeElement = operandResolution.writeElement;
63+
var readElement = operandResolution.readElement2;
64+
var writeElement = operandResolution.writeElement2;
6865

6966
_resolver.setReadElement(
7067
operand,
71-
readElement.asElement2,
68+
readElement,
7269
atDynamicTarget: operandResolution.atDynamicTarget,
7370
);
7471
_resolver.setWriteElement(
7572
operand,
76-
writeElement.asElement2,
73+
writeElement,
7774
atDynamicTarget: operandResolution.atDynamicTarget,
7875
);
7976

@@ -120,8 +117,8 @@ class PrefixExpressionResolver {
120117
/// @return the static return type that was computed
121118
///
122119
// TODO(scheglov): this is duplicate
123-
TypeImpl _computeStaticReturnType(Element? element) {
124-
if (element is PropertyAccessorElement) {
120+
TypeImpl _computeStaticReturnType(Element2? element) {
121+
if (element is PropertyAccessorElement2) {
125122
//
126123
// This is a function invocation expression disguised as something else.
127124
// We are invoking a getter and then invoking the returned function.
@@ -130,7 +127,7 @@ class PrefixExpressionResolver {
130127
return InvocationInferrer.computeInvokeReturnType(
131128
propertyType.returnType,
132129
);
133-
} else if (element is ExecutableElement) {
130+
} else if (element is ExecutableElement2) {
134131
return InvocationInferrer.computeInvokeReturnType(element.type);
135132
}
136133
return InvalidTypeImpl.instance;
@@ -159,18 +156,18 @@ class PrefixExpressionResolver {
159156
ExpressionImpl operand = node.operand;
160157
String methodName = _getPrefixOperator(node);
161158
if (operand is ExtensionOverrideImpl) {
162-
var element = operand.element;
163-
var member = element.getMethod(methodName);
159+
var element = operand.element2;
160+
var member = element.getMethod2(methodName);
164161
if (member == null) {
165162
// Extension overrides always refer to named extensions, so we can
166163
// safely assume `element.name` is non-`null`.
167164
_errorReporter.atToken(
168165
node.operator,
169166
CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
170-
arguments: [methodName, element.name!],
167+
arguments: [methodName, element.name3!],
171168
);
172169
}
173-
node.staticElement = member;
170+
node.element = member;
174171
return;
175172
}
176173

@@ -193,7 +190,7 @@ class PrefixExpressionResolver {
193190
propertyErrorEntity: node.operator,
194191
nameErrorEntity: operand,
195192
);
196-
node.staticElement = result.getter2?.asElement as MethodElement?;
193+
node.element = result.getter2 as MethodElement2?;
197194
if (result.needsGetterError) {
198195
if (operand is SuperExpression) {
199196
_errorReporter.atToken(
@@ -225,7 +222,7 @@ class PrefixExpressionResolver {
225222
} else if (readType is InvalidType) {
226223
staticType = InvalidTypeImpl.instance;
227224
} else {
228-
var staticMethodElement = node.staticElement;
225+
var staticMethodElement = node.element;
229226
staticType = _computeStaticReturnType(staticMethodElement);
230227
}
231228
Expression operand = node.operand;
@@ -262,13 +259,13 @@ class PrefixExpressionResolver {
262259
operand.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
263260

264261
switch (augmentationTarget) {
265-
case MethodElement operatorElement:
266-
operand.element = operatorElement;
262+
case MethodFragment fragment:
263+
operand.fragment = fragment;
267264
operand.setPseudoExpressionStaticType(
268265
_resolver.thisType ?? InvalidTypeImpl.instance);
269-
if (operatorElement.name == methodName) {
270-
node.staticElement = operatorElement;
271-
node.recordStaticType(operatorElement.returnType,
266+
if (fragment.element.lookupName == methodName) {
267+
node.element = fragment.element;
268+
node.recordStaticType(fragment.element.returnType,
272269
resolver: _resolver);
273270
} else {
274271
_errorReporter.atToken(
@@ -280,10 +277,10 @@ class PrefixExpressionResolver {
280277
);
281278
node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
282279
}
283-
case PropertyAccessorElement accessor:
284-
operand.element = accessor;
285-
if (accessor.isGetter) {
286-
operand.setPseudoExpressionStaticType(accessor.returnType);
280+
case PropertyAccessorFragment fragment:
281+
operand.fragment = fragment;
282+
if (fragment.element is GetterElement) {
283+
operand.setPseudoExpressionStaticType(fragment.element.returnType);
287284
_resolve1(node);
288285
_resolve2(node);
289286
} else {
@@ -293,9 +290,9 @@ class PrefixExpressionResolver {
293290
);
294291
node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
295292
}
296-
case PropertyInducingElement property:
297-
operand.element = property;
298-
operand.setPseudoExpressionStaticType(property.type);
293+
case PropertyInducingFragment fragment:
294+
operand.fragment = fragment;
295+
operand.setPseudoExpressionStaticType(fragment.element.type);
299296
_resolve1(node);
300297
_resolve2(node);
301298
}

pkg/analyzer/test/src/dart/resolution/augmented_expression_test.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ augment class A {
3737
AugmentedExpression
3838
augmentedKeyword: augmented
3939
element: package:test/a.dart::<fragment>::@class::A::@field::foo
40-
element2: package:test/a.dart::<fragment>::@class::A::@field::foo#element
40+
fragment: package:test/a.dart::<fragment>::@class::A::@field::foo
4141
staticType: int
4242
''');
4343
}
@@ -68,7 +68,7 @@ ReturnStatement
6868
expression: AugmentedExpression
6969
augmentedKeyword: augmented
7070
element: package:test/a.dart::<fragment>::@class::A::@getter::foo
71-
element2: package:test/a.dart::<fragment>::@class::A::@getter::foo#element
71+
fragment: package:test/a.dart::<fragment>::@class::A::@getter::foo
7272
staticType: int
7373
semicolon: ;
7474
''');
@@ -103,7 +103,7 @@ Block
103103
leftHandSide: AugmentedExpression
104104
augmentedKeyword: augmented
105105
element: package:test/a.dart::<fragment>::@class::A::@setter::foo
106-
element2: package:test/a.dart::<fragment>::@class::A::@setter::foo#element
106+
fragment: package:test/a.dart::<fragment>::@class::A::@setter::foo
107107
staticType: null
108108
operator: =
109109
rightHandSide: IntegerLiteral
@@ -152,7 +152,7 @@ AssignmentExpression
152152
leftHandSide: AugmentedExpression
153153
augmentedKeyword: augmented
154154
element: <null>
155-
element2: <null>
155+
fragment: <null>
156156
staticType: null
157157
operator: =
158158
rightHandSide: IntegerLiteral
@@ -198,7 +198,7 @@ AssignmentExpression
198198
leftHandSide: AugmentedExpression
199199
augmentedKeyword: augmented
200200
element: <null>
201-
element2: <null>
201+
fragment: <null>
202202
staticType: null
203203
operator: =
204204
rightHandSide: IntegerLiteral
@@ -239,7 +239,7 @@ ReturnStatement
239239
expression: AugmentedExpression
240240
augmentedKeyword: augmented
241241
element: package:test/a.dart::<fragment>::@getter::foo
242-
element2: package:test/a.dart::<fragment>::@getter::foo#element
242+
fragment: package:test/a.dart::<fragment>::@getter::foo
243243
staticType: int
244244
semicolon: ;
245245
''');
@@ -270,7 +270,7 @@ Block
270270
leftHandSide: AugmentedExpression
271271
augmentedKeyword: augmented
272272
element: package:test/a.dart::<fragment>::@setter::foo
273-
element2: package:test/a.dart::<fragment>::@setter::foo#element
273+
fragment: package:test/a.dart::<fragment>::@setter::foo
274274
staticType: null
275275
operator: =
276276
rightHandSide: IntegerLiteral
@@ -309,7 +309,7 @@ augment num foo = augmented;
309309
AugmentedExpression
310310
augmentedKeyword: augmented
311311
element: package:test/a.dart::<fragment>::@topLevelVariable::foo
312-
element2: package:test/a.dart::@topLevelVariable::foo
312+
fragment: package:test/a.dart::<fragment>::@topLevelVariable::foo
313313
staticType: int
314314
''');
315315
}

pkg/analyzer/test/src/dart/resolution/augmented_invocation_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ ExpressionStatement
116116
function: AugmentedExpression
117117
augmentedKeyword: augmented
118118
element: package:test/a.dart::<fragment>::@class::A::@getter::foo
119-
element2: package:test/a.dart::<fragment>::@class::A::@getter::foo#element
119+
fragment: package:test/a.dart::<fragment>::@class::A::@getter::foo
120120
staticType: int Function(int)
121121
argumentList: ArgumentList
122122
leftParenthesis: (
@@ -533,7 +533,7 @@ ExpressionStatement
533533
function: AugmentedExpression
534534
augmentedKeyword: augmented
535535
element: package:test/a.dart::<fragment>::@getter::foo
536-
element2: package:test/a.dart::<fragment>::@getter::foo#element
536+
fragment: package:test/a.dart::<fragment>::@getter::foo
537537
staticType: int Function(int)
538538
argumentList: ArgumentList
539539
leftParenthesis: (
@@ -611,7 +611,7 @@ ExpressionStatement
611611
function: AugmentedExpression
612612
augmentedKeyword: augmented
613613
element: package:test/a.dart::<fragment>::@getter::foo
614-
element2: package:test/a.dart::<fragment>::@getter::foo#element
614+
fragment: package:test/a.dart::<fragment>::@getter::foo
615615
staticType: int Function()
616616
argumentList: ArgumentList
617617
leftParenthesis: (
@@ -653,7 +653,7 @@ ExpressionStatement
653653
function: AugmentedExpression
654654
augmentedKeyword: augmented
655655
element: package:test/a.dart::<fragment>::@getter::foo
656-
element2: package:test/a.dart::<fragment>::@getter::foo#element
656+
fragment: package:test/a.dart::<fragment>::@getter::foo
657657
staticType: int Function()
658658
argumentList: ArgumentList
659659
leftParenthesis: (

pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ BinaryExpression
455455
leftOperand: AugmentedExpression
456456
augmentedKeyword: augmented
457457
element: package:test/a.dart::<fragment>::@class::A::@method::+
458-
element2: package:test/a.dart::<fragment>::@class::A::@method::+#element
458+
fragment: package:test/a.dart::<fragment>::@class::A::@method::+
459459
staticType: A
460460
operator: +
461461
rightOperand: IntegerLiteral
@@ -496,7 +496,7 @@ BinaryExpression
496496
leftOperand: AugmentedExpression
497497
augmentedKeyword: augmented
498498
element: package:test/a.dart::<fragment>::@class::A::@method::unary-
499-
element2: package:test/a.dart::<fragment>::@class::A::@method::unary-#element
499+
fragment: package:test/a.dart::<fragment>::@class::A::@method::unary-
500500
staticType: A
501501
operator: +
502502
rightOperand: IntegerLiteral
@@ -533,7 +533,7 @@ BinaryExpression
533533
leftOperand: AugmentedExpression
534534
augmentedKeyword: augmented
535535
element: package:test/a.dart::<fragment>::@class::A::@field::foo
536-
element2: package:test/a.dart::<fragment>::@class::A::@field::foo#element
536+
fragment: package:test/a.dart::<fragment>::@class::A::@field::foo
537537
staticType: num
538538
operator: +
539539
rightOperand: IntegerLiteral
@@ -572,7 +572,7 @@ BinaryExpression
572572
leftOperand: AugmentedExpression
573573
augmentedKeyword: augmented
574574
element: package:test/a.dart::<fragment>::@class::A::@getter::foo
575-
element2: package:test/a.dart::<fragment>::@class::A::@getter::foo#element
575+
fragment: package:test/a.dart::<fragment>::@class::A::@getter::foo
576576
staticType: int
577577
operator: +
578578
rightOperand: IntegerLiteral
@@ -613,7 +613,7 @@ BinaryExpression
613613
leftOperand: AugmentedExpression
614614
augmentedKeyword: augmented
615615
element: package:test/a.dart::<fragment>::@class::A::@setter::foo
616-
element2: package:test/a.dart::<fragment>::@class::A::@setter::foo#element
616+
fragment: package:test/a.dart::<fragment>::@class::A::@setter::foo
617617
staticType: InvalidType
618618
operator: +
619619
rightOperand: IntegerLiteral

0 commit comments

Comments
 (0)