[element model] migrate `search_get_type_hierarchy`

Change-Id: I5b494f6f387172e777c184e2f9c8fb99417234f5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399632
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
Auto-Submit: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/analyzer_use_new_elements.txt b/pkg/analysis_server/analyzer_use_new_elements.txt
index 8a62485..e39d959 100644
--- a/pkg/analysis_server/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server/analyzer_use_new_elements.txt
@@ -6,7 +6,6 @@
 lib/src/domains/analysis/occurrences_dart.dart
 lib/src/handler/legacy/edit_get_available_refactorings.dart
 lib/src/handler/legacy/search_find_element_references.dart
-lib/src/handler/legacy/search_get_type_hierarchy.dart
 lib/src/lsp/completion_utils.dart
 lib/src/lsp/handlers/handler_completion.dart
 lib/src/lsp/handlers/handler_completion_resolve.dart
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 418b483..88aa0ae 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -83,6 +83,7 @@
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer/src/utilities/extensions/analysis_session.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart';
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart'
     as analyzer_plugin;
@@ -675,6 +676,12 @@
     return getElementOfNode(node);
   }
 
+  /// Return a [Future] that completes with the [Element2] at the given
+  /// [offset] of the given [file], or with `null` if there is no node at the
+  /// [offset] or the node does not have an element.
+  Future<Element2?> getElementAtOffset2(String file, int offset) async =>
+      (await getElementAtOffset(file, offset)).asElement2;
+
   /// Return the [Element] of the given [node], or `null` if [node] is `null` or
   /// does not have an element.
   Element? getElementOfNode(AstNode? node) {
diff --git a/pkg/analysis_server/lib/src/handler/legacy/search_get_type_hierarchy.dart b/pkg/analysis_server/lib/src/handler/legacy/search_get_type_hierarchy.dart
index 5c0e7c6..d702b8c 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/search_get_type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/search_get_type_hierarchy.dart
@@ -8,7 +8,6 @@
 import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
 import 'package:analysis_server/src/search/type_hierarchy.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
 
 /// The handler for the `search.getTypeHierarchy` request.
 class SearchGetTypeHierarchyHandler extends LegacyHandler {
@@ -30,14 +29,14 @@
     );
     var file = params.file;
     // prepare element
-    var element = await server.getElementAtOffset(file, params.offset);
+    var element = await server.getElementAtOffset2(file, params.offset);
     if (element == null) {
       _sendTypeHierarchyNull(request);
       return;
     }
     // maybe supertype hierarchy only
     if (params.superOnly == true) {
-      var computer = TypeHierarchyComputer(searchEngine, element.asElement2!);
+      var computer = TypeHierarchyComputer(searchEngine, element);
       var items = computer.computeSuper();
       var response = protocol.SearchGetTypeHierarchyResult(
         hierarchyItems: items,
@@ -46,7 +45,7 @@
       return;
     }
     // prepare type hierarchy
-    var computer = TypeHierarchyComputer(searchEngine, element.asElement2!);
+    var computer = TypeHierarchyComputer(searchEngine, element);
     var items = await computer.compute();
     var response = protocol.SearchGetTypeHierarchyResult(
       hierarchyItems: items,