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

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

Issue 829173003: Handle generic parameters correctly in invocation completions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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.invocation; 5 library services.completion.computer.dart.invocation;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart'; 9 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
10 import 'package:analysis_server/src/services/completion/optype.dart'; 10 import 'package:analysis_server/src/services/completion/optype.dart';
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 Future<bool> computeFull(AstNode node) { 57 Future<bool> computeFull(AstNode node) {
58 if (node is SimpleIdentifier) { 58 if (node is SimpleIdentifier) {
59 node = node.parent; 59 node = node.parent;
60 } 60 }
61 if (node is MethodInvocation) { 61 if (node is MethodInvocation) {
62 node = (node as MethodInvocation).realTarget; 62 node = (node as MethodInvocation).realTarget;
63 } else if (node is PropertyAccess) { 63 } else if (node is PropertyAccess) {
64 node = (node as PropertyAccess).realTarget; 64 node = (node as PropertyAccess).realTarget;
65 } 65 }
66 if (node is Expression) { 66 if (node is Expression) {
67 DartType type = node.bestType; 67 InterfaceTypeSuggestionBuilder.suggestionsFor(request, node.bestType);
68 if (type != null) { 68 return new Future.value(true);
69 ClassElementSuggestionBuilder.suggestionsFor(request, type.element);
70 return new Future.value(true);
71 }
72 } 69 }
73 return new Future.value(false); 70 return new Future.value(false);
74 } 71 }
75 } 72 }
76 73
77 /** 74 /**
78 * An [AstNode] vistor for determining which suggestion builder 75 * An [AstNode] vistor for determining which suggestion builder
79 * should be used to build invocation/access suggestions. 76 * should be used to build invocation/access suggestions.
80 */ 77 */
81 class _InvocationAstVisitor extends GeneralizingAstVisitor<SuggestionBuilder> { 78 class _InvocationAstVisitor extends GeneralizingAstVisitor<SuggestionBuilder> {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 151 }
155 } 152 }
156 return new Future.value(false); 153 return new Future.value(false);
157 } 154 }
158 155
159 @override 156 @override
160 Future<bool> visitClassElement(ClassElement element) { 157 Future<bool> visitClassElement(ClassElement element) {
161 if (element != null) { 158 if (element != null) {
162 InterfaceType type = element.type; 159 InterfaceType type = element.type;
163 if (type != null) { 160 if (type != null) {
164 ClassElementSuggestionBuilder.suggestionsFor( 161 StaticClassElementSuggestionBuilder.suggestionsFor(
165 request, 162 request,
166 type.element, 163 type.element);
167 staticOnly: true);
168 } 164 }
169 } 165 }
170 return new Future.value(false); 166 return new Future.value(false);
171 } 167 }
172 168
173 @override 169 @override
174 Future<bool> visitElement(Element element) { 170 Future<bool> visitElement(Element element) {
175 return new Future.value(false); 171 return new Future.value(false);
176 } 172 }
177 173
(...skipping 19 matching lines...) Expand all
197 } 193 }
198 }); 194 });
199 return new Future.value(modified); 195 return new Future.value(modified);
200 } 196 }
201 197
202 @override 198 @override
203 Future<bool> visitPropertyAccessorElement(PropertyAccessorElement element) { 199 Future<bool> visitPropertyAccessorElement(PropertyAccessorElement element) {
204 if (element != null) { 200 if (element != null) {
205 PropertyInducingElement elemVar = element.variable; 201 PropertyInducingElement elemVar = element.variable;
206 if (elemVar != null) { 202 if (elemVar != null) {
207 DartType type = elemVar.type; 203 InterfaceTypeSuggestionBuilder.suggestionsFor(request, elemVar.type);
208 if (type != null) {
209 ClassElementSuggestionBuilder.suggestionsFor(request, type.element);
210 }
211 } 204 }
212 return new Future.value(true); 205 return new Future.value(true);
213 } 206 }
214 return new Future.value(false); 207 return new Future.value(false);
215 } 208 }
216 209
217 @override 210 @override
218 Future<bool> visitVariableElement(VariableElement element) { 211 Future<bool> visitVariableElement(VariableElement element) {
219 DartType type = element.type; 212 InterfaceTypeSuggestionBuilder.suggestionsFor(request, element.type);
220 if (type != null) {
221 ClassElementSuggestionBuilder.suggestionsFor(request, type.element);
222 }
223 return new Future.value(true); 213 return new Future.value(true);
224 } 214 }
225 } 215 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698