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

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

Issue 686843003: add type static constants suggestions (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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.suggestion.builder; 5 library services.completion.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' hide Element, 8 import 'package:analysis_server/src/protocol_server.dart' hide Element,
9 ElementKind; 9 ElementKind;
10 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart'; 10 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 }); 87 });
88 } 88 }
89 } 89 }
90 90
91 /** 91 /**
92 * This class visits elements in a class and provides suggestions based upon 92 * This class visits elements in a class and provides suggestions based upon
93 * the visible members in that class. Clients should call 93 * the visible members in that class. Clients should call
94 * [ClassElementSuggestionBuilder.suggestionsFor]. 94 * [ClassElementSuggestionBuilder.suggestionsFor].
95 */ 95 */
96 class ClassElementSuggestionBuilder extends _AbstractSuggestionBuilder { 96 class ClassElementSuggestionBuilder extends _AbstractSuggestionBuilder {
97 final bool staticOnly;
97 98
98 ClassElementSuggestionBuilder(DartCompletionRequest request) : super(request); 99 ClassElementSuggestionBuilder(DartCompletionRequest request, {bool staticOnly:
100 false})
101 : super(request),
102 this.staticOnly = staticOnly;
99 103
100 @override 104 @override
101 visitClassElement(ClassElement element) { 105 visitClassElement(ClassElement element) {
102 element.visitChildren(this); 106 element.visitChildren(this);
103 element.allSupertypes.forEach((InterfaceType type) { 107 element.allSupertypes.forEach((InterfaceType type) {
104 type.element.visitChildren(this); 108 type.element.visitChildren(this);
105 }); 109 });
106 } 110 }
107 111
108 @override 112 @override
109 visitElement(Element element) { 113 visitElement(Element element) {
110 // ignored 114 // ignored
111 } 115 }
112 116
113 @override 117 @override
114 visitFieldElement(FieldElement element) { 118 visitFieldElement(FieldElement element) {
119 if (staticOnly && !element.isStatic) {
120 return;
121 }
115 _addElementSuggestion( 122 _addElementSuggestion(
116 element, 123 element,
117 CompletionSuggestionKind.GETTER, 124 CompletionSuggestionKind.GETTER,
118 element.type, 125 element.type,
119 element.enclosingElement); 126 element.enclosingElement);
120 } 127 }
121 128
122 @override 129 @override
123 visitMethodElement(MethodElement element) { 130 visitMethodElement(MethodElement element) {
131 if (staticOnly && !element.isStatic) {
132 return;
133 }
124 if (element.isOperator) { 134 if (element.isOperator) {
125 return; 135 return;
126 } 136 }
127 _addElementSuggestion( 137 _addElementSuggestion(
128 element, 138 element,
129 CompletionSuggestionKind.METHOD, 139 CompletionSuggestionKind.METHOD,
130 element.returnType, 140 element.returnType,
131 element.enclosingElement); 141 element.enclosingElement);
132 } 142 }
133 143
134 @override 144 @override
135 visitPropertyAccessorElement(PropertyAccessorElement element) { 145 visitPropertyAccessorElement(PropertyAccessorElement element) {
146 if (staticOnly && !element.isStatic) {
147 return;
148 }
136 if (element.isGetter) { 149 if (element.isGetter) {
137 _addElementSuggestion( 150 _addElementSuggestion(
138 element, 151 element,
139 CompletionSuggestionKind.GETTER, 152 CompletionSuggestionKind.GETTER,
140 element.returnType, 153 element.returnType,
141 element.enclosingElement); 154 element.enclosingElement);
142 } else if (element.isSetter) { 155 } else if (element.isSetter) {
143 _addElementSuggestion( 156 _addElementSuggestion(
144 element, 157 element,
145 CompletionSuggestionKind.SETTER, 158 CompletionSuggestionKind.SETTER,
146 element.returnType, 159 element.returnType,
147 element.enclosingElement); 160 element.enclosingElement);
148 } 161 }
149 } 162 }
150 163
151 /** 164 /**
152 * Add suggestions for the visible members in the given class 165 * Add suggestions for the visible members in the given class
153 */ 166 */
154 static void suggestionsFor(DartCompletionRequest request, Element element) { 167 static void suggestionsFor(DartCompletionRequest request, Element element) {
155 if (element is ClassElement) { 168 if (element is ClassElement) {
156 return element.accept(new ClassElementSuggestionBuilder(request)); 169 return element.accept(new ClassElementSuggestionBuilder(request));
157 } 170 }
158 } 171 }
172
173 /**
174 * Add suggestions for the visible static members in the given class
175 */
176 static void staticSuggestionsFor(DartCompletionRequest request,
177 ClassElement element) {
178 return element.accept(
179 new ClassElementSuggestionBuilder(request, staticOnly: true));
180 }
159 } 181 }
160 182
161 /** 183 /**
162 * This class visits elements in a library and provides suggestions based upon 184 * This class visits elements in a library and provides suggestions based upon
163 * the visible members in that library. Clients should call 185 * the visible members in that library. Clients should call
164 * [LibraryElementSuggestionBuilder.suggestionsFor]. 186 * [LibraryElementSuggestionBuilder.suggestionsFor].
165 */ 187 */
166 class LibraryElementSuggestionBuilder extends _AbstractSuggestionBuilder { 188 class LibraryElementSuggestionBuilder extends _AbstractSuggestionBuilder {
167 189
168 LibraryElementSuggestionBuilder(DartCompletionRequest request) 190 LibraryElementSuggestionBuilder(DartCompletionRequest request)
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 330 }
309 if (type != null) { 331 if (type != null) {
310 String typeName = type.displayName; 332 String typeName = type.displayName;
311 if (typeName != null && typeName.length > 0 && typeName != 'dynamic') { 333 if (typeName != null && typeName.length > 0 && typeName != 'dynamic') {
312 suggestion.returnType = typeName; 334 suggestion.returnType = typeName;
313 } 335 }
314 } 336 }
315 request.suggestions.add(suggestion); 337 request.suggestions.add(suggestion);
316 } 338 }
317 } 339 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698