| 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 |