| 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.dart.cache; | 5 library services.completion.dart.cache; |
| 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/completion_manager.dart'
; | 12 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; |
| 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/suggestion_builder.dart'
; | 14 import 'package:analysis_server/src/services/completion/suggestion_builder.dart'
; |
| 15 import 'package:analysis_server/src/services/search/search_engine.dart'; | 15 import 'package:analysis_server/src/services/search/search_engine.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 import 'package:analyzer/src/generated/engine.dart'; | 18 import 'package:analyzer/src/generated/engine.dart'; |
| 19 import 'package:analyzer/src/generated/resolver.dart'; | 19 import 'package:analyzer/src/generated/resolver.dart'; |
| 20 import 'package:analyzer/src/generated/source.dart'; | 20 import 'package:analyzer/src/generated/source.dart'; |
| 21 import 'package:analyzer/src/task/dart.dart'; |
| 21 | 22 |
| 22 /** | 23 /** |
| 23 * The `DartCompletionCache` contains cached information from a prior code | 24 * The `DartCompletionCache` contains cached information from a prior code |
| 24 * completion operation. | 25 * completion operation. |
| 25 */ | 26 */ |
| 26 class DartCompletionCache extends CompletionCache { | 27 class DartCompletionCache extends CompletionCache { |
| 27 /** | 28 /** |
| 28 * A hash of the import directives | 29 * A hash of the import directives |
| 29 * or `null` if nothing has been cached. | 30 * or `null` if nothing has been cached. |
| 30 */ | 31 */ |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 * or `null` if nothing has been cached. | 86 * or `null` if nothing has been cached. |
| 86 */ | 87 */ |
| 87 String get importKey => _importKey; | 88 String get importKey => _importKey; |
| 88 | 89 |
| 89 /** | 90 /** |
| 90 * Return the [ClassElement] for Object. | 91 * Return the [ClassElement] for Object. |
| 91 */ | 92 */ |
| 92 ClassElement get objectClassElement { | 93 ClassElement get objectClassElement { |
| 93 if (_objectClassElement == null) { | 94 if (_objectClassElement == null) { |
| 94 Source coreUri = context.sourceFactory.forUri('dart:core'); | 95 Source coreUri = context.sourceFactory.forUri('dart:core'); |
| 95 LibraryElement coreLib = context.getLibraryElement(coreUri); | 96 LibraryElement coreLib = context.getResult(coreUri, LIBRARY_ELEMENT8); |
| 96 _objectClassElement = coreLib.getType('Object'); | 97 _objectClassElement = coreLib.getType('Object'); |
| 97 } | 98 } |
| 98 return _objectClassElement; | 99 return _objectClassElement; |
| 99 } | 100 } |
| 100 | 101 |
| 101 /** | 102 /** |
| 102 * Given a resolved compilation unit, compute suggestions based upon the | 103 * Given a resolved compilation unit, compute suggestions based upon the |
| 103 * imports and other dart files (e.g. "part" files) in the library containing | 104 * imports and other dart files (e.g. "part" files) in the library containing |
| 104 * the given compilation unit. The returned future completes when the cache | 105 * the given compilation unit. The returned future completes when the cache |
| 105 * is populated. | 106 * is populated. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 } | 193 } |
| 193 } | 194 } |
| 194 } | 195 } |
| 195 } | 196 } |
| 196 | 197 |
| 197 /** | 198 /** |
| 198 * Add suggestions for implicitly imported elements in dart:core. | 199 * Add suggestions for implicitly imported elements in dart:core. |
| 199 */ | 200 */ |
| 200 void _addDartCoreSuggestions() { | 201 void _addDartCoreSuggestions() { |
| 201 Source coreUri = context.sourceFactory.forUri('dart:core'); | 202 Source coreUri = context.sourceFactory.forUri('dart:core'); |
| 202 LibraryElement coreLib = context.getLibraryElement(coreUri); | 203 LibraryElement coreLib = context.getResult(coreUri, LIBRARY_ELEMENT8); |
| 203 if (coreLib == null) { | 204 if (coreLib == null) { |
| 204 // If the core library has not been analyzed yet, then we cannot add any | 205 // If the core library has not been analyzed yet, then we cannot add any |
| 205 // suggestions from it. | 206 // suggestions from it. |
| 206 return; | 207 return; |
| 207 } | 208 } |
| 208 Namespace coreNamespace = | 209 Namespace coreNamespace = |
| 209 new NamespaceBuilder().createPublicNamespaceForLibrary(coreLib); | 210 new NamespaceBuilder().createPublicNamespaceForLibrary(coreLib); |
| 210 coreNamespace.definedNames.forEach((String name, Element elem) { | 211 coreNamespace.definedNames.forEach((String name, Element elem) { |
| 211 if (elem is ClassElement) { | 212 if (elem is ClassElement) { |
| 212 importedClassMap[name] = elem; | 213 importedClassMap[name] = elem; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 * Add suggestions for all top level elements in the context | 283 * Add suggestions for all top level elements in the context |
| 283 * excluding those elemnents for which suggestions have already been added. | 284 * excluding those elemnents for which suggestions have already been added. |
| 284 */ | 285 */ |
| 285 void _addNonImportedElementSuggestions( | 286 void _addNonImportedElementSuggestions( |
| 286 List<SearchMatch> matches, Set<LibraryElement> excludedLibs) { | 287 List<SearchMatch> matches, Set<LibraryElement> excludedLibs) { |
| 287 // Exclude internal Dart SDK libraries | 288 // Exclude internal Dart SDK libraries |
| 288 for (var lib in context.sourceFactory.dartSdk.sdkLibraries) { | 289 for (var lib in context.sourceFactory.dartSdk.sdkLibraries) { |
| 289 if (lib.isInternal) { | 290 if (lib.isInternal) { |
| 290 Source libUri = context.sourceFactory.forUri(lib.shortName); | 291 Source libUri = context.sourceFactory.forUri(lib.shortName); |
| 291 if (libUri != null) { | 292 if (libUri != null) { |
| 292 LibraryElement libElem = context.getLibraryElement(libUri); | 293 LibraryElement libElem = context.getResult(libUri, LIBRARY_ELEMENT8); |
| 293 if (libElem != null) { | 294 if (libElem != null) { |
| 294 excludedLibs.add(libElem); | 295 excludedLibs.add(libElem); |
| 295 } | 296 } |
| 296 } | 297 } |
| 297 } | 298 } |
| 298 } | 299 } |
| 299 | 300 |
| 300 AnalysisContext sdkContext = context.sourceFactory.dartSdk.context; | 301 AnalysisContext sdkContext = context.sourceFactory.dartSdk.context; |
| 301 matches.forEach((SearchMatch match) { | 302 matches.forEach((SearchMatch match) { |
| 302 if (match.kind == MatchKind.DECLARATION) { | 303 if (match.kind == MatchKind.DECLARATION) { |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 @override | 414 @override |
| 414 void visitFunctionTypeAliasElement(FunctionTypeAliasElement element) { | 415 void visitFunctionTypeAliasElement(FunctionTypeAliasElement element) { |
| 415 cache._addSuggestion(element, DART_RELEVANCE_DEFAULT); | 416 cache._addSuggestion(element, DART_RELEVANCE_DEFAULT); |
| 416 } | 417 } |
| 417 | 418 |
| 418 @override | 419 @override |
| 419 void visitTopLevelVariableElement(TopLevelVariableElement element) { | 420 void visitTopLevelVariableElement(TopLevelVariableElement element) { |
| 420 cache._addSuggestion(element, DART_RELEVANCE_DEFAULT); | 421 cache._addSuggestion(element, DART_RELEVANCE_DEFAULT); |
| 421 } | 422 } |
| 422 } | 423 } |
| OLD | NEW |