[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!;