Elements. Migrate CompletionTarget.

Change-Id: I3a7f4d13d0174ff282a1ead65616a8db685ef0d9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403903
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 7898075..df04de5 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -15928,6 +15928,10 @@
   @override
   Token get beginToken => token;
 
+  set element(Element2? element) {
+    staticElement = element?.asElement;
+  }
+
   @override
   Token get endToken => token;
 
diff --git a/pkg/analyzer_plugin/analyzer_use_new_elements.txt b/pkg/analyzer_plugin/analyzer_use_new_elements.txt
index b4dd1f2..3acbf58 100644
--- a/pkg/analyzer_plugin/analyzer_use_new_elements.txt
+++ b/pkg/analyzer_plugin/analyzer_use_new_elements.txt
@@ -1,6 +1,4 @@
-lib/src/utilities/completion/completion_target.dart
 lib/src/utilities/completion/optype.dart
 lib/src/utilities/navigation/navigation_dart.dart
 lib/utilities/analyzer_converter.dart
-test/src/utilities/completion/completion_target_test.dart
 test/utilities/analyzer_converter_test.dart
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
index bdad033..1fd096c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/element2.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/source/source_range.dart';
@@ -106,8 +105,8 @@
   final int? argIndex;
 
   /// If the target is an argument in an [ArgumentList], then this is the
-  /// invoked [ExecutableElement], otherwise this is `null`.
-  ExecutableElement? _executableElement;
+  /// invoked [ExecutableElement2], otherwise this is `null`.
+  ExecutableElement2? _executableElement;
 
   /// If the target is in an argument list of a [FunctionExpressionInvocation],
   /// then this is the static type of the function being invoked, otherwise this
@@ -115,9 +114,9 @@
   FunctionType? _functionType;
 
   /// If the target is an argument in an [ArgumentList], then this is the
-  /// corresponding [ParameterElement] in the invoked [ExecutableElement],
-  /// otherwise this is `null`.
-  ParameterElement? _parameterElement;
+  /// corresponding [FormalParameterElement] in the invoked
+  /// [ExecutableElement2], otherwise this is `null`.
+  FormalParameterElement? _parameterElement;
 
   /// The enclosing [InterfaceElement2], or `null` if not in a class.
   late final InterfaceElement2? enclosingInterfaceElement = () {
@@ -132,10 +131,11 @@
     }
   }();
 
-  /// The enclosing [ExtensionElement], or `null` if not in an extension.
-  late final ExtensionElement? enclosingExtensionElement = containingNode
+  /// The enclosing [ExtensionElement2], or `null` if not in an extension.
+  late final ExtensionElement2? enclosingExtensionElement = containingNode
       .thisOrAncestorOfType<ExtensionDeclaration>()
-      ?.declaredElement;
+      ?.declaredFragment
+      ?.element;
 
   /// Compute the appropriate [CompletionTarget] for the given [offset] within
   /// the [entryPoint].
@@ -282,7 +282,7 @@
       var importPrefix = node.importPrefix;
       if (importPrefix != null && identical(node.name2, entity)) {
         return SimpleIdentifierImpl(importPrefix.name)
-          ..staticElement = importPrefix.element;
+          ..element = importPrefix.element2;
       }
     }
     if (node is PropertyAccess) {
@@ -301,8 +301,8 @@
   }
 
   /// If the target is an argument in an argument list, and the invocation is
