Skip to content

Commit 629847b

Browse files
authored
fix self references (dart-archive/linter#3775)
1 parent 4098d45 commit 629847b

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

lib/src/rules/recursive_getters.dart

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ class _BodyVisitor extends RecursiveAstVisitor {
6464
final ExecutableElement element;
6565
_BodyVisitor(this.element, this.rule);
6666

67+
bool isSelfReference(SimpleIdentifier node) {
68+
if (node.staticElement != element) return false;
69+
var parent = node.parent;
70+
if (parent is PrefixedIdentifier) return false;
71+
if (parent is PropertyAccess && parent.target is! ThisExpression) {
72+
return false;
73+
}
74+
return true;
75+
}
76+
6777
@override
6878
visitListLiteral(ListLiteral node) {
6979
if (node.isConst) return null;
@@ -78,13 +88,11 @@ class _BodyVisitor extends RecursiveAstVisitor {
7888

7989
@override
8090
visitSimpleIdentifier(SimpleIdentifier node) {
81-
if (node.staticElement == element) {
82-
if (node.parent is! PrefixedIdentifier) {
83-
rule.reportLint(node, arguments: [node.name]);
84-
}
91+
if (isSelfReference(node)) {
92+
rule.reportLint(node, arguments: [node.name]);
8593
}
8694

87-
return super.visitSimpleIdentifier(node);
95+
// No need to call super visit (SimpleIdentifiers have no children).
8896
}
8997
}
9098

test/rules/recursive_getters_test.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,19 @@ class Nested {
6060
''');
6161
}
6262

63+
test_nestedReference_property() async {
64+
await assertNoDiagnostics(r'''
65+
class Nested {
66+
final Nested target;
67+
Nested(this.target);
68+
bool get isFoo {
69+
var self = this;
70+
return self.target.isFoo;
71+
}
72+
}
73+
''');
74+
}
75+
6376
test_referenceInListLiteral() async {
6477
await assertDiagnostics(r'''
6578
class C {

0 commit comments

Comments
 (0)