OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 domains.analysis.implemented_dart; | 5 library domains.analysis.implemented_dart; |
6 | 6 |
7 import 'package:analysis_server/src/protocol_server.dart' as protocol; | 7 import 'package:analysis_server/src/protocol_server.dart' as protocol; |
8 import 'package:analysis_server/src/services/search/hierarchy.dart'; | 8 import 'package:analysis_server/src/services/search/hierarchy.dart'; |
9 import 'package:analysis_server/src/services/search/search_engine.dart'; | 9 import 'package:analysis_server/src/services/search/search_engine.dart'; |
10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 classes.add(new protocol.ImplementedClass(offset, length)); | 47 classes.add(new protocol.ImplementedClass(offset, length)); |
48 } | 48 } |
49 | 49 |
50 void _addImplementedMember(Element member) { | 50 void _addImplementedMember(Element member) { |
51 int offset = member.nameOffset; | 51 int offset = member.nameOffset; |
52 int length = member.nameLength; | 52 int length = member.nameLength; |
53 members.add(new protocol.ImplementedMember(offset, length)); | 53 members.add(new protocol.ImplementedMember(offset, length)); |
54 } | 54 } |
55 | 55 |
56 void _addMemberIfImplemented(Element element) { | 56 void _addMemberIfImplemented(Element element) { |
57 if (!element.isSynthetic) { | 57 if (element.isSynthetic || _isStatic(element)) { |
58 String name = element.displayName; | 58 return; |
59 if (name != null && _hasOverride(name)) { | 59 } |
60 _addImplementedMember(element); | 60 String name = element.displayName; |
61 } | 61 if (name != null && _hasOverride(name)) { |
| 62 _addImplementedMember(element); |
62 } | 63 } |
63 } | 64 } |
64 | 65 |
65 bool _hasOverride(String name) { | 66 bool _hasOverride(String name) { |
66 for (ClassElement subtype in subtypes) { | 67 for (ClassElement subtype in subtypes) { |
67 if (subtype.getMethod(name) != null) { | 68 MethodElement method = subtype.getMethod(name); |
68 return true; | 69 if (method != null) { |
| 70 return !method.isStatic; |
69 } | 71 } |
70 if (subtype.getField(name) != null) { | 72 FieldElement field = subtype.getField(name); |
71 return true; | 73 if (field != null) { |
| 74 return !field.isStatic; |
72 } | 75 } |
73 } | 76 } |
74 return false; | 77 return false; |
75 } | 78 } |
| 79 |
| 80 /** |
| 81 * Return `true` if the given [element] is a static element. |
| 82 */ |
| 83 static bool _isStatic(Element element) { |
| 84 if (element is ExecutableElement) { |
| 85 return element.isStatic; |
| 86 } else if (element is PropertyInducingElement) { |
| 87 return element.isStatic; |
| 88 } |
| 89 return false; |
| 90 } |
76 } | 91 } |
OLD | NEW |