Don't give Source and ResourceProvider to CompletionRequestImpl.

It knows them already.

R=brianwilkerson@google.com

Change-Id: I48de58d7de140b210b17a11d7cc085c43461803c
Reviewed-on: https://dart-review.googlesource.com/55905
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 5e9f2a6..97d4ec5 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -16,7 +16,6 @@
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin;
@@ -176,7 +175,6 @@
     int offset = params.offset;
 
     AnalysisResult result = await server.getAnalysisResult(filePath);
-    Source source;
 
     if (result == null || !result.exists) {
       if (server.onNoAnalysisCompletion != null) {
@@ -185,7 +183,6 @@
             request, this, params, performance, completionId);
         return;
       }
-      source = server.resourceProvider.getFile(filePath).createSource();
     } else {
       if (offset < 0 || offset > result.content.length) {
         server.sendResponse(new Response.invalidParameter(
@@ -195,13 +192,11 @@
             ' but found $offset'));
         return;
       }
-      source =
-          server.resourceProvider.getFile(result.path).createSource(result.uri);
 
-      recordRequest(performance, source, result.content, offset);
+      recordRequest(performance, filePath, result.content, offset);
     }
-    CompletionRequestImpl completionRequest = new CompletionRequestImpl(
-        result, server.resourceProvider, source, offset, performance);
+    CompletionRequestImpl completionRequest =
+        new CompletionRequestImpl(result, offset, performance);
 
     String completionId = (_nextCompletionId++).toString();
 
@@ -233,10 +228,10 @@
    * If tracking code completion performance over time, then
    * record addition information about the request in the performance record.
    */
-  void recordRequest(CompletionPerformance performance, Source source,
+  void recordRequest(CompletionPerformance performance, String path,
       String content, int offset) {
-    performance.source = source;
-    if (performanceListMaxLength == 0 || source == null) {
+    performance.path = path;
+    if (performanceListMaxLength == 0) {
       return;
     }
     performance.setContentsAndOffset(content, offset);
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index df93f288..646f9b6 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -108,11 +108,8 @@
     }
 
     CompletionContributor contributor = new DartCompletionManager();
-    // TODO(scheglov) Stop requiring Source, it has it in AnalysisResult.
     CompletionRequestImpl request = new CompletionRequestImpl(
       targetResult,
-      resourceProvider,
-      targetResult.unit.element.source,
       targetOffset,
       new CompletionPerformance(),
     );
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_core.dart b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
index 9d15c20..7000f0b 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_core.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
@@ -16,9 +16,6 @@
   final AnalysisResult result;
 
   @override
-  final Source source;
-
-  @override
   final int offset;
 
   /**
@@ -39,9 +36,6 @@
    */
   int replacementLength;
 
-  @override
-  final ResourceProvider resourceProvider;
-
   bool _aborted = false;
 
   final CompletionPerformance performance;
@@ -49,14 +43,18 @@
   /**
    * Initialize a newly created completion request based on the given arguments.
    */
-  CompletionRequestImpl(this.result, this.resourceProvider, Source source,
-      int offset, this.performance)
-      : this.source = source,
-        this.offset = offset,
+  CompletionRequestImpl(this.result, int offset, this.performance)
+      : this.offset = offset,
         replacementOffset = offset,
         replacementLength = 0;
 
   @override
+  ResourceProvider get resourceProvider => result.session.resourceProvider;
+
+  @override
+  Source get source => result.unit.element.source;
+
+  @override
   String get sourceContents => result?.content;
 
   /**
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_performance.dart b/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
index fab1435..24b952f 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
@@ -2,8 +2,6 @@
 // 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.
 
-import 'package:analyzer/src/generated/source.dart';
-
 /**
  * Overall performance of a code completion operation.
  */
@@ -13,7 +11,7 @@
   final Stopwatch _stopwatch = new Stopwatch();
   final List<OperationPerformance> operations = <OperationPerformance>[];
 
-  Source source;
+  String path;
   String snippet = '';
   int notificationCount = -1;
   int suggestionCountFirst = -1;
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index ace0387..b579add 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -350,12 +350,14 @@
     buf.writeln('<table>');
     buf.writeln(
         '<tr><th>Time</th><th>Results</th><th>Source</th><th>Snippet</th></tr>');
+    var pathContext = completionDomain.server.resourceProvider.pathContext;
     for (CompletionPerformance completion in completions) {
+      String shortName = pathContext.basename(completion.path);
       buf.writeln('<tr>'
           '<td class="pre right">${printMilliseconds(
           completion.elapsedInMilliseconds)}</td>'
           '<td class="right">${completion.suggestionCount}</td>'
-          '<td>${escape(completion.source.shortName)}</td>'
+          '<td>${escape(shortName)}</td>'
           '<td><code>${escape(completion.snippet)}</code></td>'
           '</tr>');
     }
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index f02389c..d6d8191 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -11,7 +11,6 @@
     show DartCompletionRequestImpl;
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/generated/parser.dart' as analyzer;
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 
@@ -26,7 +25,6 @@
 abstract class DartCompletionContributorTest extends AbstractContextTest {
   static const String _UNCHECKED = '__UNCHECKED__';
   String testFile;
-  Source testSource;
   int completionOffset;
   int replacementOffset;
   int replacementLength;
@@ -59,7 +57,7 @@
     expect(nextOffset, equals(-1), reason: 'too many ^');
     content = content.substring(0, completionOffset) +
         content.substring(completionOffset + 1);
-    testSource = addSource(testFile, content);
+    addSource(testFile, content);
   }
 
   void assertHasNoParameterInfo(CompletionSuggestion suggestion) {
@@ -473,13 +471,8 @@
   Future computeSuggestions({int times = 200}) async {
     AnalysisResult analysisResult =
         await driver.getResult(convertPath(testFile));
-    testSource = analysisResult.unit.element.source;
     CompletionRequestImpl baseRequest = new CompletionRequestImpl(
-        analysisResult,
-        resourceProvider,
-        testSource,
-        completionOffset,
-        new CompletionPerformance());
+        analysisResult, completionOffset, new CompletionPerformance());
 
     // Build the request
     Completer<DartCompletionRequest> requestCompleter =
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index d0717e8..51950f4 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -48,8 +48,6 @@
     // Build the request
     CompletionRequestImpl baseRequest = new CompletionRequestImpl(
         await driver.getResult(testFile),
-        resourceProvider,
-        testSource,
         completionOffset,
         new CompletionPerformance());
     Completer<DartCompletionRequest> requestCompleter =