-  /// resolved, return the invoked [ExecutableElement].
-  ExecutableElement? get executableElement {
+  /// resolved, return the invoked [ExecutableElement2].
+  ExecutableElement2? get executableElement {
     if (_executableElement == null) {
       AstNode? argumentList = containingNode;
       if (argumentList is NamedExpression) {
@@ -314,26 +314,26 @@
 
       var invocation = argumentList.parent;
 
-      Element? executable;
+      Element2? executable;
       if (invocation is Annotation) {
-        executable = invocation.element;
+        executable = invocation.element2;
       } else if (invocation is EnumConstantArguments) {
         var enumConstant = invocation.parent;
         if (enumConstant is! EnumConstantDeclaration) {
           return null;
         }
-        executable = enumConstant.constructorElement;
+        executable = enumConstant.constructorElement2;
       } else if (invocation is InstanceCreationExpression) {
-        executable = invocation.constructorName.staticElement;
+        executable = invocation.constructorName.element;
       } else if (invocation is MethodInvocation) {
-        executable = invocation.methodName.staticElement;
+        executable = invocation.methodName.element;
       } else if (invocation is RedirectingConstructorInvocation) {
-        executable = invocation.staticElement;
+        executable = invocation.element;
       } else if (invocation is SuperConstructorInvocation) {
-        executable = invocation.staticElement;
+        executable = invocation.element;
       }
 
-      if (executable is ExecutableElement) {
+      if (executable is ExecutableElement2) {
         _executableElement = executable;
       }
     }
@@ -453,13 +453,13 @@
   }
 
   /// If the target is an argument in an argument list, and the invocation is
-  /// resolved, return the corresponding [ParameterElement].
-  ParameterElement? get parameterElement {
+  /// resolved, return the corresponding [FormalParameterElement].
+  FormalParameterElement? get parameterElement {
     if (_parameterElement == null) {
       var executable = executableElement;
       if (executable != null) {
         _parameterElement = _getParameterElement(
-            executable.parameters, containingNode, argIndex);
+            executable.formalParameters, containingNode, argIndex);
       }
     }
     return _parameterElement;
@@ -699,17 +699,17 @@
     return null;
   }
 
-  /// Return the [ParameterElement] that corresponds to the given [argumentNode]
-  /// at the given [argumentIndex].
-  static ParameterElement? _getParameterElement(
-    List<ParameterElement> parameters,
+  /// Return the [FormalParameterElement] that corresponds to the given
+  /// [argumentNode] at the given [argumentIndex].
+  static FormalParameterElement? _getParameterElement(
+    List<FormalParameterElement> parameters,
     AstNode argumentNode,
     int? argumentIndex,
   ) {
     if (argumentNode is NamedExpression) {
       var name = argumentNode.name.label.name;
       for (var parameter in parameters) {
-        if (parameter.name == name) {
+        if (parameter.name3 == name) {
           return parameter;
         }
       }
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 2412cfc..202095f 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
 import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
@@ -962,30 +962,30 @@
     target = CompletionTarget.forOffset(result.unit, offset!);
   }
 
-  static String _executableNameStr(ExecutableElement executable) {
-    var executableEnclosing = executable.enclosingElement3;
-    if (executableEnclosing is CompilationUnitElement) {
-      return executable.name;
-    } else if (executable is ConstructorElement) {
-      if (executable.name == '') {
-        return '${executableEnclosing.name}.<init>';
+  static String _executableNameStr(ExecutableElement2 executable) {
+    var executableEnclosing = executable.enclosingElement2;
+    if (executableEnclosing is LibraryElement2) {
+      return executable.name3!;
+    } else if (executable is ConstructorElement2) {
+      if (executable.name3 == 'new') {
+        return '${executableEnclosing!.name3}.<init>';
       } else {
-        return '${executableEnclosing.name}.${executable.name}';
+        return '${executableEnclosing!.name3}.${executable.name3}';
       }
-    } else if (executable is MethodElement) {
-      return '${executableEnclosing.name}.${executable.name}';
+    } else if (executable is MethodElement2) {
+      return '${executableEnclosing!.name3}.${executable.name3}';
     }
     fail('Unexpected element: $executable');
   }
 
-  static String _executableStr(ExecutableElement element) {
+  static String _executableStr(ExecutableElement2 element) {
     var executableStr = _executableNameStr(element);
     var typeStr = element.type.getDisplayString();
     return '$executableStr: $typeStr';
   }
 
-  static String _parameterStr(ParameterElement element) {
+  static String _parameterStr(FormalParameterElement element) {
     var typeStr = element.type.getDisplayString();
-    return '${element.name}: $typeStr';
+    return '${element.name3}: $typeStr';
   }
 }