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

Unified Diff: pkg/analysis_server/lib/src/services/completion/uri_contributor.dart

Issue 1498733005: convert uri contributor to use new task model (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/services/completion/uri_contributor.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart
deleted file mode 100644
index c6b20d3cf73fb69ed5ab02edd9d2602babdfa81a..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library services.completion.contributor.dart.importuri;
-
-import 'dart:async';
-import 'dart:core' hide Resource;
-
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:path/path.dart' show posix;
-import 'package:path/src/context.dart';
-
-import '../../protocol_server.dart'
- show CompletionSuggestion, CompletionSuggestionKind;
-
-/**
- * A contributor for calculating uri suggestions
- * for import and part directives.
- */
-class UriContributor extends DartCompletionContributor {
- _UriSuggestionBuilder builder;
-
- @override
- bool computeFast(DartCompletionRequest request) {
- builder = new _UriSuggestionBuilder(request);
- return builder.computeFast(request.target.containingNode);
- }
-
- @override
- Future<bool> computeFull(DartCompletionRequest request) {
- return new Future.value(false);
- }
-}
-
-class _UriSuggestionBuilder extends SimpleAstVisitor {
- final DartCompletionRequest request;
-
- _UriSuggestionBuilder(this.request);
-
- bool computeFast(AstNode node) {
- node.accept(this);
- return true;
- }
-
- @override
- visitExportDirective(ExportDirective node) {
- visitNamespaceDirective(node);
- }
-
- @override
- visitImportDirective(ImportDirective node) {
- visitNamespaceDirective(node);
- }
-
- visitNamespaceDirective(NamespaceDirective node) {
- StringLiteral uri = node.uri;
- if (uri is SimpleStringLiteral) {
- int offset = request.offset;
- if (uri.offset < offset &&
- (offset < uri.end || offset == uri.offset + 1)) {
- // Handle degenerate case where import or export is only line in file
- // and there is no semicolon
- visitSimpleStringLiteral(uri);
- }
- }
- }
-
- @override
- visitSimpleStringLiteral(SimpleStringLiteral node) {
- AstNode parent = node.parent;
- if (parent is NamespaceDirective && parent.uri == node) {
- String partialUri = _extractPartialUri(node);
- if (partialUri != null) {
- _addDartSuggestions();
- _addPackageSuggestions(partialUri);
- _addFileSuggestions(partialUri);
- }
- } else if (parent is PartDirective && parent.uri == node) {
- String partialUri = _extractPartialUri(node);
- if (partialUri != null) {
- _addFileSuggestions(partialUri);
- }
- }
- }
-
- void _addDartSuggestions() {
- _addSuggestion('dart:');
- SourceFactory factory = request.context.sourceFactory;
- for (SdkLibrary lib in factory.dartSdk.sdkLibraries) {
- if (!lib.isInternal && !lib.isImplementation) {
- if (!lib.shortName.startsWith('dart:_')) {
- _addSuggestion(lib.shortName,
- relevance: lib.shortName == 'dart:core'
- ? DART_RELEVANCE_LOW
- : DART_RELEVANCE_DEFAULT);
- }
- }
- }
- }
-
- void _addFileSuggestions(String partialUri) {
- ResourceProvider resProvider = request.resourceProvider;
- Context resContext = resProvider.pathContext;
- Source source = request.source;
-
- String parentUri;
- if ((partialUri.endsWith('/'))) {
- parentUri = partialUri;
- } else {
- parentUri = posix.dirname(partialUri);
- if (parentUri != '.' && !parentUri.endsWith('/')) {
- parentUri = '$parentUri/';
- }
- }
- String uriPrefix = parentUri == '.' ? '' : parentUri;
-
- String dirPath = resContext.normalize(parentUri);
- if (resContext.isRelative(dirPath)) {
- String sourceDirPath = resContext.dirname(source.fullName);
- if (resContext.isAbsolute(sourceDirPath)) {
- dirPath = resContext.join(sourceDirPath, dirPath);
- } else {
- return;
- }
- }
-
- Resource dir = resProvider.getResource(dirPath);
- if (dir is Folder) {
- for (Resource child in dir.getChildren()) {
- String completion;
- if (child is Folder) {
- completion = '$uriPrefix${child.shortName}/';
- } else {
- completion = '$uriPrefix${child.shortName}';
- }
- if (completion != source.shortName) {
- _addSuggestion(completion);
- }
- }
- }
- }
-
- void _addPackageFolderSuggestions(
- String partial, String prefix, Folder folder) {
- for (Resource child in folder.getChildren()) {
- if (child is Folder) {
- String childPrefix = '$prefix${child.shortName}/';
- _addSuggestion(childPrefix);
- if (partial.startsWith(childPrefix)) {
- _addPackageFolderSuggestions(partial, childPrefix, child);
- }
- } else {
- _addSuggestion('$prefix${child.shortName}');
- }
- }
- }
-
- void _addPackageSuggestions(String partial) {
- SourceFactory factory = request.context.sourceFactory;
- Map<String, List<Folder>> packageMap = factory.packageMap;
- if (packageMap != null) {
- _addSuggestion('package:');
- packageMap.forEach((String pkgName, List<Folder> folders) {
- String prefix = 'package:$pkgName/';
- _addSuggestion(prefix);
- for (Folder folder in folders) {
- if (folder.exists) {
- _addPackageFolderSuggestions(partial, prefix, folder);
- }
- }
- });
- }
- }
-
- void _addSuggestion(String completion,
- {int relevance: DART_RELEVANCE_DEFAULT}) {
- request.addSuggestion(new CompletionSuggestion(
- CompletionSuggestionKind.IMPORT,
- relevance,
- completion,
- completion.length,
- 0,
- false,
- false));
- }
-
- String _extractPartialUri(SimpleStringLiteral node) {
- if (request.offset < node.contentsOffset) {
- return null;
- }
- String partial = node.literal.lexeme.substring(
- node.contentsOffset - node.offset, request.offset - node.offset);
- request.replacementOffset = node.contentsOffset;
- request.replacementLength = node.contentsEnd - node.contentsOffset;
- return partial;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698