OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library linter.src.rules.overriden_field; | 5 library linter.src.rules.overriden_field; |
6 | 6 |
7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
8 import 'package:analyzer/dart/ast/visitor.dart'; | 8 import 'package:analyzer/dart/ast/visitor.dart'; |
9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
10 import 'package:analyzer/dart/element/type.dart'; | 10 import 'package:analyzer/dart/element/type.dart'; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 node.fields.variables.forEach((VariableDeclaration variable) { | 106 node.fields.variables.forEach((VariableDeclaration variable) { |
107 PropertyAccessorElement field = _getOverriddenMember(variable.element); | 107 PropertyAccessorElement field = _getOverriddenMember(variable.element); |
108 if (field != null) { | 108 if (field != null) { |
109 rule.reportLint(variable.name); | 109 rule.reportLint(variable.name); |
110 } | 110 } |
111 }); | 111 }); |
112 } | 112 } |
113 | 113 |
114 PropertyAccessorElement _getOverriddenMember(Element member) { | 114 PropertyAccessorElement _getOverriddenMember(Element member) { |
115 String memberName = member.name; | 115 String memberName = member.name; |
| 116 LibraryElement library = member.library; |
116 bool isOverriddenMember(PropertyAccessorElement a) => | 117 bool isOverriddenMember(PropertyAccessorElement a) => |
117 a.isSynthetic && a.name == memberName; | 118 a.library == library && a.isSynthetic && a.name == memberName; |
118 bool containsOverridenMember(InterfaceType i) => | 119 bool containsOverridenMember(InterfaceType i) => |
119 i.accessors.any(isOverriddenMember); | 120 i.accessors.any(isOverriddenMember); |
120 ClassElement classElement = member.enclosingElement; | 121 ClassElement classElement = member.enclosingElement; |
121 | 122 |
122 Iterable<InterfaceType> interfaces = | 123 Iterable<InterfaceType> interfaces = |
123 _findAllSupertypesAndMixins(classElement.type, <InterfaceType>[]); | 124 _findAllSupertypesAndMixins(classElement.type, <InterfaceType>[]); |
124 InterfaceType interface = | 125 InterfaceType interface = |
125 interfaces.firstWhere(containsOverridenMember, orElse: () => null); | 126 interfaces.firstWhere(containsOverridenMember, orElse: () => null); |
126 return interface == null | 127 return interface == null |
127 ? null | 128 ? null |
128 : interface.accessors.firstWhere(isOverriddenMember); | 129 : interface.accessors.firstWhere(isOverriddenMember); |
129 } | 130 } |
130 } | 131 } |
OLD | NEW |