| OLD | NEW |
| 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.toplevel; | 5 library services.completion.computer.dart.toplevel; |
| 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/protocol_server.dart' | 10 import 'package:analysis_server/src/protocol_server.dart' |
| 11 hide Element, ElementKind; | 11 hide Element, ElementKind; |
| 12 import 'package:analysis_server/src/services/completion/dart_completion_cache.da
rt'; | 12 import 'package:analysis_server/src/services/completion/dart_completion_cache.da
rt'; |
| 13 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; | 13 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; |
| 14 import 'package:analysis_server/src/services/completion/optype.dart'; | 14 import 'package:analysis_server/src/services/completion/optype.dart'; |
| 15 import 'package:analysis_server/src/services/completion/suggestion_builder.dart'
; | 15 import 'package:analysis_server/src/services/completion/suggestion_builder.dart'
; |
| 16 import 'package:analyzer/src/generated/ast.dart'; | 16 import 'package:analyzer/src/generated/ast.dart'; |
| 17 import 'package:analyzer/src/generated/element.dart'; | 17 import 'package:analyzer/src/generated/element.dart'; |
| 18 | 18 |
| 19 /** | 19 /** |
| 20 * A computer for calculating imported class and top level variable | 20 * A computer for calculating imported class and top level variable |
| 21 * `completion.getSuggestions` request results. | 21 * `completion.getSuggestions` request results. |
| 22 */ | 22 */ |
| 23 class ImportedComputer extends DartCompletionComputer { | 23 class ImportedComputer extends DartCompletionComputer { |
| 24 bool shouldWaitForLowPrioritySuggestions; | 24 bool shouldWaitForLowPrioritySuggestions; |
| 25 bool suggestionsComputed; |
| 25 _ImportedSuggestionBuilder builder; | 26 _ImportedSuggestionBuilder builder; |
| 26 | 27 |
| 27 ImportedComputer({this.shouldWaitForLowPrioritySuggestions: false}); | 28 ImportedComputer({this.shouldWaitForLowPrioritySuggestions: false}); |
| 28 | 29 |
| 29 @override | 30 @override |
| 30 bool computeFast(DartCompletionRequest request) { | 31 bool computeFast(DartCompletionRequest request) { |
| 31 OpType optype = request.optype; | 32 OpType optype = request.optype; |
| 32 if (optype.includeTopLevelSuggestions || | 33 if (optype.includeTopLevelSuggestions || |
| 33 optype.includeConstructorSuggestions) { | 34 optype.includeConstructorSuggestions) { |
| 34 builder = new _ImportedSuggestionBuilder(request, | 35 builder = new _ImportedSuggestionBuilder(request, |
| 35 typesOnly: optype.includeOnlyTypeNameSuggestions, | 36 typesOnly: optype.includeOnlyTypeNameSuggestions, |
| 36 excludeVoidReturn: !optype.includeVoidReturnSuggestions, | 37 excludeVoidReturn: !optype.includeVoidReturnSuggestions, |
| 37 constructorsOnly: optype.includeConstructorSuggestions); | 38 constructorsOnly: optype.includeConstructorSuggestions); |
| 38 builder.shouldWaitForLowPrioritySuggestions = | 39 builder.shouldWaitForLowPrioritySuggestions = |
| 39 shouldWaitForLowPrioritySuggestions; | 40 shouldWaitForLowPrioritySuggestions; |
| 40 return builder.computeFast(request.node); | 41 // If target is an argument in an argument list |
| 42 // then suggestions may need to be adjusted |
| 43 suggestionsComputed = builder.computeFast(request.node); |
| 44 return suggestionsComputed && request.target.argIndex == null; |
| 41 } | 45 } |
| 42 return true; | 46 return true; |
| 43 } | 47 } |
| 44 | 48 |
| 45 @override | 49 @override |
| 46 Future<bool> computeFull(DartCompletionRequest request) { | 50 Future<bool> computeFull(DartCompletionRequest request) { |
| 47 if (builder != null) { | 51 if (builder != null) { |
| 48 return builder.computeFull(request.node); | 52 if (!suggestionsComputed) { |
| 53 return builder.computeFull(request.node).then((bool result) { |
| 54 _updateSuggestions(request); |
| 55 return result; |
| 56 }); |
| 57 } |
| 58 _updateSuggestions(request); |
| 59 return new Future.value(true); |
| 49 } | 60 } |
| 50 return new Future.value(false); | 61 return new Future.value(false); |
| 51 } | 62 } |
| 63 |
| 64 /** |
| 65 * If target is a function argument, suggest identifiers not invocations |
| 66 */ |
| 67 void _updateSuggestions(DartCompletionRequest request) { |
| 68 if (request.target.isFunctionalArgument()) { |
| 69 request.convertInvocationsToIdentifiers(); |
| 70 } |
| 71 } |
| 52 } | 72 } |
| 53 | 73 |
| 54 /** | 74 /** |
| 55 * [_ImportedSuggestionBuilder] traverses the imports and builds suggestions | 75 * [_ImportedSuggestionBuilder] traverses the imports and builds suggestions |
| 56 * based upon imported elements. | 76 * based upon imported elements. |
| 57 */ | 77 */ |
| 58 class _ImportedSuggestionBuilder extends ElementSuggestionBuilder | 78 class _ImportedSuggestionBuilder extends ElementSuggestionBuilder |
| 59 implements SuggestionBuilder { | 79 implements SuggestionBuilder { |
| 60 bool shouldWaitForLowPrioritySuggestions; | 80 bool shouldWaitForLowPrioritySuggestions; |
| 61 final DartCompletionRequest request; | 81 final DartCompletionRequest request; |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 _addFilteredSuggestions(filterText, cache.libraryPrefixSuggestions); | 253 _addFilteredSuggestions(filterText, cache.libraryPrefixSuggestions); |
| 234 if (!typesOnly) { | 254 if (!typesOnly) { |
| 235 _addFilteredSuggestions(filterText, cache.otherImportedSuggestions); | 255 _addFilteredSuggestions(filterText, cache.otherImportedSuggestions); |
| 236 if (!excludeVoidReturn) { | 256 if (!excludeVoidReturn) { |
| 237 _addFilteredSuggestions( | 257 _addFilteredSuggestions( |
| 238 filterText, cache.importedVoidReturnSuggestions); | 258 filterText, cache.importedVoidReturnSuggestions); |
| 239 } | 259 } |
| 240 } | 260 } |
| 241 } | 261 } |
| 242 } | 262 } |
| OLD | NEW |