[Migrate] CorrectionProducer

Change-Id: Ia8fba6d745d04cef88d1beb7e6da7ed15d23fcb2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402588
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server_plugin/analyzer_use_new_elements.txt b/pkg/analysis_server_plugin/analyzer_use_new_elements.txt
index 84fab9b..e69de29 100644
--- a/pkg/analysis_server_plugin/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server_plugin/analyzer_use_new_elements.txt
@@ -1 +0,0 @@
-lib/edit/dart/correction_producer.dart
diff --git a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
index 81e8f29..268865b 100644
--- a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
+++ b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/dart/analysis/analysis_options.dart';
 import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/element2.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -341,10 +340,6 @@
 
   /// The library element for the library in which a correction is being
   /// produced.
-  LibraryElement get libraryElement => unitResult.libraryElement;
-
-  /// The library element for the library in which a correction is being
-  /// produced.
   LibraryElement2 get libraryElement2 => unitResult.libraryElement2;
 
   @override
@@ -375,7 +370,7 @@
       .getAnalysisOptionsForFile(unitResult.file);
 
   InheritanceManager3 get inheritanceManager {
-    return (libraryElement as LibraryElementImpl).session.inheritanceManager;
+    return (libraryElement2 as LibraryElementImpl).session.inheritanceManager;
   }
 
   /// Whether [node] is in a static context.
@@ -396,10 +391,6 @@
 
   /// The library element for the library in which a correction is being
   /// produced.
-  LibraryElement get libraryElement => unitResult.libraryElement;
-
-  /// The library element for the library in which a correction is being
-  /// produced.
   LibraryElement2 get libraryElement2 => unitResult.libraryElement2;
 
   @override
@@ -466,21 +457,6 @@
 
   /// Returns the class element associated with the [target], or `null` if there
   /// is no such element.
-  InterfaceElement? getTargetInterfaceElement(Expression target) {
-    var type = target.staticType;
-    if (type is InterfaceType) {
-      return type.element;
-    } else if (target is Identifier) {
-      var element = target.staticElement;
-      if (element is InterfaceElement) {
-        return element;
-      }
-    }
-    return null;
-  }
-
-  /// Returns the class element associated with the [target], or `null` if there
-  /// is no such element.
   InterfaceElement2? getTargetInterfaceElement2(Expression target) {
     var type = target.staticType;
     if (type is InterfaceType) {
@@ -512,7 +488,7 @@
       if (conditionalExpression.condition == expression) {
         return _coreTypeBool;
       } else {
-        var type = conditionalExpression.staticParameterElement?.type;
+        var type = conditionalExpression.correspondingParameter?.type;
         if (type is InterfaceType && type.isDartCoreFunction) {
           return FunctionTypeImpl(
             typeFormals: const [],
@@ -526,19 +502,19 @@
     }
     // `=> myFunction();`.
     if (parent is ExpressionFunctionBody) {
-      var executable = expression.enclosingExecutableElement;
+      var executable = expression.enclosingExecutableElement2;
       return executable?.returnType;
     }
     // `return myFunction();`.
     if (parent is ReturnStatement) {
-      var executable = expression.enclosingExecutableElement;
+      var executable = expression.enclosingExecutableElement2;
       return executable?.returnType;
     }
     // `int v = myFunction();`.
     if (parent is VariableDeclaration) {
       var variableDeclaration = parent;
       if (variableDeclaration.initializer == expression) {
-        var variableElement = variableDeclaration.declaredElement;
+        var variableElement = variableDeclaration.declaredFragment?.element;
         if (variableElement != null) {
           return variableElement.type;
         }
@@ -561,9 +537,9 @@
           return assignment.writeType;
         } else {
           // `v += myFunction();`.
-          var method = assignment.staticElement;
+          var method = assignment.element;
           if (method != null) {
-            var parameters = method.parameters;
+            var parameters = method.formalParameters;
             if (parameters.length == 1) {
               return parameters[0].type;
             }
@@ -574,17 +550,17 @@
     // `v + myFunction();`.
     if (parent is BinaryExpression) {
       var binary = parent;
-      var method = binary.staticElement;
+      var method = binary.element;
       if (method != null) {
         if (binary.rightOperand == expression) {
-          var parameters = method.parameters;
+          var parameters = method.formalParameters;
           return parameters.length == 1 ? parameters[0].type : null;
         }
       }
     }
     // `foo( myFunction() );`.
     if (parent is ArgumentList) {
-      var parameter = expression.staticParameterElement;
+      var parameter = expression.correspondingParameter;
       return parameter?.type;
     }
     // `bool`.
diff --git a/pkg/analyzer/lib/src/utilities/extensions/ast.dart b/pkg/analyzer/lib/src/utilities/extensions/ast.dart
index ae5df27..ebb8eec 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/ast.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/ast.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.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/src/dart/element/element.dart';
 
 extension AstNodeExtension on AstNode {
@@ -42,6 +43,22 @@
     return null;
   }
 
+  /// The [ExecutableElement2] of the enclosing executable [AstNode].
+  ExecutableElement2? get enclosingExecutableElement2 {
+    for (var node in withParents) {
+      if (node is FunctionDeclaration) {
+        return node.declaredFragment?.element;
+      }
+      if (node is ConstructorDeclaration) {
+        return node.declaredFragment?.element;
+      }
+      if (node is MethodDeclaration) {
+        return node.declaredFragment?.element;
+      }
+    }
+    return null;
+  }
+
   AstNode? get enclosingUnitChild {
     for (var node in withParents) {
       if (node.parent is CompilationUnit) {
diff --git a/pkg/linter/analyzer_use_new_elements.txt b/pkg/linter/analyzer_use_new_elements.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pkg/linter/analyzer_use_new_elements.txt