Disable UriContributor for Cider.

There are two reasons to disable it.

1. This contributor talks to the file system, and for Cider this
   operation is too slow.

2. It just does not work. We need `SourceFactory` for it, and the
   way we get it is not compatible with the Cider's `AnalysisSession`
   mock.


R=brianwilkerson@google.com, keertip@google.com

Change-Id: I652c4f438dbab2a9fa220878ff09d47c14434cd5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151806
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index d87d611..bd1f8d5 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -94,7 +94,10 @@
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
       );
 
-      return await manager.computeSuggestions(completionRequest);
+      return await manager.computeSuggestions(
+        completionRequest,
+        enableUriContributor: false,
+      );
     });
     suggestionsTimer.stop();
 
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 1c63942..5dac07a 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -100,7 +100,12 @@
       var contributorTag = 'computeSuggestions - ${manager.runtimeType}';
       performance.logStartTime(contributorTag);
       try {
-        suggestions.addAll(await manager.computeSuggestions(request));
+        suggestions.addAll(
+          await manager.computeSuggestions(
+            request,
+            enableUriContributor: true,
+          ),
+        );
       } on AbortCompletion {
         suggestions.clear();
       }
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index 35b320a..24b0d46 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -10,7 +10,6 @@
         RuntimeCompletionExpression,
         RuntimeCompletionVariable,
         SourceEdit;
-import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
@@ -82,7 +81,7 @@
       targetResult = await analysisDriver.getResult(contextPath);
     });
 
-    CompletionContributor contributor = DartCompletionManager(
+    var contributor = DartCompletionManager(
         // dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(targetResult)
         );
     var request = CompletionRequestImpl(
@@ -91,7 +90,10 @@
       false,
       CompletionPerformance(),
     );
-    var suggestions = await contributor.computeSuggestions(request);
+    var suggestions = await contributor.computeSuggestions(
+      request,
+      enableUriContributor: true,
+    );
 
     // Remove completions with synthetic import prefixes.
     suggestions.removeWhere((s) => s.completion.startsWith('__prefix'));
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index d9c1815..5fe7fa0 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -208,15 +208,17 @@
     }
 
     try {
-      CompletionContributor contributor = DartCompletionManager(
+      var contributor = DartCompletionManager(
         dartdocDirectiveInfo: directiveInfo,
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
       );
 
-      final serverSuggestions =
-          await contributor.computeSuggestions(completionRequest);
+      final serverSuggestions = await contributor.computeSuggestions(
+        completionRequest,
+        enableUriContributor: true,
+      );
 
       if (token.isCancellationRequested) {
         return cancelled();
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index a16f075..b09cfaf 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -49,6 +49,7 @@
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
+import 'package:meta/meta.dart';
 
 /// [DartCompletionManager] determines if a completion request is Dart specific
 /// and forwards those requests to all [DartCompletionContributor]s.
@@ -99,7 +100,9 @@
 
   @override
   Future<List<CompletionSuggestion>> computeSuggestions(
-      CompletionRequest request) async {
+    CompletionRequest request, {
+    @required bool enableUriContributor,
+  }) async {
     request.checkAborted();
     if (!AnalysisEngine.isDartFileName(request.result.path)) {
       return const <CompletionSuggestion>[];
@@ -140,7 +143,7 @@
       OverrideContributor(),
       StaticMemberContributor(),
       TypeMemberContributor(),
-      UriContributor(),
+      if (enableUriContributor) UriContributor(),
       VariableNameContributor()
     ];
 
diff --git a/pkg/analysis_server/test/src/cider/completion_test.dart b/pkg/analysis_server/test/src/cider/completion_test.dart
index a1d3a4a..ed599c0 100644
--- a/pkg/analysis_server/test/src/cider/completion_test.dart
+++ b/pkg/analysis_server/test/src/cider/completion_test.dart
@@ -130,6 +130,14 @@
     _assertHasClass(text: 'String');
   }
 
+  Future<void> test_compute_uriContributor_disabled() async {
+    newFile('/workspace/dart/test/lib/a.dart', content: '');
+    await _compute(r'''
+import '^';
+''');
+    expect(_suggestions, isEmpty);
+  }
+
   Future<void> test_filterSort_byPattern_excludeNotMatching() async {
     await _compute(r'''
 var a = F^;
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 3fae840..2fb69b3 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -101,7 +101,10 @@
           timer.start();
           var request =
               CompletionRequestImpl(result, offset, false, performance);
-          var suggestions = await contributor.computeSuggestions(request);
+          var suggestions = await contributor.computeSuggestions(
+            request,
+            enableUriContributor: true,
+          );
           timer.stop();
 
           if (!identifier.inDeclarationContext() &&
diff --git a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
index 7f9cd67..f5483ea 100644
--- a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
+++ b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
@@ -627,8 +627,12 @@
     if (declarationsTracker == null) {
       // available suggestions == false
       suggestions = await DartCompletionManager(
-              dartdocDirectiveInfo: DartdocDirectiveInfo(), listener: listener)
-          .computeSuggestions(request);
+        dartdocDirectiveInfo: DartdocDirectiveInfo(),
+        listener: listener,
+      ).computeSuggestions(
+        request,
+        enableUriContributor: true,
+      );
     } else {
       // available suggestions == true
       var includedElementKinds = <protocol.ElementKind>{};
@@ -637,13 +641,15 @@
           <protocol.IncludedSuggestionRelevanceTag>[];
       var includedSuggestionSetList = <protocol.IncludedSuggestionSet>[];
       suggestions = await DartCompletionManager(
-              dartdocDirectiveInfo: DartdocDirectiveInfo(),
-              includedElementKinds: includedElementKinds,
-              includedElementNames: includedElementNames,
-              includedSuggestionRelevanceTags:
-                  includedSuggestionRelevanceTagList,
-              listener: listener)
-          .computeSuggestions(request);
+        dartdocDirectiveInfo: DartdocDirectiveInfo(),
+        includedElementKinds: includedElementKinds,
+        includedElementNames: includedElementNames,
+        includedSuggestionRelevanceTags: includedSuggestionRelevanceTagList,
+        listener: listener,
+      ).computeSuggestions(
+        request,
+        enableUriContributor: true,
+      );
 
       computeIncludedSetList(declarationsTracker, request.result,
           includedSuggestionSetList, includedElementNames);