Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit 1de8549

Browse files
authored
migrate away from traverseNodesInDFS() (#3714)
1 parent db5823a commit 1de8549

File tree

1 file changed

+34
-18
lines changed

1 file changed

+34
-18
lines changed

lib/src/rules/avoid_null_checks_in_equality_operators.dart

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,6 @@ bool _isComparingParameterWithNull(BinaryExpression node, Element? parameter) =>
5656
bool _isParameter(Expression expression, Element? parameter) =>
5757
expression.canonicalElement == parameter;
5858

59-
bool _isParameterWithQuestion(AstNode node, Element? parameter) =>
60-
(node is PropertyAccess &&
61-
node.operator.type == TokenType.QUESTION_PERIOD &&
62-
node.target.canonicalElement == parameter) ||
63-
(node is MethodInvocation &&
64-
node.operator?.type == TokenType.QUESTION_PERIOD &&
65-
node.target.canonicalElement == parameter);
66-
6759
bool _isParameterWithQuestionQuestion(
6860
BinaryExpression node, Element? parameter) =>
6961
node.operator.type == TokenType.QUESTION_QUESTION &&
@@ -86,6 +78,39 @@ class AvoidNullChecksInEqualityOperators extends LintRule {
8678
}
8779
}
8880

81+
class _BodyVisitor extends RecursiveAstVisitor {
82+
final Element? parameter;
83+
final LintRule rule;
84+
_BodyVisitor(this.parameter, this.rule);
85+
86+
@override
87+
visitBinaryExpression(BinaryExpression node) {
88+
if (_isParameterWithQuestionQuestion(node, parameter) ||
89+
_isComparingParameterWithNull(node, parameter)) {
90+
rule.reportLint(node);
91+
}
92+
super.visitBinaryExpression(node);
93+
}
94+
95+
@override
96+
visitMethodInvocation(MethodInvocation node) {
97+
if (node.operator?.type == TokenType.QUESTION_PERIOD &&
98+
node.target.canonicalElement == parameter) {
99+
rule.reportLint(node);
100+
}
101+
super.visitMethodInvocation(node);
102+
}
103+
104+
@override
105+
visitPropertyAccess(PropertyAccess node) {
106+
if (node.operator.type == TokenType.QUESTION_PERIOD &&
107+
node.target.canonicalElement == parameter) {
108+
rule.reportLint(node);
109+
}
110+
super.visitPropertyAccess(node);
111+
}
112+
}
113+
89114
class _Visitor extends SimpleAstVisitor<void> {
90115
final LintRule rule;
91116
final bool nnbdEnabled;
@@ -113,15 +138,6 @@ class _Visitor extends SimpleAstVisitor<void> {
113138
return;
114139
}
115140

116-
bool checkIfParameterIsNull(AstNode node) =>
117-
_isParameterWithQuestion(node, parameter) ||
118-
(node is BinaryExpression &&
119-
(_isParameterWithQuestionQuestion(node, parameter) ||
120-
_isComparingParameterWithNull(node, parameter)));
121-
122-
node.body
123-
.traverseNodesInDFS()
124-
.where(checkIfParameterIsNull)
125-
.forEach(rule.reportLint);
141+
node.body.accept(_BodyVisitor(parameter, rule));
126142
}
127143
}

0 commit comments

Comments
 (0)