| 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.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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |