[analyzer] Use AstNodeImpl when interfacing with shared code

Change the analyzer's use of the following generic types so that it
supplies the type parameter `AstNodeImpl` instead of `AstNode` as the
type it uses to represent AST nodes:

- `AssignedVariables`
- `AssignedVariablesForTesting`
- `CaseHeadOrDefaultInfo`
- `FlowAnalysis`
- `MatchContext`
- `SwitchExpressionMemberInfo`
- `SwitchStatementMemberInfo`
- `TypeAnalyzer`
- `TypeAnalyzerErrors`

In some places I was able to avoid adding casts by changing method
parameters to accept concrete AST node types instead of abstract
public interface types. This required adding the `covariant` keyword
to one method (`ResolverVisitor.visitTryStatement`).

This is part of a larger arc of work to change the analyzer's use of
the shared code so that the type parameters it supplies are not part
of the analyzer public API. See
https://github.com/dart-lang/sdk/issues/59763.

Change-Id: I98a6df704b64ff3efd3c73d05fb47409828fbf04
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403281
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@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 a9a11e2..b116388 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -77,7 +77,7 @@
   final TypeSystemOperations typeOperations;
 
   /// Precomputed sets of potentially assigned variables.
-  AssignedVariables<AstNode, PromotableElementImpl2>? assignedVariables;
+  AssignedVariables<AstNodeImpl, PromotableElementImpl2>? assignedVariables;
 
   /// The result for post-resolution stages of analysis, for testing only.
   final FlowAnalysisDataForTesting? dataForTesting;
@@ -96,8 +96,8 @@
   final bool inferenceUpdate4Enabled;
 
   /// The current flow, when resolving a function body, or `null` otherwise.
-  FlowAnalysis<AstNode, StatementImpl, ExpressionImpl, PromotableElementImpl2,
-      SharedTypeView<DartType>>? flow;
+  FlowAnalysis<AstNodeImpl, StatementImpl, ExpressionImpl,
+      PromotableElementImpl2, SharedTypeView<DartType>>? flow;
 
   FlowAnalysisHelper(bool retainDataForTesting, FeatureSet featureSet,
       {required TypeSystemOperations typeSystemOperations})
@@ -174,10 +174,10 @@
         retainDataForTesting: dataForTesting != null, visit: visit);
     if (dataForTesting != null) {
       dataForTesting!.assignedVariables[node] = assignedVariables
-          as AssignedVariablesForTesting<AstNode, PromotableElementImpl2>;
+          as AssignedVariablesForTesting<AstNodeImpl, PromotableElementImpl2>;
     }
     flow = isNonNullableByDefault
-        ? FlowAnalysis<AstNode, StatementImpl, ExpressionImpl,
+        ? FlowAnalysis<AstNodeImpl, StatementImpl, ExpressionImpl,
             PromotableElementImpl2, SharedTypeView<DartType>>(
             typeOperations,
             assignedVariables!,
@@ -186,7 +186,7 @@
             fieldPromotionEnabled: fieldPromotionEnabled,
             inferenceUpdate4Enabled: inferenceUpdate4Enabled,
           )
-        : FlowAnalysis<AstNode, StatementImpl, ExpressionImpl,
+        : FlowAnalysis<AstNodeImpl, StatementImpl, ExpressionImpl,
                 PromotableElementImpl2, SharedTypeView<DartType>>.legacy(
             typeOperations, assignedVariables!);
   }
