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

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

Issue 969113002: Reformat (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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.completion.computer.dart.local; 5 library services.completion.computer.dart.local;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/protocol.dart' as protocol show Element, 9 import 'package:analysis_server/src/protocol.dart' as protocol
10 ElementKind; 10 show Element, ElementKind;
11 import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind; 11 import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
12 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart'; 12 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
13 import 'package:analysis_server/src/services/completion/local_declaration_visito r.dart'; 13 import 'package:analysis_server/src/services/completion/local_declaration_visito r.dart';
14 import 'package:analysis_server/src/services/completion/optype.dart'; 14 import 'package:analysis_server/src/services/completion/optype.dart';
15 import 'package:analyzer/src/generated/ast.dart'; 15 import 'package:analyzer/src/generated/ast.dart';
16 import 'package:analyzer/src/generated/scanner.dart'; 16 import 'package:analyzer/src/generated/scanner.dart';
17 import 'package:analyzer/src/generated/utilities_dart.dart'; 17 import 'package:analyzer/src/generated/utilities_dart.dart';
18 18
19 /** 19 /**
20 * A computer for calculating `completion.getSuggestions` request results 20 * A computer for calculating `completion.getSuggestions` request results
21 * for the local library in which the completion is requested. 21 * for the local library in which the completion is requested.
22 */ 22 */
23 class LocalComputer extends DartCompletionComputer { 23 class LocalComputer extends DartCompletionComputer {
24
25 @override 24 @override
26 bool computeFast(DartCompletionRequest request) { 25 bool computeFast(DartCompletionRequest request) {
27 OpType optype = request.optype; 26 OpType optype = request.optype;
28 if (optype.includeTopLevelSuggestions) { 27 if (optype.includeTopLevelSuggestions) {
29 _LocalVisitor localVisitor = new _LocalVisitor( 28 _LocalVisitor localVisitor = new _LocalVisitor(request, request.offset,
30 request,
31 request.offset,
32 optype.includeOnlyTypeNameSuggestions, 29 optype.includeOnlyTypeNameSuggestions,
33 !optype.includeVoidReturnSuggestions); 30 !optype.includeVoidReturnSuggestions);
34 31
35 // Collect suggestions from the specific child [AstNode] that contains 32 // Collect suggestions from the specific child [AstNode] that contains
36 // the completion offset and all of its parents recursively. 33 // the completion offset and all of its parents recursively.
37 localVisitor.visit(request.node); 34 localVisitor.visit(request.node);
38 } 35 }
39 if (optype.includeStatementLabelSuggestions || 36 if (optype.includeStatementLabelSuggestions ||
40 optype.includeCaseLabelSuggestions) { 37 optype.includeCaseLabelSuggestions) {
41 _LabelVisitor labelVisitor = new _LabelVisitor( 38 _LabelVisitor labelVisitor = new _LabelVisitor(request,
42 request,
43 optype.includeStatementLabelSuggestions, 39 optype.includeStatementLabelSuggestions,
44 optype.includeCaseLabelSuggestions); 40 optype.includeCaseLabelSuggestions);
45 labelVisitor.visit(request.node); 41 labelVisitor.visit(request.node);
46 } 42 }
47 43
48 // If the unit is not a part and does not reference any parts 44 // If the unit is not a part and does not reference any parts
49 // then work is complete 45 // then work is complete
50 return !request.unit.directives.any( 46 return !request.unit.directives.any((Directive directive) =>
51 (Directive directive) => 47 directive is PartOfDirective || directive is PartDirective);
52 directive is PartOfDirective || directive is PartDirective);
53 } 48 }
54 49
55 @override 50 @override
56 Future<bool> computeFull(DartCompletionRequest request) { 51 Future<bool> computeFull(DartCompletionRequest request) {
57 // TODO: implement computeFull 52 // TODO: implement computeFull
58 // include results from part files that are included in the library 53 // include results from part files that are included in the library
59 return new Future.value(false); 54 return new Future.value(false);
60 } 55 }
61 } 56 }
62 57
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 void declaredMethod(MethodDeclaration declaration) { 121 void declaredMethod(MethodDeclaration declaration) {
127 // ignored 122 // ignored
128 } 123 }
129 124
130 @override 125 @override
131 void declaredParam(SimpleIdentifier name, TypeName type) { 126 void declaredParam(SimpleIdentifier name, TypeName type) {
132 // ignored 127 // ignored
133 } 128 }
134 129
135 @override 130 @override
136 void declaredTopLevelVar(VariableDeclarationList varList, 131 void declaredTopLevelVar(
137 VariableDeclaration varDecl) { 132 VariableDeclarationList varList, VariableDeclaration varDecl) {
138 // ignored 133 // ignored
139 } 134 }
140 135
141 @override 136 @override
142 void visitFunctionExpression(FunctionExpression node) { 137 void visitFunctionExpression(FunctionExpression node) {
143 // Labels are only accessible within the local function, so stop visiting 138 // Labels are only accessible within the local function, so stop visiting
144 // once we reach a function boundary. 139 // once we reach a function boundary.
145 finished(); 140 finished();
146 } 141 }
147 142
148 @override 143 @override
149 void visitMethodDeclaration(MethodDeclaration node) { 144 void visitMethodDeclaration(MethodDeclaration node) {
150 // Labels are only accessible within the local function, so stop visiting 145 // Labels are only accessible within the local function, so stop visiting
151 // once we reach a function boundary. 146 // once we reach a function boundary.
152 finished(); 147 finished();
153 } 148 }
154 149
155 CompletionSuggestion _addSuggestion(SimpleIdentifier id) { 150 CompletionSuggestion _addSuggestion(SimpleIdentifier id) {
156 if (id != null) { 151 if (id != null) {
157 String completion = id.name; 152 String completion = id.name;
158 if (completion != null && completion.length > 0 && completion != '_') { 153 if (completion != null && completion.length > 0 && completion != '_') {
159 CompletionSuggestion suggestion = new CompletionSuggestion( 154 CompletionSuggestion suggestion = new CompletionSuggestion(
160 CompletionSuggestionKind.IDENTIFIER, 155 CompletionSuggestionKind.IDENTIFIER, DART_RELEVANCE_DEFAULT,
161 DART_RELEVANCE_DEFAULT, 156 completion, completion.length, 0, false, false);
162 completion,
163 completion.length,
164 0,
165 false,
166 false);
167 request.suggestions.add(suggestion); 157 request.suggestions.add(suggestion);
168 return suggestion; 158 return suggestion;
169 } 159 }
170 } 160 }
171 return null; 161 return null;
172 } 162 }
173 163
174 /** 164 /**
175 * Create a new protocol Element for inclusion in a completion suggestion. 165 * Create a new protocol Element for inclusion in a completion suggestion.
176 */ 166 */
177 protocol.Element _createElement(protocol.ElementKind kind, 167 protocol.Element _createElement(
178 SimpleIdentifier id) { 168 protocol.ElementKind kind, SimpleIdentifier id) {
179 String name = id.name; 169 String name = id.name;
180 int flags = 170 int flags =
181 protocol.Element.makeFlags(isPrivate: Identifier.isPrivateName(name)); 171 protocol.Element.makeFlags(isPrivate: Identifier.isPrivateName(name));
182 return new protocol.Element(kind, name, flags); 172 return new protocol.Element(kind, name, flags);
183 } 173 }
184 } 174 }
185 175
186 /** 176 /**
187 * A visitor for collecting suggestions from the most specific child [AstNode] 177 * A visitor for collecting suggestions from the most specific child [AstNode]
188 * that contains the completion offset to the [CompilationUnit]. 178 * that contains the completion offset to the [CompilationUnit].
189 */ 179 */
190 class _LocalVisitor extends LocalDeclarationVisitor { 180 class _LocalVisitor extends LocalDeclarationVisitor {
191 static const DYNAMIC = 'dynamic'; 181 static const DYNAMIC = 'dynamic';
192 182
193 static final TypeName NO_RETURN_TYPE = new TypeName( 183 static final TypeName NO_RETURN_TYPE = new TypeName(
194 new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, '', 0)), 184 new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, '', 0)), null);
195 null);
196 185
197 final DartCompletionRequest request; 186 final DartCompletionRequest request;
198 final bool typesOnly; 187 final bool typesOnly;
199 final bool excludeVoidReturn; 188 final bool excludeVoidReturn;
200 189
201 _LocalVisitor(this.request, int offset, this.typesOnly, 190 _LocalVisitor(
202 this.excludeVoidReturn) 191 this.request, int offset, this.typesOnly, this.excludeVoidReturn)
203 : super(offset); 192 : super(offset);
204 193
205 @override 194 @override
206 void declaredClass(ClassDeclaration declaration) { 195 void declaredClass(ClassDeclaration declaration) {
207 bool isDeprecated = _isDeprecated(declaration); 196 bool isDeprecated = _isDeprecated(declaration);
208 CompletionSuggestion suggestion = _addSuggestion( 197 CompletionSuggestion suggestion = _addSuggestion(
209 declaration.name, 198 declaration.name, NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
210 NO_RETURN_TYPE,
211 isDeprecated,
212 DART_RELEVANCE_DEFAULT);
213 if (suggestion != null) { 199 if (suggestion != null) {
214 suggestion.element = _createElement( 200 suggestion.element = _createElement(
215 protocol.ElementKind.CLASS, 201 protocol.ElementKind.CLASS, declaration.name,
216 declaration.name,
217 returnType: NO_RETURN_TYPE, 202 returnType: NO_RETURN_TYPE,
218 isAbstract: declaration.isAbstract, 203 isAbstract: declaration.isAbstract,
219 isDeprecated: isDeprecated); 204 isDeprecated: isDeprecated);
220 } 205 }
221 } 206 }
222 207
223 @override 208 @override
224 void declaredClassTypeAlias(ClassTypeAlias declaration) { 209 void declaredClassTypeAlias(ClassTypeAlias declaration) {
225 bool isDeprecated = _isDeprecated(declaration); 210 bool isDeprecated = _isDeprecated(declaration);
226 CompletionSuggestion suggestion = _addSuggestion( 211 CompletionSuggestion suggestion = _addSuggestion(
227 declaration.name, 212 declaration.name, NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
228 NO_RETURN_TYPE,
229 isDeprecated,
230 DART_RELEVANCE_DEFAULT);
231 if (suggestion != null) { 213 if (suggestion != null) {
232 suggestion.element = _createElement( 214 suggestion.element = _createElement(
233 protocol.ElementKind.CLASS_TYPE_ALIAS, 215 protocol.ElementKind.CLASS_TYPE_ALIAS, declaration.name,
234 declaration.name,
235 returnType: NO_RETURN_TYPE, 216 returnType: NO_RETURN_TYPE,
236 isAbstract: true, 217 isAbstract: true,
237 isDeprecated: isDeprecated); 218 isDeprecated: isDeprecated);
238 } 219 }
239 } 220 }
240 221
241 @override 222 @override
242 void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) { 223 void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
243 if (typesOnly) { 224 if (typesOnly) {
244 return; 225 return;
245 } 226 }
246 bool isDeprecated = _isDeprecated(fieldDecl) || _isDeprecated(varDecl); 227 bool isDeprecated = _isDeprecated(fieldDecl) || _isDeprecated(varDecl);
247 TypeName type = fieldDecl.fields.type; 228 TypeName type = fieldDecl.fields.type;
248 CompletionSuggestion suggestion = _addSuggestion( 229 CompletionSuggestion suggestion = _addSuggestion(
249 varDecl.name, 230 varDecl.name, type, isDeprecated, DART_RELEVANCE_LOCAL_FIELD,
250 type,
251 isDeprecated,
252 DART_RELEVANCE_LOCAL_FIELD,
253 classDecl: fieldDecl.parent); 231 classDecl: fieldDecl.parent);
254 if (suggestion != null) { 232 if (suggestion != null) {
255 suggestion.element = _createElement( 233 suggestion.element = _createElement(
256 protocol.ElementKind.FIELD, 234 protocol.ElementKind.FIELD, varDecl.name,
257 varDecl.name, 235 returnType: type, isDeprecated: isDeprecated);
258 returnType: type,
259 isDeprecated: isDeprecated);
260 } 236 }
261 } 237 }
262 238
263 @override 239 @override
264 void declaredFunction(FunctionDeclaration declaration) { 240 void declaredFunction(FunctionDeclaration declaration) {
265 if (typesOnly) { 241 if (typesOnly) {
266 return; 242 return;
267 } 243 }
268 TypeName returnType = declaration.returnType; 244 TypeName returnType = declaration.returnType;
269 bool isDeprecated = _isDeprecated(declaration); 245 bool isDeprecated = _isDeprecated(declaration);
(...skipping 10 matching lines...) Expand all
280 returnType = NO_RETURN_TYPE; 256 returnType = NO_RETURN_TYPE;
281 defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR; 257 defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
282 } else { 258 } else {
283 if (excludeVoidReturn && _isVoid(returnType)) { 259 if (excludeVoidReturn && _isVoid(returnType)) {
284 return; 260 return;
285 } 261 }
286 kind = protocol.ElementKind.FUNCTION; 262 kind = protocol.ElementKind.FUNCTION;
287 defaultRelevance = DART_RELEVANCE_LOCAL_FUNCTION; 263 defaultRelevance = DART_RELEVANCE_LOCAL_FUNCTION;
288 } 264 }
289 CompletionSuggestion suggestion = _addSuggestion( 265 CompletionSuggestion suggestion = _addSuggestion(
290 declaration.name, 266 declaration.name, returnType, isDeprecated, defaultRelevance);
291 returnType,
292 isDeprecated,
293 defaultRelevance);
294 if (suggestion != null) { 267 if (suggestion != null) {
295 FormalParameterList param = declaration.functionExpression.parameters; 268 FormalParameterList param = declaration.functionExpression.parameters;
296 suggestion.element = _createElement( 269 suggestion.element = _createElement(kind, declaration.name,
297 kind,
298 declaration.name,
299 parameters: param != null ? param.toSource() : null, 270 parameters: param != null ? param.toSource() : null,
300 returnType: returnType, 271 returnType: returnType,
301 isDeprecated: isDeprecated); 272 isDeprecated: isDeprecated);
302 if (kind == protocol.ElementKind.FUNCTION) { 273 if (kind == protocol.ElementKind.FUNCTION) {
303 _addParameterInfo( 274 _addParameterInfo(
304 suggestion, 275 suggestion, declaration.functionExpression.parameters);
305 declaration.functionExpression.parameters);
306 } 276 }
307 } 277 }
308 } 278 }
309 279
310 @override 280 @override
311 void declaredFunctionTypeAlias(FunctionTypeAlias declaration) { 281 void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
312 bool isDeprecated = _isDeprecated(declaration); 282 bool isDeprecated = _isDeprecated(declaration);
313 TypeName returnType = declaration.returnType; 283 TypeName returnType = declaration.returnType;
314 CompletionSuggestion suggestion = _addSuggestion( 284 CompletionSuggestion suggestion = _addSuggestion(
315 declaration.name, 285 declaration.name, returnType, isDeprecated, DART_RELEVANCE_DEFAULT);
316 returnType,
317 isDeprecated,
318 DART_RELEVANCE_DEFAULT);
319 if (suggestion != null) { 286 if (suggestion != null) {
320 // TODO (danrubel) determine parameters and return type 287 // TODO (danrubel) determine parameters and return type
321 suggestion.element = _createElement( 288 suggestion.element = _createElement(
322 protocol.ElementKind.FUNCTION_TYPE_ALIAS, 289 protocol.ElementKind.FUNCTION_TYPE_ALIAS, declaration.name,
323 declaration.name, 290 returnType: returnType, isAbstract: true, isDeprecated: isDeprecated);
324 returnType: returnType,
325 isAbstract: true,
326 isDeprecated: isDeprecated);
327 } 291 }
328 } 292 }
329 293
330 @override 294 @override
331 void declaredLabel(Label label, bool isCaseLabel) { 295 void declaredLabel(Label label, bool isCaseLabel) {
332 // ignored 296 // ignored
333 } 297 }
334 298
335 @override 299 @override
336 void declaredLocalVar(SimpleIdentifier name, TypeName type) { 300 void declaredLocalVar(SimpleIdentifier name, TypeName type) {
337 if (typesOnly) { 301 if (typesOnly) {
338 return; 302 return;
339 } 303 }
340 CompletionSuggestion suggestion = 304 CompletionSuggestion suggestion =
341 _addSuggestion(name, type, false, DART_RELEVANCE_LOCAL_VARIABLE); 305 _addSuggestion(name, type, false, DART_RELEVANCE_LOCAL_VARIABLE);
342 if (suggestion != null) { 306 if (suggestion != null) {
343 suggestion.element = 307 suggestion.element = _createElement(
344 _createElement(protocol.ElementKind.LOCAL_VARIABLE, name, returnType: type); 308 protocol.ElementKind.LOCAL_VARIABLE, name, returnType: type);
345 } 309 }
346 } 310 }
347 311
348 @override 312 @override
349 void declaredMethod(MethodDeclaration declaration) { 313 void declaredMethod(MethodDeclaration declaration) {
350 if (typesOnly) { 314 if (typesOnly) {
351 return; 315 return;
352 } 316 }
353 protocol.ElementKind kind; 317 protocol.ElementKind kind;
354 String parameters; 318 String parameters;
(...skipping 13 matching lines...) Expand all
368 } else { 332 } else {
369 if (excludeVoidReturn && _isVoid(returnType)) { 333 if (excludeVoidReturn && _isVoid(returnType)) {
370 return; 334 return;
371 } 335 }
372 kind = protocol.ElementKind.METHOD; 336 kind = protocol.ElementKind.METHOD;
373 parameters = declaration.parameters.toSource(); 337 parameters = declaration.parameters.toSource();
374 defaultRelevance = DART_RELEVANCE_LOCAL_METHOD; 338 defaultRelevance = DART_RELEVANCE_LOCAL_METHOD;
375 } 339 }
376 bool isDeprecated = _isDeprecated(declaration); 340 bool isDeprecated = _isDeprecated(declaration);
377 CompletionSuggestion suggestion = _addSuggestion( 341 CompletionSuggestion suggestion = _addSuggestion(
378 declaration.name, 342 declaration.name, returnType, isDeprecated, defaultRelevance,
379 returnType,
380 isDeprecated,
381 defaultRelevance,
382 classDecl: declaration.parent); 343 classDecl: declaration.parent);
383 if (suggestion != null) { 344 if (suggestion != null) {
384 suggestion.element = _createElement( 345 suggestion.element = _createElement(kind, declaration.name,
385 kind,
386 declaration.name,
387 parameters: parameters, 346 parameters: parameters,
388 returnType: returnType, 347 returnType: returnType,
389 isAbstract: declaration.isAbstract, 348 isAbstract: declaration.isAbstract,
390 isDeprecated: isDeprecated); 349 isDeprecated: isDeprecated);
391 if (kind == protocol.ElementKind.METHOD) { 350 if (kind == protocol.ElementKind.METHOD) {
392 _addParameterInfo(suggestion, declaration.parameters); 351 _addParameterInfo(suggestion, declaration.parameters);
393 } 352 }
394 } 353 }
395 } 354 }
396 355
397 @override 356 @override
398 void declaredParam(SimpleIdentifier name, TypeName type) { 357 void declaredParam(SimpleIdentifier name, TypeName type) {
399 if (typesOnly) { 358 if (typesOnly) {
400 return; 359 return;
401 } 360 }
402 CompletionSuggestion suggestion = 361 CompletionSuggestion suggestion =
403 _addSuggestion(name, type, false, DART_RELEVANCE_PARAMETER); 362 _addSuggestion(name, type, false, DART_RELEVANCE_PARAMETER);
404 if (suggestion != null) { 363 if (suggestion != null) {
405 suggestion.element = 364 suggestion.element = _createElement(protocol.ElementKind.PARAMETER, name,
406 _createElement(protocol.ElementKind.PARAMETER, name, returnType: type) ; 365 returnType: type);
407 } 366 }
408 } 367 }
409 368
410 @override 369 @override
411 void declaredTopLevelVar(VariableDeclarationList varList, 370 void declaredTopLevelVar(
412 VariableDeclaration varDecl) { 371 VariableDeclarationList varList, VariableDeclaration varDecl) {
413 if (typesOnly) { 372 if (typesOnly) {
414 return; 373 return;
415 } 374 }
416 bool isDeprecated = _isDeprecated(varList) || _isDeprecated(varDecl); 375 bool isDeprecated = _isDeprecated(varList) || _isDeprecated(varDecl);
417 CompletionSuggestion suggestion = _addSuggestion( 376 CompletionSuggestion suggestion = _addSuggestion(varDecl.name, varList.type,
418 varDecl.name, 377 isDeprecated, DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
419 varList.type,
420 isDeprecated,
421 DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
422 if (suggestion != null) { 378 if (suggestion != null) {
423 suggestion.element = _createElement( 379 suggestion.element = _createElement(
424 protocol.ElementKind.TOP_LEVEL_VARIABLE, 380 protocol.ElementKind.TOP_LEVEL_VARIABLE, varDecl.name,
425 varDecl.name, 381 returnType: varList.type, isDeprecated: isDeprecated);
426 returnType: varList.type,
427 isDeprecated: isDeprecated);
428 } 382 }
429 } 383 }
430 384
431 void _addParameterInfo(CompletionSuggestion suggestion, 385 void _addParameterInfo(
432 FormalParameterList parameters) { 386 CompletionSuggestion suggestion, FormalParameterList parameters) {
433 var paramList = parameters.parameters; 387 var paramList = parameters.parameters;
434 suggestion.parameterNames = 388 suggestion.parameterNames = paramList
435 paramList.map((FormalParameter param) => param.identifier.name).toList() ; 389 .map((FormalParameter param) => param.identifier.name)
390 .toList();
436 suggestion.parameterTypes = paramList.map((FormalParameter param) { 391 suggestion.parameterTypes = paramList.map((FormalParameter param) {
437 TypeName type = null; 392 TypeName type = null;
438 if (param is DefaultFormalParameter) { 393 if (param is DefaultFormalParameter) {
439 NormalFormalParameter child = param.parameter; 394 NormalFormalParameter child = param.parameter;
440 if (child is SimpleFormalParameter) { 395 if (child is SimpleFormalParameter) {
441 type = child.type; 396 type = child.type;
442 } else if (child is FieldFormalParameter) { 397 } else if (child is FieldFormalParameter) {
443 type = child.type; 398 type = child.type;
444 } 399 }
445 } 400 }
446 if (param is SimpleFormalParameter) { 401 if (param is SimpleFormalParameter) {
447 type = param.type; 402 type = param.type;
448 } else if (param is FieldFormalParameter) { 403 } else if (param is FieldFormalParameter) {
449 type = param.type; 404 type = param.type;
450 } 405 }
451 if (type == null) { 406 if (type == null) {
452 return 'dynamic'; 407 return 'dynamic';
453 } 408 }
454 Identifier typeId = type.name; 409 Identifier typeId = type.name;
455 if (typeId == null) { 410 if (typeId == null) {
456 return 'dynamic'; 411 return 'dynamic';
457 } 412 }
458 return typeId.name; 413 return typeId.name;
459 }).toList(); 414 }).toList();
460 suggestion.requiredParameterCount = paramList.where( 415 suggestion.requiredParameterCount = paramList.where(
461 (FormalParameter param) => param is! DefaultFormalParameter).length; 416 (FormalParameter param) => param is! DefaultFormalParameter).length;
462 suggestion.hasNamedParameters = 417 suggestion.hasNamedParameters = paramList
463 paramList.any((FormalParameter param) => param.kind == ParameterKind.NAM ED); 418 .any((FormalParameter param) => param.kind == ParameterKind.NAMED);
464 } 419 }
465 420
466 CompletionSuggestion _addSuggestion(SimpleIdentifier id, TypeName returnType, 421 CompletionSuggestion _addSuggestion(SimpleIdentifier id, TypeName returnType,
467 bool isDeprecated, int defaultRelevance, {ClassDeclaration classDecl}) { 422 bool isDeprecated, int defaultRelevance, {ClassDeclaration classDecl}) {
468 if (id != null) { 423 if (id != null) {
469 String completion = id.name; 424 String completion = id.name;
470 if (completion != null && completion.length > 0 && completion != '_') { 425 if (completion != null && completion.length > 0 && completion != '_') {
471 CompletionSuggestion suggestion = new CompletionSuggestion( 426 CompletionSuggestion suggestion = new CompletionSuggestion(
472 CompletionSuggestionKind.INVOCATION, 427 CompletionSuggestionKind.INVOCATION,
473 isDeprecated ? DART_RELEVANCE_LOW : defaultRelevance, 428 isDeprecated ? DART_RELEVANCE_LOW : defaultRelevance, completion,
474 completion, 429 completion.length, 0, isDeprecated, false,
475 completion.length,
476 0,
477 isDeprecated,
478 false,
479 returnType: _nameForType(returnType)); 430 returnType: _nameForType(returnType));
480 if (classDecl != null) { 431 if (classDecl != null) {
481 SimpleIdentifier identifier = classDecl.name; 432 SimpleIdentifier identifier = classDecl.name;
482 if (identifier != null) { 433 if (identifier != null) {
483 String name = identifier.name; 434 String name = identifier.name;
484 if (name != null && name.length > 0) { 435 if (name != null && name.length > 0) {
485 suggestion.declaringType = name; 436 suggestion.declaringType = name;
486 } 437 }
487 } 438 }
488 } 439 }
489 request.suggestions.add(suggestion); 440 request.suggestions.add(suggestion);
490 return suggestion; 441 return suggestion;
491 } 442 }
492 } 443 }
493 return null; 444 return null;
494 } 445 }
495 446
496
497 /** 447 /**
498 * Create a new protocol Element for inclusion in a completion suggestion. 448 * Create a new protocol Element for inclusion in a completion suggestion.
499 */ 449 */
500 protocol.Element _createElement(protocol.ElementKind kind, 450 protocol.Element _createElement(
501 SimpleIdentifier id, {String parameters, TypeName returnType, bool isAbstr act: 451 protocol.ElementKind kind, SimpleIdentifier id, {String parameters,
502 false, bool isDeprecated: false}) { 452 TypeName returnType, bool isAbstract: false, bool isDeprecated: false}) {
503 String name = id.name; 453 String name = id.name;
504 int flags = protocol.Element.makeFlags( 454 int flags = protocol.Element.makeFlags(
505 isAbstract: isAbstract, 455 isAbstract: isAbstract,
506 isDeprecated: isDeprecated, 456 isDeprecated: isDeprecated,
507 isPrivate: Identifier.isPrivateName(name)); 457 isPrivate: Identifier.isPrivateName(name));
508 return new protocol.Element( 458 return new protocol.Element(kind, name, flags,
509 kind, 459 parameters: parameters, returnType: _nameForType(returnType));
510 name,
511 flags,
512 parameters: parameters,
513 returnType: _nameForType(returnType));
514 } 460 }
515 461
516 /** 462 /**
517 * Return `true` if the @deprecated annotation is present 463 * Return `true` if the @deprecated annotation is present
518 */ 464 */
519 bool _isDeprecated(AnnotatedNode node) { 465 bool _isDeprecated(AnnotatedNode node) {
520 if (node != null) { 466 if (node != null) {
521 NodeList<Annotation> metadata = node.metadata; 467 NodeList<Annotation> metadata = node.metadata;
522 if (metadata != null) { 468 if (metadata != null) {
523 return metadata.any((Annotation a) { 469 return metadata.any((Annotation a) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 if (name == null || name.length <= 0) { 502 if (name == null || name.length <= 0) {
557 return DYNAMIC; 503 return DYNAMIC;
558 } 504 }
559 TypeArgumentList typeArgs = type.typeArguments; 505 TypeArgumentList typeArgs = type.typeArguments;
560 if (typeArgs != null) { 506 if (typeArgs != null) {
561 //TODO (danrubel) include type arguments 507 //TODO (danrubel) include type arguments
562 } 508 }
563 return name; 509 return name;
564 } 510 }
565 } 511 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698