Skip to content

Commit 546eff8

Browse files
pqCommit Queue
authored andcommitted
[element model] migrate ast utils
Bug: #59548 Change-Id: Ibb2abbebcac8b360669f16ae344b45a4763dfee2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398603 Auto-Submit: Phil Quitslund <[email protected]> Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 2871f07 commit 546eff8

File tree

5 files changed

+16
-47
lines changed

5 files changed

+16
-47
lines changed

pkg/linter/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
lib/src/ast.dart
21
lib/src/extensions.dart
32
lib/src/rules/deprecated_member_use_from_same_package.dart
43
lib/src/rules/invalid_runtime_check_with_js_interop_types.dart

pkg/linter/lib/src/ast.dart

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ library;
88
import 'package:analyzer/dart/ast/ast.dart';
99
import 'package:analyzer/dart/ast/syntactic_entity.dart';
1010
import 'package:analyzer/dart/ast/token.dart';
11-
import 'package:analyzer/dart/element/element.dart';
1211
import 'package:analyzer/dart/element/element2.dart';
1312
import 'package:analyzer/dart/element/visitor.dart';
1413
import 'package:analyzer/dart/element/visitor2.dart';
@@ -118,22 +117,11 @@ SyntacticEntity getNodeToAnnotate(Declaration node) {
118117
return node;
119118
}
120119

121-
/// If the [node] is the finishing identifier of an assignment, return its
122-
/// "writeElement", otherwise return its "staticElement", which might be
123-
/// thought as the "readElement".
124-
Element? getWriteOrReadElement(SimpleIdentifier node) {
125-
var writeElement = _getWriteElement(node);
126-
if (writeElement != null) {
127-
return writeElement;
128-
}
129-
return node.staticElement;
130-
}
131-
132120
/// If the [node] is the finishing identifier of an assignment, return its
133121
/// "writeElement", otherwise return its "element", which might be
134122
/// thought as the "readElement".
135-
Element2? getWriteOrReadElement2(SimpleIdentifier node) =>
136-
_getWriteElement2(node) ?? node.element;
123+
Element2? getWriteOrReadElement(SimpleIdentifier node) =>
124+
_getWriteElement(node) ?? node.element;
137125

138126
bool hasConstantError(Expression node) =>
139127
node.computeConstantValue().errors.isNotEmpty;
@@ -196,7 +184,7 @@ bool isMethod(ClassMember m) => m is MethodDeclaration;
196184

197185
/// Returns `true` if the given [ClassMember] is a public method.
198186
bool isPublicMethod(ClassMember m) {
199-
var declaredElement = m.declaredElement;
187+
var declaredElement = m.declaredFragment?.element;
200188
return declaredElement != null && isMethod(m) && declaredElement.isPublic;
201189
}
202190

@@ -390,30 +378,7 @@ int? _getIntValue(Expression expression, LinterContext? context,
390378
/// return the corresponding "writeElement", which is the local variable,
391379
/// the setter referenced with a [SimpleIdentifier] or a [PropertyAccess],
392380
/// or the `[]=` operator.
393-
Element? _getWriteElement(AstNode node) {
394-
var parent = node.parent;
395-
if (parent is AssignmentExpression && parent.leftHandSide == node) {
396-
return parent.writeElement;
397-
}
398-
if (parent is PostfixExpression) {
399-
return parent.writeElement;
400-
}
401-
if (parent is PrefixExpression) {
402-
return parent.writeElement;
403-
}
404-
405-
if (parent is PrefixedIdentifier && parent.identifier == node) {
406-
return _getWriteElement(parent);
407-
}
408-
409-
if (parent is PropertyAccess && parent.propertyName == node) {
410-
return _getWriteElement(parent);
411-
}
412-
413-
return null;
414-
}
415-
416-
Element2? _getWriteElement2(AstNode node) {
381+
Element2? _getWriteElement(AstNode node) {
417382
var parent = node.parent;
418383
if (parent is AssignmentExpression && parent.leftHandSide == node) {
419384
return parent.writeElement2;
@@ -426,11 +391,11 @@ Element2? _getWriteElement2(AstNode node) {
426391
}
427392

428393
if (parent is PrefixedIdentifier && parent.identifier == node) {
429-
return _getWriteElement2(parent);
394+
return _getWriteElement(parent);
430395
}
431396

432397
if (parent is PropertyAccess && parent.propertyName == node) {
433-
return _getWriteElement2(parent);
398+
return _getWriteElement(parent);
434399
}
435400

436401
return null;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class _AssertVisitor extends RecursiveAstVisitor<void> {
4040

4141
@override
4242
void visitSimpleIdentifier(SimpleIdentifier node) {
43-
var element = getWriteOrReadElement2(node);
43+
var element = getWriteOrReadElement(node);
4444

4545
// use method
4646
needInstance = needInstance ||

pkg/linter/lib/src/rules/unnecessary_this.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

5252
Element2? element;
5353
if (parent is PropertyAccess && !parent.isNullAware) {
54-
element = getWriteOrReadElement2(parent.propertyName);
54+
element = getWriteOrReadElement(parent.propertyName);
5555
} else if (parent is MethodInvocation && !parent.isNullAware) {
5656
element = parent.methodName.element;
5757
} else {

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
78
import 'package:analyzer/dart/element/type.dart';
89
import 'package:analyzer/src/dart/element/type.dart'; // ignore: implementation_imports
910

@@ -66,6 +67,9 @@ bool argumentsMatchParameters(
6667
bool canonicalElementsAreEqual(Element? element1, Element? element2) =>
6768
element1?.canonicalElement == element2?.canonicalElement;
6869

70+
bool canonicalElementsAreEqual2(Element2? element1, Element2? element2) =>
71+
element1?.canonicalElement2 == element2?.canonicalElement2;
72+
6973
/// Returns whether the canonical elements from two nodes are equal.
7074
///
7175
/// As in, [AstNodeNullableExtension.canonicalElement], the two nodes must be
@@ -100,23 +104,24 @@ bool canonicalElementsFromIdentifiersAreEqual(
100104

101105
if (expression1 is SimpleIdentifier) {
102106
return expression2 is SimpleIdentifier &&
103-
canonicalElementsAreEqual(getWriteOrReadElement(expression1),
107+
canonicalElementsAreEqual2(getWriteOrReadElement(expression1),
104108
getWriteOrReadElement(expression2));
105109
}
106110

107111
if (expression1 is PrefixedIdentifier) {
108112
return expression2 is PrefixedIdentifier &&
109113
canonicalElementsAreEqual(expression1.prefix.staticElement,
110114
expression2.prefix.staticElement) &&
111-
canonicalElementsAreEqual(getWriteOrReadElement(expression1.identifier),
115+
canonicalElementsAreEqual2(
116+
getWriteOrReadElement(expression1.identifier),
112117
getWriteOrReadElement(expression2.identifier));
113118
}
114119

115120
if (expression1 is PropertyAccess && expression2 is PropertyAccess) {
116121
var target1 = expression1.target;
117122
var target2 = expression2.target;
118123
return canonicalElementsFromIdentifiersAreEqual(target1, target2) &&
119-
canonicalElementsAreEqual(
124+
canonicalElementsAreEqual2(
120125
getWriteOrReadElement(expression1.propertyName),
121126
getWriteOrReadElement(expression2.propertyName));
122127
}

0 commit comments

Comments
 (0)