@@ -228,7 +228,7 @@
   }
 
   void executableDeclaration_enter(
-      AstNode node, FormalParameterList? parameters,
+      AstNodeImpl node, FormalParameterList? parameters,
       {required bool isClosure}) {
     if (isClosure) {
       flow!.functionExpression_begin(node);
@@ -261,7 +261,7 @@
     flow?.for_bodyBegin(node is StatementImpl ? node : null, condition);
   }
 
-  void for_conditionBegin(AstNode node) {
+  void for_conditionBegin(AstNodeImpl node) {
     flow?.for_conditionBegin(node);
   }
 
@@ -348,11 +348,11 @@
   }
 
   /// Computes the [AssignedVariables] map for the given [node].
-  static AssignedVariables<AstNode, PromotableElementImpl2>
+  static AssignedVariables<AstNodeImpl, PromotableElementImpl2>
       computeAssignedVariables(AstNode node, FormalParameterList? parameters,
           {bool retainDataForTesting = false,
           void Function(AstVisitor<Object?> visitor)? visit}) {
-    AssignedVariables<AstNode, PromotableElementImpl2> assignedVariables =
+    AssignedVariables<AstNodeImpl, PromotableElementImpl2> assignedVariables =
         retainDataForTesting
             ? AssignedVariablesForTesting()
             : AssignedVariables();
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index aaf736c..4c4bf74 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -120,8 +120,8 @@
     return iteratedType.typeArguments.single;
   }
 
-  void _forEachParts(AstNode node, bool isAsync, ForEachPartsImpl forEachParts,
-      void Function() visitBody) {
+  void _forEachParts(AstNodeImpl node, bool isAsync,
+      ForEachPartsImpl forEachParts, void Function() visitBody) {
     ExpressionImpl iterable = forEachParts.iterable;
     DeclaredIdentifierImpl? loopVariable;
     SimpleIdentifierImpl? identifier;
@@ -200,7 +200,7 @@
   }
 
   void _forParts(
-      AstNode node, ForPartsImpl forParts, void Function() visitBody) {
+      AstNodeImpl node, ForPartsImpl forParts, void Function() visitBody) {
     if (forParts is ForPartsWithDeclarationsImpl) {
       forParts.variables.accept(_resolver);
     } else if (forParts is ForPartsWithExpressionImpl) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart b/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
index e8f47fa..a7b457a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
@@ -22,7 +22,7 @@
 class SharedTypeAnalyzerErrors
     implements
         shared.TypeAnalyzerErrors<
-            AstNode,
+            AstNodeImpl,
             StatementImpl,
             ExpressionImpl,
             PromotableElementImpl2,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index f1b1949..5149e92 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -97,7 +97,7 @@
 /// By default, no files have inference logging enabled.
 bool Function(Source) inferenceLoggingPredicate = (_) => false;
 
-typedef SharedMatchContext = shared.MatchContext<AstNode, ExpressionImpl,
+typedef SharedMatchContext = shared.MatchContext<AstNodeImpl, ExpressionImpl,
     DartPatternImpl, SharedTypeView<DartType>, PromotableElementImpl2>;
 
 typedef SharedPatternField
@@ -122,7 +122,7 @@
         ErrorDetectionHelpers,
         TypeAnalyzer<
             DartType,
-            AstNode,
+            AstNodeImpl,
             StatementImpl,
             ExpressionImpl,
             PromotableElementImpl2,
@@ -437,7 +437,11 @@
   ExecutableElement? get enclosingFunction => _enclosingFunction;
 
   @override
-  FlowAnalysis<AstNode, StatementImpl, ExpressionImpl, PromotableElementImpl2,
+  FlowAnalysis<
+      AstNodeImpl,
+      StatementImpl,
+      ExpressionImpl,
+      PromotableElementImpl2,
       SharedTypeView<DartType>> get flow => flowAnalysis.flow!;
 
   bool get isConstructorTearoffsEnabled =>
@@ -810,7 +814,7 @@
 
   @override
   PatternResult<DartType> dispatchPattern(
-      SharedMatchContext context, AstNode node) {
+      SharedMatchContext context, AstNodeImpl node) {
     shared.PatternResult<DartType> analysisResult;
     if (node is DartPatternImpl) {
       analysisResult = node.resolvePattern(this, context);
@@ -977,8 +981,8 @@
   }
 
   @override
-  SwitchExpressionMemberInfo<AstNode, ExpressionImpl, PromotableElementImpl2>
-      getSwitchExpressionMemberInfo(
+  SwitchExpressionMemberInfo<AstNodeImpl, ExpressionImpl,
+      PromotableElementImpl2> getSwitchExpressionMemberInfo(
     covariant SwitchExpressionImpl node,
     int index,
   ) {
@@ -995,12 +999,12 @@
   }
 
   @override
-  SwitchStatementMemberInfo<AstNode, StatementImpl, ExpressionImpl,
+  SwitchStatementMemberInfo<AstNodeImpl, StatementImpl, ExpressionImpl,
       PromotableElementImpl2> getSwitchStatementMemberInfo(
     covariant SwitchStatementImpl node,
     int index,
   ) {
-    CaseHeadOrDefaultInfo<AstNode, ExpressionImpl, PromotableElementImpl2>
+    CaseHeadOrDefaultInfo<AstNodeImpl, ExpressionImpl, PromotableElementImpl2>
         ofMember(
       SwitchMemberImpl member,
     ) {
@@ -3792,7 +3796,7 @@
   }
 
   @override
-  void visitTryStatement(TryStatement node) {
+  void visitTryStatement(covariant TryStatementImpl node) {
     inferenceLogWriter?.enterStatement(node);
     checkUnreachableNode(node);
     var flow = flowAnalysis.flow!;