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

Commit 8fa9ddd

Browse files
committed
Fix overriden_field false positive (#246).
Fixes: https://github.com/dart-lang/linter/issues/246 Net-net: we need to ensure that the overridden field is in the same library as the overrider. BUG= [email protected] Review URL: https://codereview.chromium.org//1991283003 .
1 parent 0f23f33 commit 8fa9ddd

File tree

5 files changed

+40
-1
lines changed

5 files changed

+40
-1
lines changed

lib/src/rules/overriden_field.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,9 @@ class _Visitor extends SimpleAstVisitor {
113113

114114
PropertyAccessorElement _getOverriddenMember(Element member) {
115115
String memberName = member.name;
116+
LibraryElement library = member.library;
116117
bool isOverriddenMember(PropertyAccessorElement a) =>
117-
a.isSynthetic && a.name == memberName;
118+
a.library == library && a.isSynthetic && a.name == memberName;
118119
bool containsOverridenMember(InterfaceType i) =>
119120
i.accessors.any(isOverriddenMember);
120121
ClassElement classElement = member.enclosingElement;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rules:
2+
- overridden_field
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/// A.
2+
class A {
3+
int _hidden;
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import 'a.dart';
2+
3+
/// B.
4+
class B extends A {
5+
int _hidden;
6+
}

test/integration_test.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,32 @@ defineTests() {
150150
});
151151
});
152152

153+
group('overridden_field', () {
154+
IOSink currentOut = outSink;
155+
CollectingSink collectingOut = new CollectingSink();
156+
setUp(() {
157+
exitCode = 0;
158+
outSink = collectingOut;
159+
});
160+
tearDown(() {
161+
collectingOut.buffer.clear();
162+
outSink = currentOut;
163+
exitCode = 0;
164+
});
165+
166+
// https://github.com/dart-lang/linter/issues/246
167+
test('overrides across libraries', () {
168+
dartlint.main([
169+
'test/_data/overridden_field',
170+
'-c',
171+
'test/_data/overridden_field/lintconfig.yaml'
172+
]);
173+
expect(exitCode, 0);
174+
expect(collectingOut.trim(),
175+
stringContainsInOrder(['2 files analyzed, 0 issues found, in']));
176+
});
177+
});
178+
153179
group('examples', () {
154180
test('lintconfig.yaml', () {
155181
var src = readFile('example/lintconfig.yaml');

0 commit comments

Comments
 (0)