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

Side by Side Diff: pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart

Issue 1516473002: CombinatorContributor and LibraryMemberContributor - consolidate common behavior (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years 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
« no previous file with comments | « pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 services.completion.dart.suggestion.builder; 5 library services.completion.dart.suggestion.builder;
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/protocol_server.dart' 8 import 'package:analysis_server/src/protocol_server.dart'
9 hide Element, ElementKind; 9 hide Element, ElementKind;
10 import 'package:analyzer/src/generated/element.dart'; 10 import 'package:analyzer/src/generated/element.dart';
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 * A collection of completion suggestions. 105 * A collection of completion suggestions.
106 */ 106 */
107 final List<CompletionSuggestion> suggestions = <CompletionSuggestion>[]; 107 final List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
108 108
109 /** 109 /**
110 * Return the kind of suggestions that should be built. 110 * Return the kind of suggestions that should be built.
111 */ 111 */
112 CompletionSuggestionKind get kind; 112 CompletionSuggestionKind get kind;
113 113
114 /** 114 /**
115 * Return the request on which the builder is operating. 115 * Return the library in which the completion is requested.
116 */ 116 */
117 DartCompletionRequest get request; 117 LibraryElement get containingLibrary;
118 118
119 /** 119 /**
120 * Add a suggestion based upon the given element. 120 * Add a suggestion based upon the given element.
121 */ 121 */
122 void addSuggestion(Element element, 122 void addSuggestion(Element element,
123 {String prefix, int relevance: DART_RELEVANCE_DEFAULT}) { 123 {String prefix, int relevance: DART_RELEVANCE_DEFAULT}) {
124 if (element.isPrivate) { 124 if (element.isPrivate) {
125 LibraryElement elementLibrary = element.library; 125 if (element.library != containingLibrary) {
126 CompilationUnitElement unitElem = request.target.unit.element;
127 if (unitElem == null) {
128 return;
129 }
130 LibraryElement unitLibrary = unitElem.library;
131 if (elementLibrary != unitLibrary) {
132 return; 126 return;
133 } 127 }
134 } 128 }
135 if (prefix == null && element.isSynthetic) { 129 if (prefix == null && element.isSynthetic) {
136 if ((element is PropertyAccessorElement) || 130 if ((element is PropertyAccessorElement) ||
137 element is FieldElement && !_isSpecialEnumField(element)) { 131 element is FieldElement && !_isSpecialEnumField(element)) {
138 return; 132 return;
139 } 133 }
140 } 134 }
141 String completion = element.displayName; 135 String completion = element.displayName;
(...skipping 24 matching lines...) Expand all
166 if (element.name == 'values') { 160 if (element.name == 'values') {
167 return true; 161 return true;
168 } 162 }
169 } 163 }
170 return false; 164 return false;
171 } 165 }
172 } 166 }
173 167
174 /** 168 /**
175 * This class visits elements in a library and provides suggestions based upon 169 * This class visits elements in a library and provides suggestions based upon
176 * the visible members in that library. Clients should call 170 * the visible members in that library.
177 * [LibraryElementSuggestionBuilder.suggestionsFor].
178 */ 171 */
179 class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor 172 class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor
180 with ElementSuggestionBuilder { 173 with ElementSuggestionBuilder {
181 final DartCompletionRequest request; 174 final LibraryElement containingLibrary;
182 final CompletionSuggestionKind kind; 175 final CompletionSuggestionKind kind;
183 final bool typesOnly; 176 final bool typesOnly;
184 final bool instCreation; 177 final bool instCreation;
185 178
186 LibraryElementSuggestionBuilder( 179 LibraryElementSuggestionBuilder(
187 this.request, this.kind, this.typesOnly, this.instCreation); 180 this.containingLibrary, this.kind, this.typesOnly, this.instCreation);
188 181
189 @override 182 @override
190 visitClassElement(ClassElement element) { 183 visitClassElement(ClassElement element) {
191 if (instCreation) { 184 if (instCreation) {
192 element.visitChildren(this); 185 element.visitChildren(this);
193 } else { 186 } else {
194 addSuggestion(element); 187 addSuggestion(element);
195 } 188 }
196 } 189 }
197 190
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 addSuggestion(element); 230 addSuggestion(element);
238 } 231 }
239 } 232 }
240 233
241 @override 234 @override
242 visitTopLevelVariableElement(TopLevelVariableElement element) { 235 visitTopLevelVariableElement(TopLevelVariableElement element) {
243 if (!typesOnly) { 236 if (!typesOnly) {
244 addSuggestion(element); 237 addSuggestion(element);
245 } 238 }
246 } 239 }
247
248 /**
249 * Add suggestions for the visible members in the given library
250 */
251 static void suggestionsFor(
252 DartCompletionRequest request,
253 CompletionSuggestionKind kind,
254 LibraryElement library,
255 bool typesOnly,
256 bool instCreation) {
257 if (library != null) {
258 library.visitChildren(new LibraryElementSuggestionBuilder(
259 request, kind, typesOnly, instCreation));
260 }
261 }
262 } 240 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698