Make 'Inline Method' refactoring work with the new analysis driver.

R=brianwilkerson@google.com
BUG=

Review URL: https://codereview.chromium.org/2540793003 .
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index b1a0a0c..58137c6 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -760,7 +760,11 @@
       CompilationUnit unit = await server.getResolvedCompilationUnit(file);
       if (unit != null) {
         _resetOnAnalysisStarted();
-        refactoring = new InlineMethodRefactoring(searchEngine, unit, offset);
+        refactoring =
+            new InlineMethodRefactoring(searchEngine, (Element element) async {
+          String elementPath = element.source.fullName;
+          return await server.getResolvedCompilationUnit(elementPath);
+        }, unit, offset);
       }
     }
     if (kind == RefactoringKind.MOVE_FILE) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 486f724..8a0322c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -191,11 +191,18 @@
 }
 
 /**
+ * Completes with the resolved [CompilationUnit] that contains the [element].
+ */
+typedef Future<CompilationUnit> GetResolvedUnitContainingElement(
+    Element element);
+
+/**
  * [InlineMethodRefactoring] implementation.
  */
 class InlineMethodRefactoringImpl extends RefactoringImpl
     implements InlineMethodRefactoring {
   final SearchEngine searchEngine;
+  final GetResolvedUnitContainingElement getResolvedUnit;
   final CompilationUnit unit;
   final int offset;
   CorrectionUtils utils;
@@ -218,7 +225,8 @@
   List<_ReferenceProcessor> _referenceProcessors = [];
   Set<FunctionBody> _alreadyMadeAsync = new Set<FunctionBody>();
 
-  InlineMethodRefactoringImpl(this.searchEngine, this.unit, this.offset) {
+  InlineMethodRefactoringImpl(
+      this.searchEngine, this.getResolvedUnit, this.unit, this.offset) {
     utils = new CorrectionUtils(unit);
   }
 
@@ -279,7 +287,7 @@
   Future<RefactoringStatus> checkInitialConditions() async {
     RefactoringStatus result = new RefactoringStatus();
     // prepare method information
-    result.addStatus(_prepareMethod());
+    result.addStatus(await _prepareMethod());
     if (result.hasFatalError) {
       return new Future<RefactoringStatus>.value(result);
     }
@@ -301,6 +309,7 @@
     _referenceProcessors.clear();
     for (SearchMatch reference in references) {
       _ReferenceProcessor processor = new _ReferenceProcessor(this, reference);
+      await processor.init();
       _referenceProcessors.add(processor);
     }
     return result;
@@ -327,7 +336,7 @@
   /**
    * Initializes [_methodElement] and related fields.
    */
-  RefactoringStatus _prepareMethod() {
+  Future<RefactoringStatus> _prepareMethod() async {
     _methodElement = null;
     _methodParameters = null;
     _methodBody = null;
@@ -352,7 +361,7 @@
     }
     _methodElement = element as ExecutableElement;
     _isAccessor = element is PropertyAccessorElement;
-    _methodUnit = element.unit;
+    _methodUnit = await getResolvedUnit(element);
     _methodUtils = new CorrectionUtils(_methodUnit);
     // class member
     bool isClassMember = element.enclosingElement is ClassElement;
@@ -435,6 +444,7 @@
  */
 class _ReferenceProcessor {
   final InlineMethodRefactoringImpl ref;
+  final SearchMatch reference;
 
   Element refElement;
   CorrectionUtils _refUtils;
@@ -442,10 +452,12 @@
   SourceRange _refLineRange;
   String _refPrefix;
 
-  _ReferenceProcessor(this.ref, SearchMatch reference) {
+  _ReferenceProcessor(this.ref, this.reference);
+
+  Future<Null> init() async {
     refElement = reference.element;
     // prepare CorrectionUtils
-    CompilationUnit refUnit = refElement.unit;
+    CompilationUnit refUnit = await ref.getResolvedUnit(refElement);
     _refUtils = new CorrectionUtils(refUnit);
     // prepare node and environment
     _node = _refUtils.findNode(reference.sourceRange.offset);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index b4abf87..5cf982f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -249,8 +249,12 @@
    * Returns a new [InlineMethodRefactoring] instance.
    */
   factory InlineMethodRefactoring(
-      SearchEngine searchEngine, CompilationUnit unit, int offset) {
-    return new InlineMethodRefactoringImpl(searchEngine, unit, offset);
+      SearchEngine searchEngine,
+      GetResolvedUnitContainingElement getResolvedUnit,
+      CompilationUnit unit,
+      int offset) {
+    return new InlineMethodRefactoringImpl(
+        searchEngine, getResolvedUnit, unit, offset);
   }
 
   /**
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index bc1d29c..c629f93 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -1712,6 +1712,7 @@
 
   void _createRefactoring(String search) {
     int offset = findOffset(search);
-    refactoring = new InlineMethodRefactoring(searchEngine, testUnit, offset);
+    refactoring = new InlineMethodRefactoring(
+        searchEngine, (element) async => element.unit, testUnit, offset);
   }
 }