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

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

Issue 560133003: Rollback https://codereview.chromium.org/575613002 (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 * Returns all the declarations of the given [ClassMemberElement] in 77 * @return all implementations of the given {@link ClassMemberElement} is its su perclasses and
78 * superclasses of the declaring class, and its subclasses if not [onlySuper]. 78 * their subclasses.
79 */ 79 */
80 Future<Set<ClassMemberElement>> getHierarchyMembers(SearchEngine searchEngine, 80 Future<Set<ClassMemberElement>> getHierarchyMembers(SearchEngine searchEngine,
81 ClassMemberElement member, bool onlySuper) { 81 ClassMemberElement member) {
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);
96 // ignore if super- class does not declare member 95 // ignore if super- class does not declare member
97 if (superClassMembers.isEmpty) { 96 if (getClassMembers(superClass, name).isEmpty) {
98 continue;
99 }
100 // add super- class members
101 _addClassMembers(result, superClassMembers);
102 if (onlySuper) {
103 continue; 97 continue;
104 } 98 }
105 // check all sub- classes 99 // check all sub- classes
106 var subClassFuture = getSubClasses(searchEngine, superClass); 100 var subClassFuture = getSubClasses(searchEngine, superClass);
107 var membersFuture = subClassFuture.then((Set<ClassElement> subClasses) { 101 var membersFuture = subClassFuture.then((Set<ClassElement> subClasses) {
102 subClasses.add(superClass);
108 for (ClassElement subClass in subClasses) { 103 for (ClassElement subClass in subClasses) {
109 List<Element> subClassMembers = getChildren(subClass, name); 104 List<Element> subClassMembers = getChildren(subClass, name);
110 _addClassMembers(result, subClassMembers); 105 for (Element member in subClassMembers) {
106 if (member is ClassMemberElement) {
107 result.add(member);
108 }
109 }
111 } 110 }
112 }); 111 });
113 futures.add(membersFuture); 112 futures.add(membersFuture);
114 } 113 }
115 return Future.wait(futures).then((_) { 114 return Future.wait(futures).then((_) {
116 return result; 115 return result;
117 }); 116 });
118 } 117 }
119 118
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
131 119
132 /** 120 /**
133 * Returns non-synthetic members of the given [ClassElement] and its super 121 * Returns non-synthetic members of the given [ClassElement] and its super
134 * classes. 122 * classes.
135 * 123 *
136 * Includes: fields, accessors and methods. 124 * Includes: fields, accessors and methods.
137 * Excludes: constructors and synthetic elements. 125 * Excludes: constructors and synthetic elements.
138 */ 126 */
139 List<Element> getMembers(ClassElement clazz) { 127 List<Element> getMembers(ClassElement clazz) {
140 List<Element> members = <Element>[]; 128 List<Element> members = <Element>[];
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 * its variable, otherwise returns [element]. 202 * its variable, otherwise returns [element].
215 */ 203 */
216 Element getSyntheticAccessorVariable(Element element) { 204 Element getSyntheticAccessorVariable(Element element) {
217 if (element is PropertyAccessorElement) { 205 if (element is PropertyAccessorElement) {
218 if (element.isSynthetic) { 206 if (element.isSynthetic) {
219 return element.variable; 207 return element.variable;
220 } 208 }
221 } 209 }
222 return element; 210 return element;
223 } 211 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698