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

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

Issue 977223003: When target requires a function, propose a function reference, not an invocation (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge and remove unnecessary statement 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.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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698