Skip to content

Commit a68ae55

Browse files
stereotype441Commit Queue
authored andcommitted
[analyzer] Switch more types to "Impl" types.
Field types, getter types, method return types, and method parameter types are changed to `Impl` types in the following classes: - `AssignmentExpressionResolver` - `DartPatternImpl` and its subtypes - `ExpressionImpl` and some of its subtypes - `PropertyElementResolver` - `RecordLiteralResolver` - `TypeParameterElementImpl2` - `TypeSystemImpl` - `_InferenceLogWriterImpl` There is no change to the analyzer public API. 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 #59763. Change-Id: I2cc0dcf0a8e0d97053bf6da4975c729500bb1131 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405840 Auto-Submit: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent a1c5485 commit a68ae55

15 files changed

+132
-89
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ final class ArgumentListImpl extends AstNodeImpl implements ArgumentList {
427427
/// The list must be the same length as the number of arguments, but can
428428
/// contain `null` entries if a given argument doesn't correspond to a formal
429429
/// parameter.
430-
List<ParameterElement?>? _correspondingStaticParameters;
430+
List<ParameterElementMixin?>? _correspondingStaticParameters;
431431

432432
/// Initializes a newly created list of arguments.
433433
ArgumentListImpl({
@@ -444,10 +444,10 @@ final class ArgumentListImpl extends AstNodeImpl implements ArgumentList {
444444
@override
445445
Token get beginToken => leftParenthesis;
446446

447-
List<ParameterElement?>? get correspondingStaticParameters =>
447+
List<ParameterElementMixin?>? get correspondingStaticParameters =>
448448
_correspondingStaticParameters;
449449

450-
set correspondingStaticParameters(List<ParameterElement?>? parameters) {
450+
set correspondingStaticParameters(List<ParameterElementMixin?>? parameters) {
451451
if (parameters != null && parameters.length != _arguments.length) {
452452
throw ArgumentError(
453453
"Expected ${_arguments.length} parameters, not ${parameters.length}");
@@ -486,7 +486,7 @@ final class ArgumentListImpl extends AstNodeImpl implements ArgumentList {
486486
/// - the function being invoked is known based on static type information
487487
/// - the expression corresponds to one of the parameters of the function
488488
/// being invoked
489-
ParameterElement? _getStaticParameterElementFor(Expression expression) {
489+
ParameterElementMixin? _getStaticParameterElementFor(Expression expression) {
490490
if (_correspondingStaticParameters == null ||
491491
_correspondingStaticParameters!.length != _arguments.length) {
492492
// Either the AST structure hasn't been resolved, the invocation of which
@@ -822,7 +822,7 @@ final class AssignedVariablePatternImpl extends VariablePatternImpl
822822
}
823823

824824
@override
825-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
825+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
826826
var element = element2;
827827
if (element is PromotableElementImpl2) {
828828
return resolverVisitor
@@ -929,7 +929,7 @@ final class AssignmentExpressionImpl extends ExpressionImpl
929929
/// The parameter element representing the parameter to which the value of the
930930
/// right operand is bound, or `null` if the AST structure is not resolved or
931931
/// the function being invoked is not known based on static type information.
932-
ParameterElement? get _staticParameterElementForRightHandSide {
932+
ParameterElementMixin? get _staticParameterElementForRightHandSide {
933933
Element? executableElement;
934934
if (operator.type != TokenType.EQ) {
935935
executableElement = staticElement;
@@ -943,9 +943,11 @@ final class AssignmentExpressionImpl extends ExpressionImpl
943943
return null;
944944
}
945945
if (operator.type == TokenType.EQ && leftHandSide is IndexExpression) {
946-
return parameters.length == 2 ? parameters[1] : null;
946+
return parameters.length == 2
947+
? (parameters[1] as ParameterElementMixin)
948+
: null;
947949
}
948-
return parameters[0];
950+
return parameters[0] as ParameterElementMixin;
949951
}
950952

951953
return null;
@@ -2352,7 +2354,7 @@ final class CastPatternImpl extends DartPatternImpl implements CastPattern {
23522354
E? accept<E>(AstVisitor<E> visitor) => visitor.visitCastPattern(this);
23532355

23542356
@override
2355-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
2357+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
23562358
return resolverVisitor.analyzeCastPatternSchema().unwrapTypeSchemaView();
23572359
}
23582360

@@ -4024,7 +4026,7 @@ final class ConstantPatternImpl extends DartPatternImpl
40244026
E? accept<E>(AstVisitor<E> visitor) => visitor.visitConstantPattern(this);
40254027

40264028
@override
4027-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
4029+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
40284030
return resolverVisitor
40294031
.analyzeConstantPatternSchema()
40304032
.unwrapTypeSchemaView();
@@ -4740,7 +4742,7 @@ sealed class DartPattern implements AstNode, ListPatternElement {
47404742
sealed class DartPatternImpl extends AstNodeImpl
47414743
implements DartPattern, ListPatternElementImpl {
47424744
@override
4743-
DartType? matchedValueType;
4745+
TypeImpl? matchedValueType;
47444746

47454747
/// The context for this pattern.
47464748
///
@@ -4782,7 +4784,7 @@ sealed class DartPatternImpl extends AstNodeImpl
47824784
/// The variable pattern, itself, or wrapped in a unary pattern.
47834785
VariablePatternImpl? get variablePattern => null;
47844786

4785-
DartType computePatternSchema(ResolverVisitor resolverVisitor);
4787+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor);
47864788

47874789
/// Dispatches this pattern to the [resolverVisitor], with the given [context]
47884790
/// information.
@@ -5016,7 +5018,7 @@ final class DeclaredVariablePatternImpl extends VariablePatternImpl
50165018
visitor.visitDeclaredVariablePattern(this);
50175019

50185020
@override
5019-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
5021+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
50205022
return resolverVisitor
50215023
.analyzeDeclaredVariablePatternSchema(
50225024
type?.typeOrThrow.wrapSharedTypeView())
@@ -6115,7 +6117,7 @@ sealed class ExpressionImpl extends AstNodeImpl
61156117
bool get isAssignable => false;
61166118

61176119
@override
6118-
ParameterElement? get staticParameterElement {
6120+
ParameterElementMixin? get staticParameterElement {
61196121
var parent = this.parent;
61206122
if (parent is ArgumentListImpl) {
61216123
return parent._getStaticParameterElementFor(this);
@@ -6128,7 +6130,9 @@ sealed class ExpressionImpl extends AstNodeImpl
61286130
if (identical(parent.rightOperand, this)) {
61296131
var parameters = parent.staticInvokeType?.parameters;
61306132
if (parameters != null && parameters.isNotEmpty) {
6131-
return parameters[0];
6133+
// TODO(paulberry): eliminate this cast by changing the type of
6134+
// `BinaryExpressionImpl.staticInvokeType` to `FunctionTypeImpl`.
6135+
return parameters[0] as ParameterElementMixin;
61326136
}
61336137
return null;
61346138
}
@@ -10224,20 +10228,23 @@ final class IndexExpressionImpl extends ExpressionImpl
1022410228
/// index expression is bound, or `null` if the AST structure is not resolved,
1022510229
/// or the function being invoked is not known based on static type
1022610230
/// information.
10227-
ParameterElement? get _staticParameterElementForIndex {
10231+
ParameterElementMixin? get _staticParameterElementForIndex {
1022810232
Element? element = staticElement;
1022910233

1023010234
var parent = this.parent;
1023110235
if (parent is CompoundAssignmentExpression) {
1023210236
element = parent.writeElement ?? parent.readElement;
1023310237
}
1023410238

10235-
if (element is ExecutableElement) {
10239+
if (element is ExecutableElementOrMember) {
1023610240
List<ParameterElement> parameters = element.parameters;
1023710241
if (parameters.isEmpty) {
1023810242
return null;
1023910243
}
10240-
return parameters[0];
10244+
// TODO(paulberry): eliminate this cast by changing the type of
10245+
// `ExecutableElementOrMember.parameters` to
10246+
// `List<ParameterElementMixin>`.
10247+
return parameters[0] as ParameterElementMixin;
1024110248
}
1024210249
return null;
1024310250
}
@@ -11291,7 +11298,7 @@ final class ListPatternImpl extends DartPatternImpl implements ListPattern {
1129111298
E? accept<E>(AstVisitor<E> visitor) => visitor.visitListPattern(this);
1129211299

1129311300
@override
11294-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
11301+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1129511302
var elementType = typeArguments?.arguments.elementAtOrNull(0)?.typeOrThrow;
1129611303
return resolverVisitor
1129711304
.analyzeListPatternSchema(
@@ -11399,7 +11406,7 @@ final class LogicalAndPatternImpl extends DartPatternImpl
1139911406
E? accept<E>(AstVisitor<E> visitor) => visitor.visitLogicalAndPattern(this);
1140011407

1140111408
@override
11402-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
11409+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1140311410
return resolverVisitor
1140411411
.analyzeLogicalAndPatternSchema(leftOperand, rightOperand)
1140511412
.unwrapTypeSchemaView();
@@ -11478,7 +11485,7 @@ final class LogicalOrPatternImpl extends DartPatternImpl
1147811485
E? accept<E>(AstVisitor<E> visitor) => visitor.visitLogicalOrPattern(this);
1147911486

1148011487
@override
11481-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
11488+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1148211489
return resolverVisitor
1148311490
.analyzeLogicalOrPatternSchema(leftOperand, rightOperand)
1148411491
.unwrapTypeSchemaView();
@@ -11704,7 +11711,7 @@ final class MapPatternImpl extends DartPatternImpl implements MapPattern {
1170411711
final Token rightBracket;
1170511712

1170611713
@override
11707-
DartType? requiredType;
11714+
TypeImpl? requiredType;
1170811715

1170911716
MapPatternImpl({
1171011717
required this.typeArguments,
@@ -11739,7 +11746,7 @@ final class MapPatternImpl extends DartPatternImpl implements MapPattern {
1173911746
E? accept<E>(AstVisitor<E> visitor) => visitor.visitMapPattern(this);
1174011747

1174111748
@override
11742-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
11749+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1174311750
var typeArgumentNodes = this.typeArguments?.arguments;
1174411751
({SharedTypeView keyType, SharedTypeView valueType})? typeArguments;
1174511752
if (typeArgumentNodes != null && typeArgumentNodes.length == 2) {
@@ -13062,7 +13069,7 @@ final class NullAssertPatternImpl extends DartPatternImpl
1306213069
E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullAssertPattern(this);
1306313070

1306413071
@override
13065-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
13072+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1306613073
return resolverVisitor
1306713074
.analyzeNullCheckOrAssertPatternSchema(
1306813075
pattern,
@@ -13198,7 +13205,7 @@ final class NullCheckPatternImpl extends DartPatternImpl
1319813205
E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullCheckPattern(this);
1319913206

1320013207
@override
13201-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
13208+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1320213209
return resolverVisitor
1320313210
.analyzeNullCheckOrAssertPatternSchema(
1320413211
pattern,
@@ -13378,7 +13385,7 @@ final class ObjectPatternImpl extends DartPatternImpl implements ObjectPattern {
1337813385
E? accept<E>(AstVisitor<E> visitor) => visitor.visitObjectPattern(this);
1337913386

1338013387
@override
13381-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
13388+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1338213389
return resolverVisitor
1338313390
.analyzeObjectPatternSchema(SharedTypeView(type.typeOrThrow))
1338413391
.unwrapTypeSchemaView();
@@ -13565,7 +13572,7 @@ final class ParenthesizedPatternImpl extends DartPatternImpl
1356513572
visitor.visitParenthesizedPattern(this);
1356613573

1356713574
@override
13568-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
13575+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1356913576
return resolverVisitor
1357013577
.dispatchPatternSchema(pattern)
1357113578
.unwrapTypeSchemaView();
@@ -13793,7 +13800,7 @@ final class PatternAssignmentImpl extends ExpressionImpl
1379313800

1379413801
/// The pattern type schema, used for downward inference of [expression];
1379513802
/// or `null` if the node isn't resolved yet.
13796-
DartType? patternTypeSchema;
13803+
TypeImpl? patternTypeSchema;
1379713804

1379813805
PatternAssignmentImpl({
1379913806
required this.pattern,
@@ -14009,7 +14016,7 @@ final class PatternVariableDeclarationImpl extends AnnotatedNodeImpl
1400914016

1401014017
/// The pattern type schema, used for downward inference of [expression];
1401114018
/// or `null` if the node isn't resolved yet.
14012-
DartType? patternTypeSchema;
14019+
TypeImpl? patternTypeSchema;
1401314020

1401414021
/// Variables declared in [pattern].
1401514022
late final List<BindPatternVariableElementImpl> elements;
@@ -14187,15 +14194,17 @@ final class PostfixExpressionImpl extends ExpressionImpl
1418714194
/// The parameter element representing the parameter to which the value of the
1418814195
/// operand is bound, or `null` ff the AST structure is not resolved or the
1418914196
/// function being invoked isn't known based on static type information.
14190-
ParameterElement? get _staticParameterElementForOperand {
14197+
ParameterElementMixin? get _staticParameterElementForOperand {
1419114198
if (staticElement == null) {
1419214199
return null;
1419314200
}
1419414201
List<ParameterElement> parameters = staticElement!.parameters;
1419514202
if (parameters.isEmpty) {
1419614203
return null;
1419714204
}
14198-
return parameters[0];
14205+
// TODO(paulberry): eliminate this cast by changing the type of
14206+
// `staticElement` to `MethodElementOrMember?`.
14207+
return parameters[0] as ParameterElementMixin;
1419914208
}
1420014209

1420114210
@override
@@ -14398,15 +14407,17 @@ final class PrefixExpressionImpl extends ExpressionImpl
1439814407
/// The parameter element representing the parameter to which the value of the
1439914408
/// operand is bound, or `null` if the AST structure is not resolved or the
1440014409
/// function being invoked isn't known based on static type information.
14401-
ParameterElement? get _staticParameterElementForOperand {
14410+
ParameterElementMixin? get _staticParameterElementForOperand {
1440214411
if (staticElement == null) {
1440314412
return null;
1440414413
}
1440514414
List<ParameterElement> parameters = staticElement!.parameters;
1440614415
if (parameters.isEmpty) {
1440714416
return null;
1440814417
}
14409-
return parameters[0];
14418+
// TODO(paulberry): eliminate this cast by changing the type of
14419+
// `staticElement` to `MethodElementOrMember?`.
14420+
return parameters[0] as ParameterElementMixin;
1441014421
}
1441114422

1441214423
@override
@@ -14720,7 +14731,7 @@ final class RecordPatternImpl extends DartPatternImpl implements RecordPattern {
1472014731
E? accept<E>(AstVisitor<E> visitor) => visitor.visitRecordPattern(this);
1472114732

1472214733
@override
14723-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
14734+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1472414735
return resolverVisitor
1472514736
.analyzeRecordPatternSchema(
1472614737
fields: resolverVisitor.buildSharedPatternFields(
@@ -15177,7 +15188,7 @@ final class RelationalPatternImpl extends DartPatternImpl
1517715188
E? accept<E>(AstVisitor<E> visitor) => visitor.visitRelationalPattern(this);
1517815189

1517915190
@override
15180-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
15191+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1518115192
return resolverVisitor
1518215193
.analyzeRelationalPatternSchema()
1518315194
.unwrapTypeSchemaView();
@@ -18859,7 +18870,7 @@ final class WildcardPatternImpl extends DartPatternImpl
1885918870
E? accept<E>(AstVisitor<E> visitor) => visitor.visitWildcardPattern(this);
1886018871

1886118872
@override
18862-
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
18873+
TypeImpl computePatternSchema(ResolverVisitor resolverVisitor) {
1886318874
return resolverVisitor
1886418875
.analyzeDeclaredVariablePatternSchema(
1886518876
type?.typeOrThrow.wrapSharedTypeView())

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11469,7 +11469,7 @@ class TypeParameterElementImpl2 extends TypeDefiningElementImpl2
1146911469
final String? name3;
1147011470

1147111471
@override
11472-
DartType? bound;
11472+
TypeImpl? bound;
1147311473

1147411474
TypeParameterElementImpl2({
1147511475
required this.firstFragment,
@@ -11487,9 +11487,7 @@ class TypeParameterElementImpl2 extends TypeDefiningElementImpl2
1148711487
TypeParameterElement2 get baseElement => this;
1148811488

1148911489
@override
11490-
TypeImpl? get boundShared =>
11491-
// TODO(paulberry): get rid of this cast by changing the type of `bound`.
11492-
bound as TypeImpl?;
11490+
TypeImpl? get boundShared => bound;
1149311491

1149411492
@override
1149511493
List<TypeParameterElementImpl> get fragments {

pkg/analyzer/lib/src/dart/element/replacement_visitor.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,11 @@ class ReplacementVisitor
175175
var newBound = visitTypeParameterBound(bound);
176176
if (newBound != null) {
177177
newTypeParameters ??= node.typeParameters.toList(growable: false);
178-
newTypeParameters[i] = typeParameter.freshCopy()..bound = newBound;
178+
newTypeParameters[i] = typeParameter.freshCopy()
179+
..bound =
180+
// TODO(paulberry): eliminate this cast by changing the return
181+
// type of `visitTypeParameterBound`.
182+
newBound as TypeImpl;
179183
}
180184
}
181185
}
@@ -279,7 +283,11 @@ class ReplacementVisitor
279283
var newBound = visitTypeParameterBound(bound);
280284
if (newBound != null) {
281285
newTypeParameters ??= node.typeParameters.toList(growable: false);
282-
newTypeParameters[i] = typeParameter.freshCopy()..bound = newBound;
286+
newTypeParameters[i] = typeParameter.freshCopy()
287+
..bound =
288+
// TODO(paulberry): eliminate this cast by changing the return
289+
// type of `visitTypeParameterBound`.
290+
newBound as TypeImpl;
283291
}
284292
}
285293
}

pkg/analyzer/lib/src/dart/element/subtype.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ class SubtypeHelper {
344344
}
345345

346346
/// Check that [f] is a subtype of [g].
347-
bool _isFunctionSubtypeOf(FunctionType f, FunctionType g) {
347+
bool _isFunctionSubtypeOf(FunctionTypeImpl f, FunctionType g) {
348348
var fresh =
349349
_typeSystem.relateTypeParameters2(f.typeParameters, g.typeParameters);
350350
if (fresh == null) {

pkg/analyzer/lib/src/dart/element/top_merge.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,9 @@ class TopMergeHelper {
361361
aBound = aSubstitution.substituteType(aBound);
362362
bBound = bSubstitution.substituteType(bBound);
363363
var newBound = topMerge(aBound, bBound);
364-
newParameters[i].bound = newBound;
364+
// TODO(paulberry): eliminate this cast by changing the return type of
365+
// `topMerge`.
366+
newParameters[i].bound = newBound as TypeImpl;
365367
newParameters[i].firstFragment.bound = newBound;
366368
} else {
367369
return null;

0 commit comments

Comments
 (0)