Elements. Migrate FlowAnalysisHelper.

Change-Id: I34bf657dbf7eb9ad4fc7b207e07d282df70ff54d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/409240
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index 34de78f..164b36f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// ignore_for_file: analyzer_use_new_elements
-
 /// @docImport 'package:analyzer/src/generated/resolver.dart';
 library;
 
@@ -16,7 +14,6 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.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';
@@ -213,7 +210,7 @@
   }
 
   void breakStatement(BreakStatement node) {
-    var target = getLabelTarget(node, node.label?.staticElement, isBreak: true);
+    var target = getLabelTarget(node, node.label?.element, isBreak: true);
     flow!.handleBreak(target);
   }
 
@@ -229,8 +226,7 @@
   }
 
   void continueStatement(ContinueStatement node) {
-    var target =
-        getLabelTarget(node, node.label?.staticElement, isBreak: false);
+    var target = getLabelTarget(node, node.label?.element, isBreak: false);
     flow!.handleContinue(target);
   }
 
@@ -380,7 +376,7 @@
   /// not specify a label), so the default enclosing target is returned.
   ///
   /// [isBreak] is `true` for `break`, and `false` for `continue`.
-  static StatementImpl? getLabelTarget(AstNode? node, Element? element,
+  static StatementImpl? getLabelTarget(AstNode? node, Element2? element,
       {required bool isBreak}) {
     for (; node != null; node = node.parent) {
       if (element == null) {
@@ -423,9 +419,9 @@
     return null;
   }
 
-  static bool _hasLabel(List<Label> labels, Element element) {
+  static bool _hasLabel(List<Label> labels, Element2 element) {
     for (var nodeLabel in labels) {
-      if (identical(nodeLabel.label.staticElement, element)) {
+      if (identical(nodeLabel.label.element, element)) {
         return true;
       }
     }
@@ -604,7 +600,7 @@
 
   @override
   bool isExtensionTypeInternal(TypeImpl type) {
-    return type is InterfaceType && type.element is ExtensionTypeElement;
+    return type is InterfaceType && type.element3 is ExtensionTypeElement2;
   }
 
   @override
@@ -617,7 +613,7 @@
     return type is InterfaceType &&
         !type.isDartCoreNull &&
         !type.isDartAsyncFutureOr &&
-        type.element is! ExtensionTypeElement;
+        type.element3 is! ExtensionTypeElement2;
   }
 
   @override
@@ -643,9 +639,9 @@
 
   @override
   bool isPropertyPromotable(Object property) {
-    if (property is! PropertyAccessorElement) return false;
-    var field = property.variable2;
-    if (field is! FieldElement) return false;
+    if (property is! PropertyAccessorElement2) return false;
+    var field = property.variable3;
+    if (field is! FieldElement2) return false;
     return field.isPromotable;
   }
 
@@ -788,7 +784,7 @@
   TypeImpl? matchTypeParameterBoundInternal(TypeImpl type) {
     if (type is TypeParameterTypeImpl &&
         type.nullabilitySuffix == NullabilitySuffix.none) {
-      return type.promotedBound ?? type.element.bound;
+      return type.promotedBound ?? type.element3.bound;
     } else {
       return null;
     }
@@ -848,13 +844,13 @@
 
   @override
   PropertyNonPromotabilityReason? whyPropertyIsNotPromotable(
-      covariant ExecutableElement property) {
+      covariant ExecutableElement2 property) {
     if (property.isPublic) return PropertyNonPromotabilityReason.isNotPrivate;
-    if (property is! PropertyAccessorElement) {
+    if (property is! PropertyAccessorElement2) {
       return PropertyNonPromotabilityReason.isNotField;
     }
-    var field = property.variable2;
-    if (field is! FieldElement) {
+    var field = property.variable3;
+    if (field is! FieldElement2) {
       return PropertyNonPromotabilityReason.isNotField;
     }
     if (field.isSynthetic && !property.isSynthetic) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index f23cb7b..7193a00 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -984,7 +984,7 @@
                         ? CascadePropertyTarget.singleton
                         : ThisPropertyTarget.singleton,
                     node.methodName.name,
-                    element,
+                    element.asElement2,
                     SharedTypeView(getterReturnType))
                 ?.unwrapTypeView() ??
             targetType;
@@ -1010,7 +1010,7 @@
                     functionExpression,
                     SuperPropertyTarget.singleton,
                     node.methodName.name,
-                    node.methodName.staticElement,
+                    node.methodName.element,
                     SharedTypeView(getterReturnType))
                 ?.unwrapTypeView() ??
             targetType;
@@ -1020,7 +1020,7 @@
                     functionExpression,
                     ExpressionPropertyTarget(target),
                     node.methodName.name,
-                    node.methodName.staticElement,
+                    node.methodName.element,
                     SharedTypeView(getterReturnType))
                 ?.unwrapTypeView() ??
             targetType;
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index d91f0f4..85ced01 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -272,8 +272,12 @@
           !readElementRequested.isStatic) {
         var unpromotedType = readElementRequested.returnType;
         getType = _resolver.flowAnalysis.flow
-                ?.propertyGet(node, ThisPropertyTarget.singleton, node.name,
-                    readElementRequested, SharedTypeView(unpromotedType))
+                ?.propertyGet(
+                    node,
+                    ThisPropertyTarget.singleton,
+                    node.name,
+                    readElementRequested.asElement2,
+                    SharedTypeView(unpromotedType))
                 ?.unwrapTypeView() ??
             unpromotedType;
       }
@@ -511,7 +515,7 @@
                           as PropertyTarget<ExpressionImpl>
                       : ExpressionPropertyTarget(target),
                   propertyName.name,
-                  result.getter2?.asElement,
+                  result.getter2,
                   SharedTypeView(unpromotedType))
               ?.unwrapTypeView() ??
           unpromotedType;
@@ -849,7 +853,7 @@
                     node,
                     SuperPropertyTarget.singleton,
                     propertyName.name,
-                    readElement,
+                    readElement.asElement2,
                     SharedTypeView(unpromotedType))
                 ?.unwrapTypeView() ??
             unpromotedType;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 14fef89..e44d59a 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1604,7 +1604,7 @@
   }
 
   @override
-  (ExecutableElement?, SharedTypeView) resolveObjectPatternPropertyGet({
+  (ExecutableElement2?, SharedTypeView) resolveObjectPatternPropertyGet({
     required covariant ObjectPatternImpl objectPattern,
     required SharedTypeView receiverType,
     required covariant SharedPatternField field,
@@ -1636,9 +1636,9 @@
     if (getter != null) {
       fieldNode.element = getter;
       if (getter is PropertyAccessorElementOrMember) {
-        return (getter, SharedTypeView(getter.returnType));
+        return (getter.asElement2, SharedTypeView(getter.returnType));
       } else {
-        return (getter, SharedTypeView(getter.type));
+        return (getter.asElement2, SharedTypeView(getter.type));
       }
     }
 
@@ -5680,6 +5680,9 @@
   List<DiagnosticMessage> visitPropertyNotPromotedForInherentReason(
       PropertyNotPromotedForInherentReason reason) {
     var receiverElement = reason.propertyMember;
+    if (receiverElement is PropertyAccessorElement2) {
+      receiverElement = receiverElement.asElement;
+    }
     if (receiverElement is PropertyAccessorElement) {
       var property = propertyReference = receiverElement;
       var propertyName = reason.propertyName;
@@ -5717,6 +5720,9 @@
   List<DiagnosticMessage> visitPropertyNotPromotedForNonInherentReason(
       PropertyNotPromotedForNonInherentReason reason) {
     var receiverElement = reason.propertyMember;
+    if (receiverElement is PropertyAccessorElement2) {
+      receiverElement = receiverElement.asElement;
+    }
     if (receiverElement is PropertyAccessorElement) {
       var property = propertyReference = receiverElement;
       var propertyName = reason.propertyName;