Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: pkg/analysis_server/lib/src/services/search/hierarchy.dart

Issue 575613002: Issue 19697. Partial fix - don't search for subclasss members. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 services.hierarchy; 5 library services.hierarchy;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analysis_server/src/services/search/element_visitors.dart'; 10 import 'package:analysis_server/src/services/search/element_visitors.dart';
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 if (subClass.context == seed.context) { 67 if (subClass.context == seed.context) {
68 subClasses.add(subClass); 68 subClasses.add(subClass);
69 } 69 }
70 } 70 }
71 return subClasses; 71 return subClasses;
72 }); 72 });
73 } 73 }
74 74
75 75
76 /** 76 /**
77 * @return all implementations of the given {@link ClassMemberElement} is its su perclasses and 77 * Returns all the declarations of the given [ClassMemberElement] in
78 * their subclasses. 78 * superclasses of the declaring class, and its subclasses if not [onlySuper].
79 */ 79 */
80 Future<Set<ClassMemberElement>> getHierarchyMembers(SearchEngine searchEngine, 80 Future<Set<ClassMemberElement>> getHierarchyMembers(SearchEngine searchEngine,
81 ClassMemberElement member) { 81 ClassMemberElement member, bool onlySuper) {
82 Set<ClassMemberElement> result = new HashSet<ClassMemberElement>(); 82 Set<ClassMemberElement> result = new HashSet<ClassMemberElement>();
83 // constructor 83 // constructor
84 if (member is ConstructorElement) { 84 if (member is ConstructorElement) {
85 result.add(member); 85 result.add(member);
86 return new Future.value(result); 86 return new Future.value(result);
87 } 87 }
88 // method, field, etc 88 // method, field, etc
89 String name = member.displayName; 89 String name = member.displayName;
90 ClassElement memberClass = member.enclosingElement; 90 ClassElement memberClass = member.enclosingElement;
91 List<Future> futures = <Future>[]; 91 List<Future> futures = <Future>[];
92 Set<ClassElement> searchClasses = getSuperClasses(memberClass); 92 Set<ClassElement> searchClasses = getSuperClasses(memberClass);
93 searchClasses.add(memberClass); 93 searchClasses.add(memberClass);
94 for (ClassElement superClass in searchClasses) { 94 for (ClassElement superClass in searchClasses) {
95 List<Element> superClassMembers = getChildren(superClass, name);
95 // ignore if super- class does not declare member 96 // ignore if super- class does not declare member
96 if (getClassMembers(superClass, name).isEmpty) { 97 if (superClassMembers.isEmpty) {
98 continue;
99 }
100 // add super- class members
101 _addClassMembers(result, superClassMembers);
102 if (onlySuper) {
97 continue; 103 continue;
98 } 104 }
99 // check all sub- classes 105 // check all sub- classes
100 var subClassFuture = getSubClasses(searchEngine, superClass); 106 var subClassFuture = getSubClasses(searchEngine, superClass);
101 var membersFuture = subClassFuture.then((Set<ClassElement> subClasses) { 107 var membersFuture = subClassFuture.then((Set<ClassElement> subClasses) {
102 subClasses.add(superClass);
103 for (ClassElement subClass in subClasses) { 108 for (ClassElement subClass in subClasses) {
104 List<Element> subClassMembers = getChildren(subClass, name); 109 List<Element> subClassMembers = getChildren(subClass, name);
105 for (Element member in subClassMembers) { 110 _addClassMembers(result, subClassMembers);
106 if (member is ClassMemberElement) {
107 result.add(member);
108 }
109 }
110 } 111 }
111 }); 112 });
112 futures.add(membersFuture); 113 futures.add(membersFuture);
113 } 114 }
114 return Future.wait(futures).then((_) { 115 return Future.wait(futures).then((_) {
115 return result; 116 return result;
116 }); 117 });
117 } 118 }
118 119
120 /**
121 * Adds [ClassMemberElement]s from [elements] to [result].
122 */
123 void _addClassMembers(Set<ClassMemberElement> result, List<Element> elements) {
124 for (Element member in elements) {
125 if (member is ClassMemberElement) {
126 result.add(member);
127 }
128 }
129 }
130
119 131
120 /** 132 /**
121 * Returns non-synthetic members of the given [ClassElement] and its super 133 * Returns non-synthetic members of the given [ClassElement] and its super
122 * classes. 134 * classes.
123 * 135 *
124 * Includes: fields, accessors and methods. 136 * Includes: fields, accessors and methods.
125 * Excludes: constructors and synthetic elements. 137 * Excludes: constructors and synthetic elements.
126 */ 138 */
127 List<Element> getMembers(ClassElement clazz) { 139 List<Element> getMembers(ClassElement clazz) {
128 List<Element> members = <Element>[]; 140 List<Element> members = <Element>[];
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 * its variable, otherwise returns [element]. 214 * its variable, otherwise returns [element].
203 */ 215 */
204 Element getSyntheticAccessorVariable(Element element) { 216 Element getSyntheticAccessorVariable(Element element) {
205 if (element is PropertyAccessorElement) { 217 if (element is PropertyAccessorElement) {
206 if (element.isSynthetic) { 218 if (element.isSynthetic) {
207 return element.variable; 219 return element.variable;
208 } 220 }
209 } 221 }
210 return element; 222 return element;
211 } 223 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698