Add async methods for Cider.

Change-Id: I8e7ad68af11933748e40899789169fdcf58124e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/238003
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/cider/assists.dart b/pkg/analysis_server/lib/src/cider/assists.dart
index ba46cce..6b51f05 100644
--- a/pkg/analysis_server/lib/src/cider/assists.dart
+++ b/pkg/analysis_server/lib/src/cider/assists.dart
@@ -21,7 +21,7 @@
   Future<List<Assist>> compute(
       String path, int lineNumber, int colNumber, int length) async {
     var result = <Assist>[];
-    var resolvedUnit = _fileResolver.resolve(path: path);
+    var resolvedUnit = await _fileResolver.resolve2(path: path);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(lineNumber) + colNumber;
 
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 25a8bf9..86e6d59 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -54,14 +54,17 @@
     @visibleForTesting void Function(ResolvedUnitResult)? testResolvedUnit,
   }) async {
     return _performanceRoot.runAsync('completion', (performance) async {
-      var resolvedUnit = performance.run('resolution', (performance) {
-        return _fileResolver.resolve(
-          completionLine: line,
-          completionColumn: column,
-          path: path,
-          performance: performance,
-        );
-      });
+      var resolvedUnit = await performance.runAsync(
+        'resolution',
+        (performance) async {
+          return _fileResolver.resolve2(
+            completionLine: line,
+            completionColumn: column,
+            path: path,
+            performance: performance,
+          );
+        },
+      );
 
       if (testResolvedUnit != null) {
         testResolvedUnit(resolvedUnit);
diff --git a/pkg/analysis_server/lib/src/cider/document_symbols.dart b/pkg/analysis_server/lib/src/cider/document_symbols.dart
index a1782db..48aec9f 100644
--- a/pkg/analysis_server/lib/src/cider/document_symbols.dart
+++ b/pkg/analysis_server/lib/src/cider/document_symbols.dart
@@ -15,6 +15,7 @@
 
   CiderDocumentSymbolsComputer(this._fileResolver);
 
+  @Deprecated('Use compute2() instead')
   List<DocumentSymbol> compute(String filePath) {
     var result = <DocumentSymbol>[];
     var resolvedUnit = _fileResolver.resolve(path: filePath);
@@ -35,6 +36,11 @@
     return result;
   }
 
+  Future<List<DocumentSymbol>> compute2(String filePath) async {
+    // ignore: deprecated_member_use_from_same_package
+    return compute(filePath);
+  }
+
   DocumentSymbol _asDocumentSymbol(
     Set<SymbolKind> supportedKinds,
     LineInfo lineInfo,
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index 6b65f24..fd9efd7 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -40,7 +40,7 @@
   /// Compute quick fixes for errors on the line with the [offset].
   Future<List<CiderErrorFixes>> compute(String path, int lineNumber) async {
     var result = <CiderErrorFixes>[];
-    var resolvedUnit = _fileResolver.resolve(path: path);
+    var resolvedUnit = await _fileResolver.resolve2(path: path);
 
     var lineInfo = resolvedUnit.lineInfo;
 
@@ -89,7 +89,7 @@
     var files = _fileResolver.getFilesWithTopLevelDeclarations(name);
     for (var file in files) {
       if (file.partOfLibrary == null) {
-        var libraryElement = _fileResolver.getLibraryByUri(
+        var libraryElement = await _fileResolver.getLibraryByUri2(
           uriStr: file.uriStr,
         );
         TopLevelDeclarations.addElement(result, libraryElement, name);
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 44eadad..dd17833 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -81,6 +81,7 @@
 
   String get oldName => canRename.refactoringElement.element.displayName;
 
+  @Deprecated('Use computeRenameRanges2() instead')
   RenameResponse? computeRenameRanges() {
     var elements = <Element>[];
     var element = canRename.refactoringElement.element;
@@ -105,6 +106,11 @@
     }
     return RenameResponse(matches, this, flutterWidgetRename: flutterRename);
   }
+
+  Future<RenameResponse?> computeRenameRanges2() async {
+    // ignore: deprecated_member_use_from_same_package
+    return computeRenameRanges();
+  }
 }
 
 class CiderRenameComputer {
@@ -114,6 +120,7 @@
 
   /// Check if the identifier at the [line], [column] for the file at the
   /// [filePath] can be renamed.
+  @Deprecated('Use canRename2() instead')
   CanRenameResponse? canRename(String filePath, int line, int column) {
     var resolvedUnit = _fileResolver.resolve(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
@@ -144,6 +151,14 @@
     return null;
   }
 
+  /// Check if the identifier at the [line], [column] for the file at the
+  /// [filePath] can be renamed.
+  Future<CanRenameResponse?> canRename2(
+      String filePath, int line, int column) async {
+    // ignore: deprecated_member_use_from_same_package
+    return canRename(filePath, line, column);
+  }
+
   bool _canRenameElement(Element element) {
     var enclosingElement = element.enclosingElement;
     if (element is ConstructorElement) {
diff --git a/pkg/analysis_server/lib/src/cider/signature_help.dart b/pkg/analysis_server/lib/src/cider/signature_help.dart
index 6b3616a..4bf5e60 100644
--- a/pkg/analysis_server/lib/src/cider/signature_help.dart
+++ b/pkg/analysis_server/lib/src/cider/signature_help.dart
@@ -15,6 +15,7 @@
 
   CiderSignatureHelpComputer(this._fileResolver);
 
+  @Deprecated('Use compute2() instead')
   SignatureHelpResponse? compute(String filePath, int line, int column) {
     var resolvedUnit = _fileResolver.resolve(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
@@ -44,6 +45,12 @@
     }
     return null;
   }
+
+  Future<SignatureHelpResponse?> compute2(
+      String filePath, int line, int column) async {
+    // ignore: deprecated_member_use_from_same_package
+    return compute(filePath, line, column);
+  }
 }
 
 class SignatureHelpResponse {
diff --git a/pkg/analysis_server/test/src/cider/document_symbols_test.dart b/pkg/analysis_server/test/src/cider/document_symbols_test.dart
index 07a7536..84563f3 100644
--- a/pkg/analysis_server/test/src/cider/document_symbols_test.dart
+++ b/pkg/analysis_server/test/src/cider/document_symbols_test.dart
@@ -18,8 +18,8 @@
 
 @reflectiveTest
 class CiderDocumentSymbolsComputerTest extends CiderServiceTest {
-  void test_class() {
-    var unitOutline = _compute('''
+  void test_class() async {
+    var unitOutline = await _compute('''
 abstract class A<K, V> {
   int fa, fb;
   String fc;
@@ -145,10 +145,10 @@
     }
   }
 
-  void test_isTest_isTestGroup() {
+  void test_isTest_isTestGroup() async {
     BazelMockPackages.instance.addMeta(resourceProvider);
 
-    var outline = _compute('''
+    var outline = await _compute('''
 import 'package:meta/meta.dart';
 
 @isTestGroup
@@ -268,11 +268,11 @@
     );
   }
 
-  List<DocumentSymbol> _compute(String content) {
+  Future<List<DocumentSymbol>> _compute(String content) async {
     newFile2(testPath, content);
     return CiderDocumentSymbolsComputer(
       fileResolver,
-    ).compute(convertPath(testPath));
+    ).compute2(convertPath(testPath));
   }
 
   void _expect(DocumentSymbol outline,
diff --git a/pkg/analysis_server/test/src/cider/fixes_test.dart b/pkg/analysis_server/test/src/cider/fixes_test.dart
index 8bb64dc..0d08766 100644
--- a/pkg/analysis_server/test/src/cider/fixes_test.dart
+++ b/pkg/analysis_server/test/src/cider/fixes_test.dart
@@ -76,7 +76,7 @@
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 class Test {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -93,7 +93,7 @@
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 enum Test {a, b, c}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -112,7 +112,7 @@
   void foo() {}
 }
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
@@ -133,7 +133,7 @@
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 void foo() {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
@@ -154,7 +154,7 @@
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 mixin Test {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -171,7 +171,7 @@
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 0;
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
diff --git a/pkg/analysis_server/test/src/cider/rename_test.dart b/pkg/analysis_server/test/src/cider/rename_test.dart
index 98341fb..0147ec9 100644
--- a/pkg/analysis_server/test/src/cider/rename_test.dart
+++ b/pkg/analysis_server/test/src/cider/rename_test.dart
@@ -27,8 +27,8 @@
     BazelMockPackages.instance.addFlutter(resourceProvider);
   }
 
-  void test_canRename_class() {
-    var refactor = _compute(r'''
+  void test_canRename_class() async {
+    var refactor = await _compute(r'''
 class ^Old {}
 }
 ''');
@@ -37,8 +37,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_field() {
-    var refactor = _compute(r'''
+  void test_canRename_field() async {
+    var refactor = await _compute(r'''
 class A {
  int ^bar;
  void foo() {
@@ -51,8 +51,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_field_static_private() {
-    var refactor = _compute(r'''
+  void test_canRename_field_static_private() async {
+    var refactor = await _compute(r'''
 class A{
   static const ^_val = 1234;
 }
@@ -63,8 +63,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_function() {
-    var refactor = _compute(r'''
+  void test_canRename_function() async {
+    var refactor = await _compute(r'''
 void ^foo() {
 }
 ''');
@@ -73,8 +73,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_label() {
-    var refactor = _compute(r'''
+  void test_canRename_label() async {
+    var refactor = await _compute(r'''
 main() {
   myLabel:
   while (true) {
@@ -89,8 +89,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_local() {
-    var refactor = _compute(r'''
+  void test_canRename_local() async {
+    var refactor = await _compute(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -100,8 +100,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_method() {
-    var refactor = _compute(r'''
+  void test_canRename_method() async {
+    var refactor = await _compute(r'''
 extension E on int {
   void ^foo() {}
 }
@@ -111,8 +111,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_operator() {
-    var refactor = _compute(r'''
+  void test_canRename_operator() async {
+    var refactor = await _compute(r'''
 class A{
   A operator ^+(A other) => this;
 }
@@ -121,8 +121,8 @@
     expect(refactor, isNull);
   }
 
-  void test_canRename_parameter() {
-    var refactor = _compute(r'''
+  void test_canRename_parameter() async {
+    var refactor = await _compute(r'''
 void foo(int ^bar) {
   var a = bar + 1;
 }
@@ -133,8 +133,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_checkName_class() {
-    var result = _checkName(r'''
+  void test_checkName_class() async {
+    var result = await _checkName(r'''
 class ^Old {}
 ''', 'New');
 
@@ -142,8 +142,8 @@
     expect(result.oldName, 'Old');
   }
 
-  void test_checkName_function() {
-    var result = _checkName(r'''
+  void test_checkName_function() async {
+    var result = await _checkName(r'''
 int ^foo() => 2;
 ''', 'bar');
 
@@ -151,8 +151,8 @@
     expect(result.oldName, 'foo');
   }
 
-  void test_checkName_local() {
-    var result = _checkName(r'''
+  void test_checkName_local() async {
+    var result = await _checkName(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -162,8 +162,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_local_invalid() {
-    var result = _checkName(r'''
+  void test_checkName_local_invalid() async {
+    var result = await _checkName(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -173,8 +173,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_parameter() {
-    var result = _checkName(r'''
+  void test_checkName_parameter() async {
+    var result = await _checkName(r'''
 void foo(String ^a) {
   var b = a + 1;
 }
@@ -184,8 +184,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_topLevelVariable() {
-    var result = _checkName(r'''
+  void test_checkName_topLevelVariable() async {
+    var result = await _checkName(r'''
 var ^foo;
 ''', 'bar');
 
@@ -193,8 +193,8 @@
     expect(result.oldName, 'foo');
   }
 
-  void test_checkName_TypeAlias() {
-    var result = _checkName(r'''
+  void test_checkName_TypeAlias() async {
+    var result = await _checkName(r'''
 typedef ^Foo = void Function();
 ''', 'Bar');
 
@@ -202,8 +202,8 @@
     expect(result.oldName, 'Foo');
   }
 
-  void test_rename_class() {
-    var result = _rename(r'''
+  void test_rename_class() async {
+    var result = await _rename(r'''
 class ^Old implements Other {
   Old() {}
   Old.named() {}
@@ -234,8 +234,8 @@
     ]);
   }
 
-  void test_rename_class_flutterWidget() {
-    var result = _rename(r'''
+  void test_rename_class_flutterWidget() async {
+    var result = await _rename(r'''
 import 'package:flutter/material.dart';
 
 class ^TestPage extends StatefulWidget {
@@ -268,8 +268,8 @@
     ]);
   }
 
-  void test_rename_field() {
-    var result = _rename(r'''
+  void test_rename_field() async {
+    var result = await _rename(r'''
 class A{
   int get ^x => 5;
 }
@@ -286,8 +286,8 @@
     ]);
   }
 
-  void test_rename_field_static_private() {
-    var result = _rename(r'''
+  void test_rename_field_static_private() async {
+    var result = await _rename(r'''
 class A{
   static const ^_val = 1234;
 }
@@ -304,8 +304,8 @@
     ]);
   }
 
-  void test_rename_function() {
-    var result = _rename(r'''
+  void test_rename_function() async {
+    var result = await _rename(r'''
 test() {}
 ^foo() {}
 void f() {
@@ -324,12 +324,12 @@
     ]);
   }
 
-  void test_rename_function_imported() {
+  void test_rename_function_imported() async {
     var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 foo() {}
 ''');
-    fileResolver.resolve(path: a.path);
-    var result = _rename(r'''
+    await fileResolver.resolve2(path: a.path);
+    var result = await _rename(r'''
 import 'a.dart';
 void f() {
   ^foo();
@@ -345,8 +345,8 @@
     ]);
   }
 
-  void test_rename_local() {
-    var result = _rename(r'''
+  void test_rename_local() async {
+    var result = await _rename(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -359,8 +359,8 @@
             [CharacterLocation(2, 7), CharacterLocation(2, 22)]));
   }
 
-  void test_rename_parameter() {
-    var result = _rename(r'''
+  void test_rename_parameter() async {
+    var result = await _rename(r'''
 void foo(String ^a) {
   var b = a + 1;
 }
@@ -369,8 +369,8 @@
     expect(result.checkName.oldName, 'a');
   }
 
-  void test_rename_propertyAccessor() {
-    var result = _rename(r'''
+  void test_rename_propertyAccessor() async {
+    var result = await _rename(r'''
 get foo {}
 set foo(x) {}
 void f() {
@@ -389,8 +389,8 @@
     ]);
   }
 
-  void test_rename_typeAlias_functionType() {
-    var result = _rename(r'''
+  void test_rename_typeAlias_functionType() async {
+    var result = await _rename(r'''
 typedef ^F = void Function();
 void f(F a) {}
 ''', 'bar');
@@ -401,45 +401,42 @@
     ]);
   }
 
-  CheckNameResponse? _checkName(String content, String newName) {
+  Future<CheckNameResponse?> _checkName(String content, String newName) async {
     _updateFile(content);
 
-    return CiderRenameComputer(
+    var canRename = await CiderRenameComputer(
       fileResolver,
-    )
-        .canRename(
-          convertPath(testPath),
-          _correctionContext.line,
-          _correctionContext.character,
-        )
-        ?.checkNewName(newName);
+    ).canRename2(
+      convertPath(testPath),
+      _correctionContext.line,
+      _correctionContext.character,
+    );
+    return canRename?.checkNewName(newName);
   }
 
-  CanRenameResponse? _compute(String content) {
+  Future<CanRenameResponse?> _compute(String content) async {
     _updateFile(content);
 
     return CiderRenameComputer(
       fileResolver,
-    ).canRename(
+    ).canRename2(
       convertPath(testPath),
       _correctionContext.line,
       _correctionContext.character,
     );
   }
 
-  RenameResponse? _rename(String content, String newName) {
+  Future<RenameResponse?> _rename(String content, String newName) async {
     _updateFile(content);
 
-    return CiderRenameComputer(
+    var canRename = await CiderRenameComputer(
       fileResolver,
-    )
-        .canRename(
-          convertPath(testPath),
-          _correctionContext.line,
-          _correctionContext.character,
-        )
-        ?.checkNewName(newName)
-        ?.computeRenameRanges();
+    ).canRename2(
+      convertPath(testPath),
+      _correctionContext.line,
+      _correctionContext.character,
+    );
+    return canRename?.checkNewName(newName)?.computeRenameRanges2();
   }
 
   void _updateFile(String content) {
diff --git a/pkg/analysis_server/test/src/cider/signature_help_test.dart b/pkg/analysis_server/test/src/cider/signature_help_test.dart
index a5384eb..b4ea6aa 100644
--- a/pkg/analysis_server/test/src/cider/signature_help_test.dart
+++ b/pkg/analysis_server/test/src/cider/signature_help_test.dart
@@ -21,8 +21,8 @@
 class CiderSignatureHelpComputerTest extends CiderServiceTest {
   late _CorrectionContext _correctionContext;
 
-  void test_noDefaultConstructor() {
-    var result = _compute('''
+  void test_noDefaultConstructor() async {
+    var result = await _compute('''
 class A {
   A._();
 }
@@ -33,7 +33,7 @@
     expect(result, null);
   }
 
-  void test_params_multipleNamed() {
+  void test_params_multipleNamed() async {
     final content = '''
 /// Does foo.
 foo(String s, {bool b = true, bool a}) {
@@ -42,7 +42,7 @@
 ''';
     final expectedLabel = 'foo(String s, {bool b = true, bool a})';
 
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -54,7 +54,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_params_multipleOptional() {
+  void test_params_multipleOptional() async {
     final content = '''
 /// Does foo.
 foo(String s, [bool b = true, bool a]) {
@@ -63,7 +63,7 @@
 ''';
 
     final expectedLabel = 'foo(String s, [bool b = true, bool a])';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -75,7 +75,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_retrigger_validLocation() {
+  void test_retrigger_validLocation() async {
     final content = '''
 /// Does foo.
 foo(String s, {bool b = true, bool a}) {
@@ -84,7 +84,7 @@
 ''';
     final expectedLabel = 'foo(String s, {bool b = true, bool a})';
 
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -96,7 +96,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_simple() {
+  void test_simple() async {
     final content = '''
 /// Does foo.
 foo(String s, int i) {
@@ -104,7 +104,7 @@
 }
 ''';
     final expectedLabel = 'foo(String s, int i)';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -115,7 +115,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_triggerCharacter_validLocation() {
+  void test_triggerCharacter_validLocation() async {
     final content = '''
 /// Does foo.
 foo(String s, int i) {
@@ -124,7 +124,7 @@
 ''';
 
     final expectedLabel = 'foo(String s, int i)';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -135,7 +135,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_typeParams_class() {
+  void test_typeParams_class() async {
     final content = '''
 /// My Foo.
 class Foo<T1, T2 extends String> {}
@@ -143,7 +143,7 @@
 class Bar extends Foo<^> {}
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'class Foo<T1, T2 extends String>',
         'My Foo.',
@@ -154,7 +154,7 @@
         CharacterLocation(4, 23));
   }
 
-  void test_typeParams_function() {
+  void test_typeParams_function() async {
     final content = '''
 /// My Foo.
 void foo<T1, T2 extends String>() {
@@ -162,7 +162,7 @@
 }
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'void foo<T1, T2 extends String>()',
         'My Foo.',
@@ -173,7 +173,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_typeParams_method() {
+  void test_typeParams_method() async {
     final content = '''
 class Foo {
   /// My Foo.
@@ -183,7 +183,7 @@
 }
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'void foo<T1, T2 extends String>()',
         'My Foo.',
@@ -194,13 +194,13 @@
         CharacterLocation(4, 9));
   }
 
-  void testSignature(
+  Future<void> testSignature(
       String content,
       String expectedLabel,
       String expectedDoc,
       List<ParameterInformation> expectedParameters,
-      CharacterLocation leftParenLocation) {
-    var result = _compute(content);
+      CharacterLocation leftParenLocation) async {
+    var result = await _compute(content);
     var signature = result!.signatureHelp.signatures.first;
     final expected =
         MarkupContent(kind: MarkupKind.Markdown, value: expectedDoc);
@@ -211,12 +211,12 @@
     expect(result.callStart == leftParenLocation, isTrue);
   }
 
-  SignatureHelpResponse? _compute(String content) {
+  Future<SignatureHelpResponse?> _compute(String content) async {
     _updateFile(content);
 
     return CiderSignatureHelpComputer(
       fileResolver,
-    ).compute(
+    ).compute2(
       convertPath(testPath),
       _correctionContext.line,
       _correctionContext.character,
diff --git a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
index 575a6e9..715bba0 100644
--- a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
@@ -179,18 +179,20 @@
 
   @override
   Future<SomeLibraryElementResult> getLibraryByUri(String uriStr) async {
-    var element = analysisContext.fileResolver.getLibraryByUri(uriStr: uriStr);
+    var element = await analysisContext.fileResolver.getLibraryByUri2(
+      uriStr: uriStr,
+    );
     return LibraryElementResultImpl(element);
   }
 
   @override
   Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) async {
-    return analysisContext.fileResolver.resolveLibrary(path: path);
+    return analysisContext.fileResolver.resolveLibrary2(path: path);
   }
 
   @override
   Future<SomeResolvedUnitResult> getResolvedUnit(String path) async {
-    return analysisContext.fileResolver.resolve(path: path);
+    return analysisContext.fileResolver.resolve2(path: path);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index b20ce78..ed7b814 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -180,6 +180,7 @@
 
   /// Looks for references to the given Element. All the files currently
   ///  cached by the resolver are searched, generated files are ignored.
+  @Deprecated('Use findReferences2() instead')
   List<CiderSearchMatch> findReferences(Element element,
       {OperationPerformanceImpl? performance}) {
     return logger.run('findReferences for ${element.name}', () {
@@ -220,6 +221,18 @@
     });
   }
 
+  /// Looks for references to the given Element. All the files currently
+  ///  cached by the resolver are searched, generated files are ignored.
+  Future<List<CiderSearchMatch>> findReferences2(Element element,
+      {OperationPerformanceImpl? performance}) async {
+    // ignore: deprecated_member_use_from_same_package
+    return findReferences(
+      element,
+      performance: performance,
+    );
+  }
+
+  @Deprecated('Use getErrors2() instead')
   ErrorsResult getErrors({
     required String path,
     OperationPerformanceImpl? performance,
@@ -275,6 +288,17 @@
     });
   }
 
+  Future<ErrorsResult> getErrors2({
+    required String path,
+    OperationPerformanceImpl? performance,
+  }) async {
+    // ignore: deprecated_member_use_from_same_package
+    return getErrors(
+      path: path,
+      performance: performance,
+    );
+  }
+
   FileContext getFileContext({
     required String path,
     required OperationPerformanceImpl performance,
@@ -311,6 +335,7 @@
     return fsState.getFilesWithTopLevelDeclarations(name);
   }
 
+  @Deprecated('Use getLibraryByUri2() instead')
   LibraryElement getLibraryByUri({
     required String uriStr,
     OperationPerformanceImpl? performance,
@@ -344,6 +369,17 @@
     return libraryContext!.elementFactory.libraryOfUri2(uriStr);
   }
 
+  Future<LibraryElement> getLibraryByUri2({
+    required String uriStr,
+    OperationPerformanceImpl? performance,
+  }) async {
+    // ignore: deprecated_member_use_from_same_package
+    return getLibraryByUri(
+      uriStr: uriStr,
+      performance: performance,
+    );
+  }
+
   String getLibraryLinkedSignature({
     required String path,
     required OperationPerformanceImpl performance,
@@ -377,6 +413,7 @@
   /// partially resynthesized data, and so prepare for loading linked summaries
   /// from bytes, which will be done by [getErrors]. It is OK for it to
   /// spend some more time on this.
+  @Deprecated('Use linkLibraries2() instead')
   void linkLibraries({
     required String path,
   }) {
@@ -399,6 +436,32 @@
     _resetContextObjects();
   }
 
+  /// Ensure that libraries necessary for resolving [path] are linked.
+  ///
+  /// Libraries are linked in library cycles, from the bottom to top, so that
+  /// when we link a cycle, everything it transitively depends is ready. We
+  /// load newly linked libraries from bytes, and when we link a new library
+  /// cycle we partially resynthesize AST and elements from previously
+  /// loaded libraries.
+  ///
+  /// But when we are done linking libraries, and want to resolve just the
+  /// very top library that transitively depends on the whole dependency
+  /// tree, this library will not reference as many elements in the
+  /// dependencies as we needed for linking. Most probably it references
+  /// elements from directly imported libraries, and a couple of layers below.
+  /// So, keeping all previously resynthesized data is usually a waste.
+  ///
+  /// This method ensures that we discard the libraries context, with all its
+  /// partially resynthesized data, and so prepare for loading linked summaries
+  /// from bytes, which will be done by [getErrors2]. It is OK for it to
+  /// spend some more time on this.
+  Future<void> linkLibraries2({
+    required String path,
+  }) async {
+    // ignore: deprecated_member_use_from_same_package
+    linkLibraries(path: path);
+  }
+
   /// Update the cache with list of invalidated ids and clears [removedCacheIds].
   void releaseAndClearRemovedIds() {
     byteStore.release(removedCacheIds);
@@ -417,6 +480,7 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
+  @Deprecated('Use resolve2() instead')
   ResolvedUnitResult resolve({
     int? completionLine,
     int? completionColumn,
@@ -458,6 +522,23 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
+  Future<ResolvedUnitResult> resolve2({
+    int? completionLine,
+    int? completionColumn,
+    required String path,
+    OperationPerformanceImpl? performance,
+  }) async {
+    // ignore: deprecated_member_use_from_same_package
+    return resolve(
+      completionLine: completionLine,
+      completionColumn: completionColumn,
+      path: path,
+      performance: performance,
+    );
+  }
+
+  /// The [completionLine] and [completionColumn] are zero based.
+  @Deprecated('Use resolveLibrary2() instead')
   ResolvedLibraryResult resolveLibrary({
     int? completionLine,
     int? completionColumn,
@@ -570,6 +651,24 @@
     });
   }
 
+  /// The [completionLine] and [completionColumn] are zero based.
+  Future<ResolvedLibraryResult> resolveLibrary2({
+    int? completionLine,
+    int? completionColumn,
+    String? completionPath,
+    required String path,
+    OperationPerformanceImpl? performance,
+  }) async {
+    // ignore: deprecated_member_use_from_same_package
+    return resolveLibrary(
+      completionLine: completionLine,
+      completionColumn: completionColumn,
+      completionPath: completionPath,
+      path: path,
+      performance: performance,
+    );
+  }
+
   /// Make sure that [fsState], [contextObjects], and [libraryContext] are
   /// created and configured with the given [fileAnalysisOptions].
   ///
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index 88d2563..57c9d56 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -66,9 +66,9 @@
     fileResolver.testView = FileResolverTestView();
   }
 
-  ErrorsResult getTestErrors() {
+  Future<ErrorsResult> getTestErrors() async {
     var path = convertPath(_testFile);
-    return fileResolver.getErrors(path: path);
+    return fileResolver.getErrors2(path: path);
   }
 
   @override
@@ -76,7 +76,7 @@
     String path, {
     OperationPerformanceImpl? performance,
   }) async {
-    result = fileResolver.resolve(
+    result = await fileResolver.resolve2(
       path: path,
       performance: performance,
     );
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index d7b654c..7319323 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -393,7 +393,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(6, aPath));
+    var element = await _findElement(6, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 11)]),
       CiderSearchMatch(aPath, [CharacterLocation(1, 7)])
@@ -414,7 +415,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(16, aPath));
+    var element = await _findElement(16, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(2, 7), CharacterLocation(5, 5)])
@@ -433,7 +435,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(11, aPath));
+    var element = await _findElement(11, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(2, 3), CharacterLocation(5, 1)])
@@ -459,7 +462,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(20, aPath));
+    var element = await _findElement(20, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 15)]),
       CiderSearchMatch(aPath, [CharacterLocation(2, 11)])
@@ -478,7 +482,8 @@
 }
 ''');
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(39, aPath));
+    var element = await _findElement(39, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(3, 9), CharacterLocation(4, 11)])
@@ -511,7 +516,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(17, aPath));
+    var element = await _findElement(17, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
       CiderSearchMatch(
@@ -538,7 +544,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(21, aPath));
+    var element = await _findElement(21, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
       CiderSearchMatch(aPath, [CharacterLocation(2, 12)])
@@ -565,7 +572,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(19, aPath));
+    var element = await _findElement(19, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 13)]),
       CiderSearchMatch(aPath, [CharacterLocation(3, 9)])
@@ -592,7 +600,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(20, aPath));
+    var element = await _findElement(20, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 3)]),
       CiderSearchMatch(aPath, [CharacterLocation(3, 10)])
@@ -612,7 +621,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(10, aPath));
+    var element = await _findElement(10, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(1, 11), CharacterLocation(4, 11)])
@@ -630,7 +640,8 @@
 }
 ''');
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(10, aPath));
+    var element = await _findElement(10, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(aPath, [
         CharacterLocation(1, 11),
@@ -658,7 +669,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(8, aPath));
+    var element = await _findElement(8, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(3, 8)]),
       CiderSearchMatch(aPath, [CharacterLocation(1, 9)])
@@ -666,13 +678,13 @@
     expect(result, unorderedEquals(expected));
   }
 
-  test_getErrors() {
+  test_getErrors() async {
     addTestFile(r'''
 var a = b;
 var foo = 0;
 ''');
 
-    var result = getTestErrors();
+    var result = await getTestErrors();
     expect(result.path, convertPath('/workspace/dart/test/lib/test.dart'));
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.errors, [
@@ -681,7 +693,7 @@
     expect(result.lineInfo.lineStarts, [0, 11, 24]);
   }
 
-  test_getErrors_reuse() {
+  test_getErrors_reuse() async {
     addTestFile('var a = b;');
 
     var path = convertPath('/workspace/dart/test/lib/test.dart');
@@ -690,34 +702,34 @@
     expect(fileResolver.testView!.resolvedLibraries, isEmpty);
 
     // No cached, will resolve once.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Has cached, will be not resolved again.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
 
     // Change the file, new resolver.
     // With changed file the previously cached result cannot be used.
     addTestFile('var a = c;');
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
   }
 
-  test_getErrors_reuse_changeDependency() {
+  test_getErrors_reuse_changeDependency() async {
     newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 0;
 ''');
@@ -733,11 +745,11 @@
     expect(fileResolver.testView!.resolvedLibraries, isEmpty);
 
     // No cached, will resolve once.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Has cached, will be not resolved again.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Change the dependency, new resolver.
@@ -747,13 +759,13 @@
 var a = 4.2;
 ''');
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
   }
 
@@ -782,39 +794,41 @@
     assertHasOneVariable();
   }
 
-  test_getLibraryByUri() {
+  test_getLibraryByUri() async {
     newFile2('/workspace/dart/my/lib/a.dart', r'''
 class A {}
 ''');
 
-    var element = fileResolver.getLibraryByUri(
+    var element = await fileResolver.getLibraryByUri2(
       uriStr: 'package:dart.my/a.dart',
     );
     expect(element.definingCompilationUnit.classes, hasLength(1));
   }
 
-  test_getLibraryByUri_notExistingFile() {
-    var element = fileResolver.getLibraryByUri(
+  test_getLibraryByUri_notExistingFile() async {
+    var element = await fileResolver.getLibraryByUri2(
       uriStr: 'package:dart.my/a.dart',
     );
     expect(element.definingCompilationUnit.classes, isEmpty);
   }
 
-  test_getLibraryByUri_partOf() {
+  test_getLibraryByUri_partOf() async {
     newFile2('/workspace/dart/my/lib/a.dart', r'''
 part of 'b.dart';
 ''');
 
-    expect(() {
-      fileResolver.getLibraryByUri(
+    expect(() async {
+      await fileResolver.getLibraryByUri2(
         uriStr: 'package:dart.my/a.dart',
       );
     }, throwsArgumentError);
   }
 
-  test_getLibraryByUri_unresolvedUri() {
-    expect(() {
-      fileResolver.getLibraryByUri(uriStr: 'my:unresolved');
+  test_getLibraryByUri_unresolvedUri() async {
+    expect(() async {
+      await fileResolver.getLibraryByUri2(
+        uriStr: 'my:unresolved',
+      );
     }, throwsArgumentError);
   }
 
@@ -835,16 +849,16 @@
     assertNoErrorsInResult();
   }
 
-  test_linkLibraries_getErrors() {
+  test_linkLibraries_getErrors() async {
     addTestFile(r'''
 var a = b;
 var foo = 0;
 ''');
 
     var path = convertPath('/workspace/dart/test/lib/test.dart');
-    fileResolver.linkLibraries(path: path);
+    await fileResolver.linkLibraries2(path: path);
 
-    var result = getTestErrors();
+    var result = await getTestErrors();
     expect(result.path, path);
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.errors, [
@@ -1136,7 +1150,7 @@
     var testView = fileResolver.testView!;
     expect(testView.resolvedLibraries, isEmpty);
 
-    fileResolver.resolve(
+    await fileResolver.resolve2(
       path: b_path,
       completionLine: 0,
       completionColumn: 0,
@@ -1169,7 +1183,7 @@
 }
 ''');
 
-    var result = fileResolver.resolveLibrary(path: aPath);
+    var result = await fileResolver.resolveLibrary2(path: aPath);
     expect(result.units.length, 2);
     expect(result.units[0].path, aPath);
     expect(result.units[0].uri, Uri.parse('package:dart.test/a.dart'));
@@ -1270,8 +1284,8 @@
     expect(fileResolver.fsState!.testView.removedPaths, matcher);
   }
 
-  Element _findElement(int offset, String filePath) {
-    var resolvedUnit = fileResolver.resolve(path: filePath);
+  Future<Element> _findElement(int offset, String filePath) async {
+    var resolvedUnit = await fileResolver.resolve2(path: filePath);
     var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
     var element = getElementOfNode(node);
     return element!;