[analyzer] Use PromotableElementImpl2 to interface to shared analysis code.
Change the analyzer's use of shared classes and mixins to to supply
`PromotableElementImpl2` instead of `PromotableElement2` as the type
parameter that represents promotable variables.
This is a follow-up to
https://dart-review.googlesource.com/c/sdk/+/400660, which changed the
code from supplying `PromotableElement` to `PromotableElement2`. That
change was both larger and riskier than this one, since it changed the
identity of the objects that were passed to shared analysis code. This
change merely substitutes a more precise type for the type argument,
without changing the underlying objects in use.
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: I2013dd0b7d38350ed7a9f2f4bd875d0006941754
Bug: https://github.com/dart-lang/sdk/issues/59763
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401740
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: 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 6747887..7898075 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -821,7 +821,7 @@
@override
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
var element = element2;
- if (element is PromotableElement2) {
+ if (element is PromotableElementImpl2) {
return resolverVisitor
.analyzeAssignedVariablePatternSchema(element)
.unwrapTypeSchemaView();
@@ -2583,7 +2583,7 @@
@experimental
@override
- LocalVariableElement2? get declaredElement2 {
+ LocalVariableElementImpl2? get declaredElement2 {
return declaredElement.asElement2 as LocalVariableElementImpl2?;
}
@@ -4892,7 +4892,7 @@
@experimental
@override
- LocalVariableElement2? get declaredElement2 {
+ LocalVariableElementImpl2? get declaredElement2 {
return declaredElement.asElement2 as LocalVariableElementImpl2?;
}
@@ -4983,7 +4983,7 @@
@experimental
@override
- BindPatternVariableElement2? get declaredElement2 {
+ BindPatternVariableElementImpl2? get declaredElement2 {
return declaredElement?.element;
}
@@ -17274,7 +17274,7 @@
final bool hasLabels;
/// Joined variables declared in [members], available in [statements].
- late Map<String, PromotableElement2> variables;
+ late Map<String, PromotableElementImpl2> variables;
SwitchStatementCaseGroup(this.members, this.hasLabels);
diff --git a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
index 9890913..a5fc6ba 100644
--- a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
@@ -21,7 +21,6 @@
UnknownTypeConstraintOrigin;
import 'package:_fe_analyzer_shared/src/types/shared_type.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/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/element/element.dart';
@@ -31,19 +30,27 @@
/// Instance of [shared.GeneratedTypeConstraint] specific to the Analyzer.
typedef GeneratedTypeConstraint = shared.GeneratedTypeConstraint<DartType,
- TypeParameterElement, PromotableElement2>;
+ TypeParameterElement, PromotableElementImpl2>;
/// Instance of [shared.MergedTypeConstraint] specific to the Analyzer.
-typedef MergedTypeConstraint = shared.MergedTypeConstraint<DartType,
- TypeParameterElement, PromotableElement2, InterfaceType, InterfaceElement>;
+typedef MergedTypeConstraint = shared.MergedTypeConstraint<
+ DartType,
+ TypeParameterElement,
+ PromotableElementImpl2,
+ InterfaceType,
+ InterfaceElement>;
/// Instance of [shared.TypeConstraintFromArgument] specific to the Analyzer.
-typedef TypeConstraintFromArgument = shared.TypeConstraintFromArgument<DartType,
- PromotableElement2, TypeParameterElement, InterfaceType, InterfaceElement>;
+typedef TypeConstraintFromArgument = shared.TypeConstraintFromArgument<
+ DartType,
+ PromotableElementImpl2,
+ TypeParameterElement,
+ InterfaceType,
+ InterfaceElement>;
/// Instance of [shared.TypeConstraintFromExtendsClause] specific to the Analyzer.
typedef TypeConstraintFromExtendsClause
- = shared.TypeConstraintFromExtendsClause<DartType, PromotableElement2,
+ = shared.TypeConstraintFromExtendsClause<DartType, PromotableElementImpl2,
TypeParameterElement, InterfaceType, InterfaceElement>;
/// Instance of [shared.TypeConstraintFromFunctionContext] specific to the Analyzer.
@@ -52,7 +59,7 @@
DartType,
DartType,
DartType,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement>;
@@ -62,19 +69,23 @@
DartType,
DartType,
DartType,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement>;
/// Instance of [shared.TypeConstraintOrigin] specific to the Analyzer.
-typedef TypeConstraintOrigin = shared.TypeConstraintOrigin<DartType,
- PromotableElement2, TypeParameterElement, InterfaceType, InterfaceElement>;
+typedef TypeConstraintOrigin = shared.TypeConstraintOrigin<
+ DartType,
+ PromotableElementImpl2,
+ TypeParameterElement,
+ InterfaceType,
+ InterfaceElement>;
/// Instance of [shared.UnknownTypeConstraintOrigin] specific to the Analyzer.
typedef UnknownTypeConstraintOrigin = shared.UnknownTypeConstraintOrigin<
DartType,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement>;
@@ -84,7 +95,7 @@
class TypeConstraintGatherer extends shared.TypeConstraintGenerator<
DartType,
ParameterElement,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement,
@@ -93,7 +104,7 @@
shared.TypeConstraintGeneratorMixin<
DartType,
ParameterElement,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement,
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index b3b114e..e90d752 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -7,12 +7,12 @@
import 'package:analyzer/dart/analysis/features.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/dart/element/type_provider.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
@@ -103,7 +103,7 @@
whyNotPromoted: whyNotPromoted, contextType: contextType);
if (flow != null) {
- if (writeElement2 is PromotableElement2) {
+ if (writeElement2 is PromotableElementImpl2) {
flow.write(node, writeElement2, SharedTypeView(node.typeOrThrow),
hasRead ? null : right);
}
@@ -362,7 +362,7 @@
if (left is SimpleIdentifier) {
var element = left.element;
- if (element is PromotableElement2) {
+ if (element is PromotableElementImpl2) {
var assigned = flowAnalysis.isDefinitelyAssigned(left, element);
var unassigned = flowAnalysis.isDefinitelyUnassigned(left, element);
diff --git a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
index 4b2d8d6..656cab3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -8,12 +8,12 @@
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/dart/element/type_provider.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
@@ -141,13 +141,13 @@
if (left is SimpleIdentifierImpl && right is NullLiteralImpl) {
var element = left.element;
- if (element is PromotableElement2 &&
+ if (element is PromotableElementImpl2 &&
flowAnalysis.isDefinitelyUnassigned(left, element)) {
reportNullComparison(left, node.operator);
}
} else if (right is SimpleIdentifierImpl && left is NullLiteralImpl) {
var element = right.element;
- if (element is PromotableElement2 &&
+ if (element is PromotableElementImpl2 &&
flowAnalysis.isDefinitelyUnassigned(right, element)) {
reportNullComparison(node.operator, right);
}
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 df7f403..9fa65e1 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -54,7 +54,8 @@
/// For each top level or class level declaration, the assigned variables
/// information that was computed for it.
- final Map<AstNode, AssignedVariablesForTesting<AstNode, PromotableElement2>>
+ final Map<AstNode,
+ AssignedVariablesForTesting<AstNode, PromotableElementImpl2>>
assignedVariables = {};
/// For each expression that led to an error because it was not promoted, a
@@ -76,7 +77,7 @@
final TypeSystemOperations typeOperations;
/// Precomputed sets of potentially assigned variables.
- AssignedVariables<AstNode, PromotableElement2>? assignedVariables;
+ AssignedVariables<AstNode, PromotableElementImpl2>? assignedVariables;
/// The result for post-resolution stages of analysis, for testing only.
final FlowAnalysisDataForTesting? dataForTesting;
@@ -95,7 +96,7 @@
final bool inferenceUpdate4Enabled;
/// The current flow, when resolving a function body, or `null` otherwise.
- FlowAnalysis<AstNode, Statement, Expression, PromotableElement2,
+ FlowAnalysis<AstNode, Statement, Expression, PromotableElementImpl2,
SharedTypeView<DartType>>? flow;
FlowAnalysisHelper(bool retainDataForTesting, FeatureSet featureSet,
@@ -173,10 +174,10 @@
retainDataForTesting: dataForTesting != null, visit: visit);
if (dataForTesting != null) {
dataForTesting!.assignedVariables[node] = assignedVariables
- as AssignedVariablesForTesting<AstNode, PromotableElement2>;
+ as AssignedVariablesForTesting<AstNode, PromotableElementImpl2>;
}
flow = isNonNullableByDefault
- ? FlowAnalysis<AstNode, Statement, Expression, PromotableElement2,
+ ? FlowAnalysis<AstNode, Statement, Expression, PromotableElementImpl2,
SharedTypeView<DartType>>(
typeOperations,
assignedVariables!,
@@ -185,7 +186,7 @@
fieldPromotionEnabled: fieldPromotionEnabled,
inferenceUpdate4Enabled: inferenceUpdate4Enabled,
)
- : FlowAnalysis<AstNode, Statement, Expression, PromotableElement2,
+ : FlowAnalysis<AstNode, Statement, Expression, PromotableElementImpl2,
SharedTypeView<DartType>>.legacy(
typeOperations, assignedVariables!);
}
@@ -235,7 +236,10 @@
if (parameters != null) {
for (var parameter in parameters.parameters) {
- var declaredElement = parameter.declaredFragment!.element;
+ // TODO(paulberry): try to remove this cast by changing `parameters` to
+ // a `FormalParameterListImpl`
+ var declaredElement =
+ parameter.declaredFragment!.element as PromotableElementImpl2;
// TODO(paulberry): `skipDuplicateCheck` is currently needed to work
// around a failure in duplicate_definition_test.dart; fix this.
flow!.declare(declaredElement, SharedTypeView(declaredElement.type),
@@ -263,7 +267,7 @@
bool isDefinitelyAssigned(
SimpleIdentifier node,
- PromotableElement2 element,
+ PromotableElementImpl2 element,
) {
var isAssigned = flow!.isAssigned(element);
@@ -280,7 +284,7 @@
bool isDefinitelyUnassigned(
SimpleIdentifier node,
- PromotableElement2 element,
+ PromotableElementImpl2 element,
) {
var isUnassigned = flow!.isUnassigned(element);
@@ -335,7 +339,8 @@
var variables = node.variables;
for (var i = 0; i < variables.length; ++i) {
var variable = variables[i];
- var declaredElement = variable.declaredElement2 as PromotableElement2;
+ var declaredElement =
+ variable.declaredElement2 as PromotableElementImpl2;
flow!.declare(declaredElement, SharedTypeView(declaredElement.type),
initialized: variable.initializer != null);
}
@@ -343,11 +348,11 @@
}
/// Computes the [AssignedVariables] map for the given [node].
- static AssignedVariables<AstNode, PromotableElement2>
+ static AssignedVariables<AstNode, PromotableElementImpl2>
computeAssignedVariables(AstNode node, FormalParameterList? parameters,
{bool retainDataForTesting = false,
void Function(AstVisitor<Object?> visitor)? visit}) {
- AssignedVariables<AstNode, PromotableElement2> assignedVariables =
+ AssignedVariables<AstNode, PromotableElementImpl2> assignedVariables =
retainDataForTesting
? AssignedVariablesForTesting()
: AssignedVariables();
@@ -418,10 +423,10 @@
class TypeSystemOperations
with
- TypeAnalyzerOperationsMixin<DartType, PromotableElement2,
+ TypeAnalyzerOperationsMixin<DartType, PromotableElementImpl2,
TypeParameterElement, InterfaceType, InterfaceElement>
implements
- TypeAnalyzerOperations<DartType, PromotableElement2,
+ TypeAnalyzerOperations<DartType, PromotableElementImpl2,
TypeParameterElement, InterfaceType, InterfaceElement> {
final bool strictCasts;
final TypeSystemImpl typeSystem;
@@ -1189,7 +1194,7 @@
@override
DartType getType(SimpleIdentifier node, {required bool isRead}) {
var variable = node.element as VariableElement2;
- if (variable is PromotableElement2) {
+ if (variable is PromotableElementImpl2) {
var promotedType = isRead
? _manager.flow?.variableRead(node, variable)
: _manager.flow?.promotedType(variable);
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index 97dffdc..3c70e91 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -123,10 +123,10 @@
void _forEachParts(AstNode node, bool isAsync, ForEachParts forEachParts,
void Function() visitBody) {
Expression iterable = forEachParts.iterable;
- DeclaredIdentifier? loopVariable;
+ DeclaredIdentifierImpl? loopVariable;
SimpleIdentifier? identifier;
Element2? identifierElement;
- if (forEachParts is ForEachPartsWithDeclaration) {
+ if (forEachParts is ForEachPartsWithDeclarationImpl) {
loopVariable = forEachParts.loopVariable;
} else if (forEachParts is ForEachPartsWithIdentifier) {
identifier = forEachParts.identifier;
@@ -188,7 +188,7 @@
}
_resolver.flowAnalysis.flow?.forEach_bodyBegin(node);
- if (identifierElement is PromotableElement2 &&
+ if (identifierElement is PromotableElementImpl2 &&
forEachParts is ForEachPartsWithIdentifier) {
_resolver.flowAnalysis.flow?.write(
forEachParts, identifierElement, SharedTypeView(elementType), null);
diff --git a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
index 37a2199..a07a2b2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -6,11 +6,11 @@
import 'package:analyzer/dart/analysis/features.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/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
@@ -177,7 +177,7 @@
}
if (operand is SimpleIdentifier) {
var element = operand.element;
- if (element is PromotableElement2) {
+ if (element is PromotableElementImpl2) {
if (_resolver.definingLibrary.featureSet
.isEnabled(Feature.inference_update_4)) {
_resolver.flowAnalysis.flow?.postIncDec(
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
index 29b445e..09c0d2c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -5,12 +5,12 @@
import 'package:_fe_analyzer_shared/src/types/shared_type.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/dart/element/type_provider.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
@@ -236,7 +236,7 @@
}
if (operand is SimpleIdentifier) {
var element = operand.element;
- if (element is PromotableElement2) {
+ if (element is PromotableElementImpl2) {
_resolver.flowAnalysis.flow
?.write(node, element, SharedTypeView(staticType), null);
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 3284b97..2a54daa 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -1928,7 +1928,7 @@
}
class _VariableBinder
- extends VariableBinder<DartPatternImpl, PromotableElement2> {
+ extends VariableBinder<DartPatternImpl, PromotableElementImpl2> {
final TypeProvider typeProvider;
_VariableBinder({
@@ -1978,7 +1978,7 @@
}
class _VariableBinderErrors
- implements VariableBinderErrors<DartPatternImpl, PromotableElement2> {
+ implements VariableBinderErrors<DartPatternImpl, PromotableElementImpl2> {
final ResolutionVisitor visitor;
_VariableBinderErrors(this.visitor);
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 281b707..0f1f4b4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
@@ -10,6 +10,7 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
import 'package:analyzer/src/error/codes.dart';
@@ -20,8 +21,14 @@
/// analyzer's [ErrorReporter] class.
class SharedTypeAnalyzerErrors
implements
- shared.TypeAnalyzerErrors<AstNode, Statement, Expression,
- PromotableElement2, SharedTypeView<DartType>, DartPattern, void> {
+ shared.TypeAnalyzerErrors<
+ AstNode,
+ Statement,
+ Expression,
+ PromotableElementImpl2,
+ SharedTypeView<DartType>,
+ DartPattern,
+ void> {
final ErrorReporter _errorReporter;
SharedTypeAnalyzerErrors(this._errorReporter);
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index 456e446..89fa8b4 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
import 'package:analyzer/src/dart/resolver/scope.dart';
@@ -466,7 +467,7 @@
target = target?.unParenthesized;
if (target is SimpleIdentifier) {
var element = target.element;
- if (element is PromotableElement2 &&
+ if (element is PromotableElementImpl2 &&
flowAnalysis.isDefinitelyUnassigned(target, element)) {
var parent = node.parent;
while (parent is MethodInvocation ||
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index bddd20a..f3d8bc0 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -98,7 +98,7 @@
bool Function(Source) inferenceLoggingPredicate = (_) => false;
typedef SharedMatchContext = shared.MatchContext<AstNode, Expression,
- DartPattern, SharedTypeView<DartType>, PromotableElement2>;
+ DartPattern, SharedTypeView<DartType>, PromotableElementImpl2>;
typedef SharedPatternField
= shared.RecordPatternField<PatternFieldImpl, DartPatternImpl>;
@@ -125,7 +125,7 @@
AstNode,
Statement,
Expression,
- PromotableElement2,
+ PromotableElementImpl2,
DartPattern,
void,
TypeParameterElement,
@@ -437,7 +437,7 @@
ExecutableElement? get enclosingFunction => _enclosingFunction;
@override
- FlowAnalysis<AstNode, Statement, Expression, PromotableElement2,
+ FlowAnalysis<AstNode, Statement, Expression, PromotableElementImpl2,
SharedTypeView<DartType>> get flow => flowAnalysis.flow!;
bool get isConstructorTearoffsEnabled =>
@@ -454,7 +454,7 @@
@override
shared.TypeAnalyzerOperations<
DartType,
- PromotableElement2,
+ PromotableElementImpl2,
TypeParameterElement,
InterfaceType,
InterfaceElement> get operations => flowAnalysis.typeOperations;
@@ -668,9 +668,8 @@
return;
}
- if (element is VariableElement2) {
- var assigned = flowAnalysis.isDefinitelyAssigned(
- node, element as PromotableElement2);
+ if (element is PromotableElementImpl2) {
+ var assigned = flowAnalysis.isDefinitelyAssigned(node, element);
var unassigned = flowAnalysis.isDefinitelyUnassigned(node, element);
if (element.isLate) {
@@ -978,7 +977,7 @@
}
@override
- SwitchExpressionMemberInfo<AstNode, Expression, PromotableElement2>
+ SwitchExpressionMemberInfo<AstNode, Expression, PromotableElementImpl2>
getSwitchExpressionMemberInfo(
covariant SwitchExpressionImpl node,
int index,
@@ -996,12 +995,12 @@
}
@override
- SwitchStatementMemberInfo<AstNode, Statement, Expression, PromotableElement2>
- getSwitchStatementMemberInfo(
+ SwitchStatementMemberInfo<AstNode, Statement, Expression,
+ PromotableElementImpl2> getSwitchStatementMemberInfo(
covariant SwitchStatementImpl node,
int index,
) {
- CaseHeadOrDefaultInfo<AstNode, Expression, PromotableElement2> ofMember(
+ CaseHeadOrDefaultInfo<AstNode, Expression, PromotableElementImpl2> ofMember(
SwitchMemberImpl member,
) {
if (member is SwitchCaseImpl) {
@@ -1397,7 +1396,7 @@
required SharedMatchContext context,
}) {
var element = node.element2;
- if (element is! PromotableElement2) {
+ if (element is! PromotableElementImpl2) {
return PatternResult(
matchedValueType: SharedTypeView(InvalidTypeImpl.instance));
}
@@ -1883,7 +1882,7 @@
if (staticType != null && expression is SimpleIdentifier) {
var simpleIdentifier = expression as SimpleIdentifier;
var element = simpleIdentifier.element;
- if (element is PromotableElement2 &&
+ if (element is PromotableElementImpl2 &&
!expression.typeOrThrow.isDartCoreNull &&
typeSystem.isNullable(element.type) &&
typeSystem.isNonNullable(staticType) &&
@@ -3819,9 +3818,13 @@
for (var i = 0; i < catchLength; ++i) {
var catchClause = catchClauses[i];
nullSafetyDeadCodeVerifier.verifyCatchClause(catchClause);
+ // TODO(paulberry): try to remove these casts by changing `node` to a
+ // `TryStatementImpl`
flow.tryCatchStatement_catchBegin(
- catchClause.exceptionParameter?.declaredElement2,
- catchClause.stackTraceParameter?.declaredElement2,
+ catchClause.exceptionParameter?.declaredElement2
+ as PromotableElementImpl2?,
+ catchClause.stackTraceParameter?.declaredElement2
+ as PromotableElementImpl2?,
);
catchClause.accept(this);
flow.tryCatchStatement_catchEnd();
@@ -3890,8 +3893,10 @@
var parent = node.parent as VariableDeclarationList;
var declaredType = parent.type;
var initializerStaticType = initializer.typeOrThrow;
- flowAnalysis.flow?.initialize(node.declaredElement2 as PromotableElement2,
- SharedTypeView(initializerStaticType), initializer,
+ flowAnalysis.flow?.initialize(
+ node.declaredElement2 as PromotableElementImpl2,
+ SharedTypeView(initializerStaticType),
+ initializer,
isFinal: parent.isFinal,
isLate: parent.isLate,
isImplicitlyTyped: declaredType == null);