diff --git a/pkg/analysis_server/analyzer_use_new_elements.txt b/pkg/analysis_server/analyzer_use_new_elements.txt
index c75e589..6342280 100644
--- a/pkg/analysis_server/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server/analyzer_use_new_elements.txt
@@ -5,7 +5,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/lsp/completion_utils.dart
 lib/src/lsp/handlers/handler_completion.dart
 lib/src/lsp/handlers/handler_completion_resolve.dart
 lib/src/lsp/handlers/handler_definition.dart
diff --git a/pkg/analysis_server/lib/src/lsp/completion_utils.dart b/pkg/analysis_server/lib/src/lsp/completion_utils.dart
index 9e78f1c..395c3c2 100644
--- a/pkg/analysis_server/lib/src/lsp/completion_utils.dart
+++ b/pkg/analysis_server/lib/src/lsp/completion_utils.dart
@@ -16,11 +16,9 @@
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analysis_server/src/utilities/extensions/element.dart';
 import 'package:analysis_server/src/utilities/extensions/string.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/element2.dart';
 import 'package:analyzer/source/line_info.dart' as server;
 import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
 import 'package:analyzer_plugin/src/utilities/documentation.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -127,13 +125,14 @@
   // functions but they should not be included in the completions.
   var element =
       suggestion is ElementBasedSuggestion
-          ? (suggestion as ElementBasedSuggestion).element.asElement
+          ? (suggestion as ElementBasedSuggestion).element
           : null;
   var isCallable =
       element != null &&
-      (element is ConstructorElement ||
-          element is FunctionElement ||
-          element is MethodElement);
+      (element is ConstructorElement2 ||
+          element is LocalFunctionElement ||
+          element is TopLevelFunctionElement ||
+          element is MethodElement2);
   var isInvocation =
       (suggestion is ExecutableSuggestion &&
           suggestion.kind == server.CompletionSuggestionKind.INVOCATION) ||
@@ -191,7 +190,7 @@
   var colorPreviewHex =
       capabilities.completionItemKinds.contains(lsp.CompletionItemKind.Color) &&
               suggestion is ElementBasedSuggestion
-          ? server.getColorHexString(element)
+          ? server.getColorHexString2(element)
           : null;
 
   var completionKind =
@@ -382,7 +381,7 @@
 
   if (suggestion is ElementBasedSuggestion) {
     return _elementToCompletionItemKind(
-      (suggestion as ElementBasedSuggestion).element.asElement!,
+      (suggestion as ElementBasedSuggestion).element,
       supportedCompletionKinds,
     ).firstWhereOrNull(isSupported);
   }
@@ -430,30 +429,28 @@
   return getCompletionKind().firstWhereOrNull(isSupported);
 }
 
-/// Get the [lsp.CompletionItemKind] based on the [Element] for an [ElementBasedSuggestion].
+/// Get the [lsp.CompletionItemKind] based on the [Element2] for
+/// an [ElementBasedSuggestion].
 List<lsp.CompletionItemKind> _elementToCompletionItemKind(
-  Element element,
+  Element2 element,
   Set<lsp.CompletionItemKind> supportedCompletionKinds,
 ) {
-  if (element is ClassElement) {
+  if (element is ClassElement2) {
     return const [lsp.CompletionItemKind.Class];
   }
-  if (element is CompilationUnitElement) {
-    return const [lsp.CompletionItemKind.File, lsp.CompletionItemKind.Module];
-  }
-  if (element is ConstructorElement) {
+  if (element is ConstructorElement2) {
     return const [lsp.CompletionItemKind.Constructor];
   }
-  if (element is EnumElement) {
+  if (element is EnumElement2) {
     return const [lsp.CompletionItemKind.Enum];
   }
-  if (element is ExtensionElement) {
+  if (element is ExtensionElement2) {
     return const [lsp.CompletionItemKind.Method];
   }
-  if (element is ExtensionTypeElement) {
+  if (element is ExtensionTypeElement2) {
     return const [lsp.CompletionItemKind.Class];
   }
-  if (element is FieldElement) {
+  if (element is FieldElement2) {
     if (element.isEnumConstant) {
       return const [
         lsp.CompletionItemKind.EnumMember,
@@ -462,40 +459,43 @@
     }
     return const [lsp.CompletionItemKind.Field];
   }
-  if (element is FunctionElement) {
+  if (element is LocalFunctionElement) {
     return const [lsp.CompletionItemKind.Function];
   }
-  if (element is LabelElement) {
+  if (element is TopLevelFunctionElement) {
+    return const [lsp.CompletionItemKind.Function];
+  }
+  if (element is LabelElement2) {
     return const [lsp.CompletionItemKind.Text];
   }
-  if (element is LibraryElement) {
+  if (element is LibraryElement2) {
     return const [lsp.CompletionItemKind.Module];
   }
-  if (element is LocalVariableElement) {
+  if (element is LocalVariableElement2) {
     return const [lsp.CompletionItemKind.Variable];
   }
-  if (element is MethodElement) {
+  if (element is MethodElement2) {
     return const [lsp.CompletionItemKind.Method];
   }
-  if (element is MixinElement) {
+  if (element is MixinElement2) {
     return const [lsp.CompletionItemKind.Class];
   }
-  if (element is ParameterElement) {
+  if (element is FormalParameterElement) {
     return const [lsp.CompletionItemKind.Variable];
   }
-  if (element is PrefixElement) {
+  if (element is PrefixElement2) {
     return const [lsp.CompletionItemKind.Variable];
   }
-  if (element is PropertyAccessorElement) {
+  if (element is PropertyAccessorElement2) {
     return const [lsp.CompletionItemKind.Property];
   }
-  if (element is TopLevelVariableElement) {
+  if (element is TopLevelVariableElement2) {
     return const [lsp.CompletionItemKind.Variable];
   }
-  if (element is TypeAliasElement) {
+  if (element is TypeAliasElement2) {
     return const [lsp.CompletionItemKind.Class];
   }
-  if (element is TypeParameterElement) {
+  if (element is TypeParameterElement2) {
     return const [
       lsp.CompletionItemKind.TypeParameter,
       lsp.CompletionItemKind.Variable,
@@ -623,13 +623,11 @@
 
 /// If the [element] has a documentation comment, return it.
 _ElementDocumentation? _getDocsFromComputer(
-  Element element,
+  Element2 element,
   DartCompletionRequest request,
 ) {
-  var element2 = element.asElement2;
-  if (element2 == null) return null;
   var doc = request.documentationComputer.compute(
-    element2,
+    element,
     includeSummary: true,
   );
   if (doc is DocumentationWithSummary) {
@@ -647,7 +645,7 @@
   DartCompletionRequest request,
   DocumentationPreference includeDocumentation,
 ) {
-  var docs = _getDocsFromComputer(element.asElement!, request);
+  var docs = _getDocsFromComputer(element, request);
 
   var doc = removeDartDocDelimiters(docs?.full);
   var rawDoc =
