Skip to content

Commit 935a985

Browse files
pqCommit Queue
authored andcommitted
[element model] cleanup extensions (partial)
Bug: #59548 Change-Id: I46d1bc371ca05bac98c112eb0122c5a71af914ef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399280 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent cf1f51e commit 935a985

10 files changed

+48
-60
lines changed

pkg/linter/lib/src/extensions.dart

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ extension AstNodeExtension on AstNode {
5454
MethodDeclaration() => self.augmentKeyword != null,
5555
MixinDeclaration() => self.augmentKeyword != null,
5656
TopLevelVariableDeclaration() => self.augmentKeyword != null,
57-
VariableDeclaration(declaredElement: var element) =>
58-
element is PropertyInducingElement && element.isAugmentation,
57+
VariableDeclaration(declaredFragment: var fragment?) =>
58+
fragment is PropertyInducingFragment && fragment.isAugmentation,
5959
_ => false
6060
};
6161
}
@@ -64,7 +64,7 @@ extension AstNodeExtension on AstNode {
6464
var node = this;
6565
if (node.isInternal) return true;
6666
if (node is ClassDeclaration) {
67-
var classElement = node.declaredElement;
67+
var classElement = node.declaredFragment?.element;
6868
if (classElement != null) {
6969
if (classElement.isSealed) return true;
7070
if (classElement.isAbstract) {
@@ -80,27 +80,15 @@ extension AstNodeExtension on AstNode {
8080
var parent = thisOrAncestorOfType<CompilationUnitMember>();
8181
if (parent == null) return false;
8282

83-
var element = parent.declaredElement;
84-
return element != null && element.hasInternal;
83+
return switch (parent.declaredFragment?.element) {
84+
Annotatable(:var metadata2) => metadata2.hasInternal,
85+
_ => false,
86+
};
8587
}
8688
}
8789

8890
extension AstNodeNullableExtension on AstNode? {
89-
Element? get canonicalElement {
90-
var self = this;
91-
if (self is Expression) {
92-
var node = self.unParenthesized;
93-
if (node is Identifier) {
94-
return node.staticElement?.canonicalElement;
95-
} else if (node is PropertyAccess) {
96-
return node.propertyName.staticElement?.canonicalElement;
97-
}
98-
}
99-
return null;
100-
}
101-
102-
Element2? get canonicalElement2 {
103-
// TODO(pq): can this be replaced w/ a use of an `ElementLocator2`?
91+
Element2? get canonicalElement {
10492
var self = this;
10593
if (self is Expression) {
10694
var node = self.unParenthesized;
@@ -276,7 +264,7 @@ extension DartTypeExtension on DartType? {
276264
bool extendsClass(String? className, String library) {
277265
var self = this;
278266
if (self is InterfaceType) {
279-
return _extendsClass(self, <InterfaceElement>{}, className, library);
267+
return _extendsClass(self, <InterfaceElement2>{}, className, library);
280268
}
281269
return false;
282270
}
@@ -291,8 +279,8 @@ extension DartTypeExtension on DartType? {
291279
}
292280
if (typeToCheck is InterfaceType) {
293281
return isAnyInterface(typeToCheck) ||
294-
!typeToCheck.element.isSynthetic &&
295-
typeToCheck.element.allSupertypes.any(isAnyInterface);
282+
!typeToCheck.element3.isSynthetic &&
283+
typeToCheck.element3.allSupertypes.any(isAnyInterface);
296284
} else {
297285
return false;
298286
}
@@ -304,7 +292,7 @@ extension DartTypeExtension on DartType? {
304292
return false;
305293
}
306294
bool predicate(InterfaceType i) => i.isSameAs(interface, library);
307-
var element = self.element;
295+
var element = self.element3;
308296
return predicate(self) ||
309297
!element.isSynthetic && element.allSupertypes.any(predicate);
310298
}
@@ -314,17 +302,17 @@ extension DartTypeExtension on DartType? {
314302
bool isSameAs(String? interface, String? library) {
315303
var self = this;
316304
return self is InterfaceType &&
317-
self.element.name == interface &&
318-
self.element.library.name == library;
305+
self.element3.name3 == interface &&
306+
self.element3.library2.name3 == library;
319307
}
320308

321309
static bool _extendsClass(
322310
InterfaceType? type,
323-
Set<InterfaceElement> seenElements,
311+
Set<InterfaceElement2> seenElements,
324312
String? className,
325313
String? library) =>
326314
type != null &&
327-
seenElements.add(type.element) &&
315+
seenElements.add(type.element3) &&
328316
(type.isSameAs(className, library) ||
329317
_extendsClass(type.superclass, seenElements, className, library));
330318
}
@@ -399,15 +387,15 @@ extension ExpressionExtension on Expression? {
399387
case ArgumentList():
400388
// Allow `function(LinkedHashSet())` for `function(LinkedHashSet mySet)`
401389
// and `function(LinkedHashMap())` for `function(LinkedHashMap myMap)`.
402-
return self.staticParameterElement?.type ?? InvalidTypeImpl.instance;
390+
return self.correspondingParameter?.type ?? InvalidTypeImpl.instance;
403391
case AssignmentExpression():
404392
// Allow `x = LinkedHashMap()`.
405393
return ancestor.staticType;
406394
case ConditionalExpression():
407395
return ancestor.staticType;
408396
case ConstructorFieldInitializer():
409-
var fieldElement = ancestor.fieldName.staticElement;
410-
return (fieldElement is VariableElement) ? fieldElement.type : null;
397+
var fieldElement = ancestor.fieldName.element;
398+
return (fieldElement is VariableElement2) ? fieldElement.type : null;
411399
case ExpressionFunctionBody(parent: var function)
412400
when function is FunctionExpression:
413401
// Allow `<int, LinkedHashSet>{}.putIfAbsent(3, () => LinkedHashSet())`
@@ -426,7 +414,7 @@ extension ExpressionExtension on Expression? {
426414
return function.returnType?.type;
427415
case NamedExpression():
428416
// Allow `void f({required LinkedHashSet<Foo> s})`.
429-
return ancestor.staticParameterElement?.type ??
417+
return ancestor.correspondingParameter?.type ??
430418
InvalidTypeImpl.instance;
431419
case ReturnStatement():
432420
return ancestor.thisOrAncestorOfType<FunctionBody>().expectedReturnType;
@@ -460,7 +448,7 @@ extension FunctionBodyExtension on FunctionBody? {
460448
if (parent is FunctionExpression) {
461449
var grandparent = parent.parent;
462450
if (grandparent is FunctionDeclaration) {
463-
var returnType = grandparent.declaredElement?.returnType;
451+
var returnType = grandparent.declaredFragment?.element.returnType;
464452
return self._expectedReturnableOrYieldableType(returnType);
465453
}
466454
var functionType = parent.approximateContextType;
@@ -469,7 +457,7 @@ extension FunctionBodyExtension on FunctionBody? {
469457
return self._expectedReturnableOrYieldableType(returnType);
470458
}
471459
if (parent is MethodDeclaration) {
472-
var returnType = parent.declaredElement?.returnType;
460+
var returnType = parent.declaredFragment?.element.returnType;
473461
return self._expectedReturnableOrYieldableType(returnType);
474462
}
475463
return null;
@@ -546,9 +534,9 @@ extension InterfaceTypeExtension on InterfaceType {
546534
Iterable<InterfaceType> get implementedInterfaces {
547535
void searchSupertypes(
548536
InterfaceType? type,
549-
Set<InterfaceElement> alreadyVisited,
537+
Set<InterfaceElement2> alreadyVisited,
550538
List<InterfaceType> interfaceTypes) {
551-
if (type == null || !alreadyVisited.add(type.element)) {
539+
if (type == null || !alreadyVisited.add(type.element3)) {
552540
return;
553541
}
554542
interfaceTypes.add(type);

pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ bool _isComparingParameterWithNull(
2525
_isParameter(node.leftOperand, parameter)));
2626

2727
bool _isParameter(Expression expression, Element2? parameter) =>
28-
expression.canonicalElement2 == parameter;
28+
expression.canonicalElement == parameter;
2929

3030
bool _isParameterWithQuestionQuestion(
3131
BinaryExpression node, Element2? parameter) =>
@@ -69,7 +69,7 @@ class _BodyVisitor extends RecursiveAstVisitor<void> {
6969
@override
7070
visitMethodInvocation(MethodInvocation node) {
7171
if (node.operator?.type == TokenType.QUESTION_PERIOD &&
72-
node.target.canonicalElement2 == parameter) {
72+
node.target.canonicalElement == parameter) {
7373
rule.reportLint(node);
7474
}
7575
super.visitMethodInvocation(node);
@@ -78,7 +78,7 @@ class _BodyVisitor extends RecursiveAstVisitor<void> {
7878
@override
7979
visitPropertyAccess(PropertyAccess node) {
8080
if (node.operator.type == TokenType.QUESTION_PERIOD &&
81-
node.target.canonicalElement2 == parameter) {
81+
node.target.canonicalElement == parameter) {
8282
rule.reportLint(node);
8383
}
8484
super.visitPropertyAccess(node);

pkg/linter/lib/src/rules/cascade_invocations.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Element2? _getElementFromVariableDeclarationStatement(
3333
ExecutableElement2? _getExecutableElementFromMethodInvocation(
3434
MethodInvocation node) {
3535
if (_isInvokedWithoutNullAwareOperator(node.operator)) {
36-
var executableElement = node.methodName.canonicalElement2;
36+
var executableElement = node.methodName.canonicalElement;
3737
if (executableElement is ExecutableElement2) {
3838
return executableElement;
3939
}
@@ -44,20 +44,20 @@ ExecutableElement2? _getExecutableElementFromMethodInvocation(
4444
Element2? _getPrefixElementFromExpression(Expression rawExpression) {
4545
var expression = rawExpression.unParenthesized;
4646
if (expression is PrefixedIdentifier) {
47-
return expression.prefix.canonicalElement2;
47+
return expression.prefix.canonicalElement;
4848
} else if (expression is PropertyAccess &&
4949
_isInvokedWithoutNullAwareOperator(expression.operator) &&
5050
expression.target is SimpleIdentifier) {
51-
return expression.target.canonicalElement2;
51+
return expression.target.canonicalElement;
5252
}
5353
return null;
5454
}
5555

5656
Element2? _getTargetElementFromCascadeExpression(CascadeExpression node) =>
57-
node.target.canonicalElement2;
57+
node.target.canonicalElement;
5858

5959
Element2? _getTargetElementFromMethodInvocation(MethodInvocation node) =>
60-
node.target.canonicalElement2;
60+
node.target.canonicalElement;
6161

6262
bool _isInvokedWithoutNullAwareOperator(Token? token) =>
6363
token?.type == TokenType.PERIOD;
@@ -201,12 +201,12 @@ class _CascadableExpression {
201201

202202
factory _CascadableExpression._fromPrefixedIdentifier(
203203
PrefixedIdentifier node) =>
204-
_CascadableExpression._internal(node.prefix.canonicalElement2, [],
204+
_CascadableExpression._internal(node.prefix.canonicalElement, [],
205205
canJoin: true, canReceive: true, canBeCascaded: true);
206206

207207
factory _CascadableExpression._fromPropertyAccess(PropertyAccess node) {
208208
var targetIsSimple = node.target is SimpleIdentifier;
209-
return _CascadableExpression._internal(node.target.canonicalElement2, [],
209+
return _CascadableExpression._internal(node.target.canonicalElement, [],
210210
canJoin: targetIsSimple,
211211
canReceive: targetIsSimple,
212212
canBeCascaded: true);
@@ -248,7 +248,7 @@ class _NodeVisitor extends UnifyingAstVisitor<void> {
248248
_NodeVisitor(this.expressionBox);
249249

250250
bool isCriticalNode(AstNode node) =>
251-
node.canonicalElement2 == expressionBox.element;
251+
node.canonicalElement == expressionBox.element;
252252

253253
bool isOrHasCriticalNode(AstNode node) {
254254
node.accept(this);

pkg/linter/lib/src/rules/prefer_final_fields.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ extension on VariableElement2 {
155155
/// Whether `this` is initialized in [initializer].
156156
bool isSetInInitializer(ConstructorInitializer initializer) =>
157157
initializer is ConstructorFieldInitializer &&
158-
initializer.fieldName.canonicalElement2 == this;
158+
initializer.fieldName.canonicalElement == this;
159159

160160
/// Whether `this` is initialized with [parameter].
161161
bool isSetInParameter(FormalParameter parameter) {

pkg/linter/lib/src/rules/prefer_foreach.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class _PreferForEachVisitor extends SimpleAstVisitor<void> {
6464
@override
6565
void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
6666
var arguments = node.argumentList.arguments;
67-
if (arguments.length == 1 && arguments.first.canonicalElement2 == element) {
67+
if (arguments.length == 1 && arguments.first.canonicalElement == element) {
6868
rule.reportLint(forEachStatement);
6969
}
7070
}
@@ -74,7 +74,7 @@ class _PreferForEachVisitor extends SimpleAstVisitor<void> {
7474
var arguments = node.argumentList.arguments;
7575
var target = node.target;
7676
if (arguments.length == 1 &&
77-
arguments.first.canonicalElement2 == element &&
77+
arguments.first.canonicalElement == element &&
7878
(target == null || !_ReferenceFinder(element).references(target))) {
7979
rule.reportLint(forEachStatement);
8080
}
@@ -92,7 +92,7 @@ class _ReferenceFinder extends UnifyingAstVisitor<void> {
9292
_ReferenceFinder(this.element);
9393

9494
bool references(Expression target) {
95-
if (target.canonicalElement2 == element) return true;
95+
if (target.canonicalElement == element) return true;
9696

9797
target.accept(this);
9898
return found;
@@ -102,7 +102,7 @@ class _ReferenceFinder extends UnifyingAstVisitor<void> {
102102
visitNode(AstNode node) {
103103
if (found) return;
104104

105-
found = node.canonicalElement2 == element;
105+
found = node.canonicalElement == element;
106106
if (!found) {
107107
super.visitNode(node);
108108
}

pkg/linter/lib/src/rules/prefer_initializing_formals.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Iterable<FormalParameterElement?> _getParameters(ConstructorDeclaration node) =>
3939
node.parameters.parameters.map((e) => e.declaredFragment?.element);
4040

4141
Element2? _getRightElement(AssignmentExpression assignment) =>
42-
assignment.rightHandSide.canonicalElement2;
42+
assignment.rightHandSide.canonicalElement;
4343

4444
class PreferInitializingFormals extends LintRule {
4545
PreferInitializingFormals()

pkg/linter/lib/src/rules/unnecessary_overrides.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ class _UnnecessaryOperatorOverrideVisitor
264264
parameters != null &&
265265
parameters.length == 1 &&
266266
parameters.first.declaredFragment?.element ==
267-
node.rightOperand.canonicalElement2) {
267+
node.rightOperand.canonicalElement) {
268268
var leftPart = node.leftOperand.unParenthesized;
269269
if (leftPart is SuperExpression) {
270270
visitSuperExpression(leftPart);
@@ -310,7 +310,7 @@ class _UnnecessarySetterOverrideVisitor
310310
if (parameters != null &&
311311
parameters.length == 1 &&
312312
parameters.first.declaredFragment?.element ==
313-
node.rightHandSide.canonicalElement2) {
313+
node.rightHandSide.canonicalElement) {
314314
var leftPart = node.leftHandSide.unParenthesized;
315315
if (leftPart is PropertyAccess) {
316316
if (node.writeElement2?.name3 == _inheritedMethod.name3) {

pkg/linter/lib/src/rules/use_rethrow_when_possible.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class _Visitor extends SimpleAstVisitor<void> {
3737
void visitThrowExpression(ThrowExpression node) {
3838
if (node.parent is! ExpressionStatement) return;
3939

40-
var element = node.expression.canonicalElement2;
40+
var element = node.expression.canonicalElement;
4141
if (element != null) {
4242
var catchClause = node.thisOrAncestorOfType<CatchClause>();
4343
var exceptionParameter =

pkg/linter/lib/src/rules/use_setters_to_change_properties.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class _Visitor extends SimpleAstVisitor<void> {
5151
if (expression is AssignmentExpression &&
5252
expression.operator.type == TokenType.EQ) {
5353
var leftOperand = expression.writeElement2?.canonicalElement2;
54-
var rightOperand = expression.rightHandSide.canonicalElement2;
54+
var rightOperand = expression.rightHandSide.canonicalElement;
5555
var parameterElement =
5656
node.declaredFragment?.element.formalParameters.first;
5757
if (rightOperand == parameterElement && leftOperand is FieldElement2) {

pkg/linter/lib/src/util/dart_type_utilities.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ bool argumentsMatchParameters(
3030
}
3131
for (var argument in arguments) {
3232
if (argument is NamedExpression) {
33-
var element = argument.expression.canonicalElement2;
33+
var element = argument.expression.canonicalElement;
3434
if (element == null) {
3535
return false;
3636
}
3737
namedArguments[argument.name.label.name] = element;
3838
} else {
39-
var element = argument.canonicalElement2;
39+
var element = argument.canonicalElement;
4040
if (element == null) {
4141
return false;
4242
}
@@ -69,7 +69,7 @@ bool canonicalElementsAreEqual(Element2? element1, Element2? element2) =>
6969

7070
/// Returns whether the canonical elements from two nodes are equal.
7171
///
72-
/// As in, [AstNodeNullableExtension.canonicalElement2], the two nodes must be
72+
/// As in, [AstNodeNullableExtension.canonicalElement], the two nodes must be
7373
/// [Expression]s in order to be compared (otherwise `false` is returned).
7474
///
7575
/// The two nodes must both be a [SimpleIdentifier], [PrefixedIdentifier], or

0 commit comments

Comments
 (0)