Skip to content

Commit e2477ad

Browse files
stereotype441Commit Queue
authored andcommitted
[analyzer] DartType no longer implements SharedTypeStructure.
Field types, getter types, method return types, and method parameter types are changed to `Impl` types in the following classes: - `BodyInferenceContext` - `BinaryExpressionResolver` - `ForResolver` - `ListPatternResolver` - `PrefixExpressionResolver` - `StaticTypeAnalyzer` - `TypeConstraintGatherer` - `TypeSystemOperations` - `YieldStatementResolver` Additionally, the type `DartType` is changed so that it no longer implements `SharedTypeStructure`. Instead, the private class `TypeImpl` implements `SharedTypeStructure`. 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: Idbf09e25a26249a16e65a59274e66b477480d697 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405802 Commit-Queue: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent a68ae55 commit e2477ad

18 files changed

+122
-116
lines changed

pkg/analyzer/lib/dart/element/type.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
/// the references to `String` and `int` are type arguments.
2424
library;
2525

26-
import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
2726
import 'package:analyzer/dart/element/element.dart';
2827
import 'package:analyzer/dart/element/element2.dart';
2928
import 'package:analyzer/dart/element/nullability_suffix.dart';
@@ -34,7 +33,7 @@ import 'package:meta/meta.dart';
3433
/// The type associated with elements in the element model.
3534
///
3635
/// Clients may not extend, implement or mix-in this class.
37-
abstract class DartType implements SharedType {
36+
abstract class DartType {
3837
/// If this type is an instantiation of a type alias, information about
3938
/// the alias element, and the type arguments.
4039
/// Otherwise return `null`.
@@ -144,7 +143,8 @@ abstract class DartType implements SharedType {
144143
@Deprecated('Check element, or use getDisplayString()')
145144
String? get name;
146145

147-
@override
146+
/// If this type ends in a suffix (`?` or `*`), the suffix it ends with;
147+
/// otherwise [NullabilitySuffix.none].
148148
NullabilitySuffix get nullabilitySuffix;
149149

150150
/// Use the given [visitor] to visit this type.
@@ -203,7 +203,6 @@ abstract class DartType implements SharedType {
203203
///
204204
/// Clients should not depend on the content of the returned value as it will
205205
/// be changed if doing so would improve the UX.
206-
@override
207206
String getDisplayString({
208207
@Deprecated('Only non-nullable by default mode is supported')
209208
bool withNullability = true,
@@ -214,7 +213,6 @@ abstract class DartType implements SharedType {
214213
/// Deprecated: this getter is a part of the analyzer's private
215214
/// implementation, and was exposed by accident (see
216215
/// https://github.com/dart-lang/sdk/issues/59763). Please use `==` instead.
217-
@override
218216
@Deprecated('Use `==` instead')
219217
bool isStructurallyEqualTo(covariant DartType other);
220218
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,7 +1963,7 @@ final class BlockFunctionBodyImpl extends FunctionBodyImpl
19631963
E? accept<E>(AstVisitor<E> visitor) => visitor.visitBlockFunctionBody(this);
19641964

19651965
@override
1966-
DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
1966+
DartType resolve(ResolverVisitor resolver, TypeImpl? imposedType) =>
19671967
resolver.visitBlockFunctionBody(this, imposedType: imposedType);
19681968

19691969
@override
@@ -5445,7 +5445,7 @@ final class EmptyFunctionBodyImpl extends FunctionBodyImpl
54455445
E? accept<E>(AstVisitor<E> visitor) => visitor.visitEmptyFunctionBody(this);
54465446

54475447
@override
5448-
DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
5448+
DartType resolve(ResolverVisitor resolver, TypeImpl? imposedType) =>
54495449
resolver.visitEmptyFunctionBody(this, imposedType: imposedType);
54505450

54515451
@override
@@ -6085,7 +6085,7 @@ final class ExpressionFunctionBodyImpl extends FunctionBodyImpl
60856085
visitor.visitExpressionFunctionBody(this);
60866086

60876087
@override
6088-
DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
6088+
DartType resolve(ResolverVisitor resolver, TypeImpl? imposedType) =>
60896089
resolver.visitExpressionFunctionBody(this, imposedType: imposedType);
60906090

60916091
@override
@@ -8210,7 +8210,7 @@ sealed class FunctionBodyImpl extends AstNodeImpl implements FunctionBody {
82108210
/// return type context for `return` statements.
82118211
///
82128212
/// Returns value is the actual return type of the method.
8213-
DartType resolve(ResolverVisitor resolver, DartType? imposedType);
8213+
DartType resolve(ResolverVisitor resolver, TypeImpl? imposedType);
82148214
}
82158215

82168216
/// A function declaration.
@@ -11263,7 +11263,7 @@ final class ListPatternImpl extends DartPatternImpl implements ListPattern {
1126311263
final Token rightBracket;
1126411264

1126511265
@override
11266-
DartType? requiredType;
11266+
TypeImpl? requiredType;
1126711267

1126811268
ListPatternImpl({
1126911269
required this.typeArguments,
@@ -12786,7 +12786,7 @@ final class NativeFunctionBodyImpl extends FunctionBodyImpl
1278612786
E? accept<E>(AstVisitor<E> visitor) => visitor.visitNativeFunctionBody(this);
1278712787

1278812788
@override
12789-
DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
12789+
DartType resolve(ResolverVisitor resolver, TypeImpl? imposedType) =>
1279012790
resolver.visitNativeFunctionBody(this, imposedType: imposedType);
1279112791

1279212792
@override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,7 +1537,7 @@ class RecordTypePositionalFieldImpl extends RecordTypeFieldImpl
15371537

15381538
/// The abstract class `TypeImpl` implements the behavior common to objects
15391539
/// representing the declared type of elements in the element model.
1540-
abstract class TypeImpl implements DartType {
1540+
abstract class TypeImpl implements DartType, SharedType {
15411541
@override
15421542
final InstantiatedTypeAliasElement? alias;
15431543

@@ -1637,7 +1637,7 @@ abstract class TypeImpl implements DartType {
16371637
}
16381638

16391639
@override
1640-
bool isStructurallyEqualTo(SharedType other) => this == other;
1640+
bool isStructurallyEqualTo(Object other) => this == other;
16411641

16421642
/// Returns true if this type references any of the [parameters].
16431643
bool referencesAny(Set<TypeParameterElement> parameters) {

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class TypeConstraintGatherer extends shared.TypeConstraintGenerator<
111111

112112
@override
113113
void addLowerConstraintForParameter(
114-
TypeParameterElementImpl2 element, DartType lower,
114+
TypeParameterElementImpl2 element, TypeImpl lower,
115115
{required AstNodeImpl? astNodeForTesting}) {
116116
GeneratedTypeConstraint generatedTypeConstraint =
117117
GeneratedTypeConstraint.lower(
@@ -125,7 +125,7 @@ class TypeConstraintGatherer extends shared.TypeConstraintGenerator<
125125

126126
@override
127127
void addUpperConstraintForParameter(
128-
TypeParameterElementImpl2 element, DartType upper,
128+
TypeParameterElementImpl2 element, TypeImpl upper,
129129
{required AstNodeImpl? astNodeForTesting}) {
130130
GeneratedTypeConstraint generatedTypeConstraint =
131131
GeneratedTypeConstraint.upper(
@@ -189,13 +189,13 @@ class TypeConstraintGatherer extends shared.TypeConstraintGenerator<
189189
}
190190

191191
@override
192-
List<DartType>? getTypeArgumentsAsInstanceOf(
192+
List<TypeImpl>? getTypeArgumentsAsInstanceOf(
193193
InterfaceType type, InterfaceElementImpl2 typeDeclaration) {
194194
for (var interface in type.element.allSupertypes) {
195195
if (interface.element3 == typeDeclaration) {
196196
var substitution = Substitution.fromInterfaceType(type);
197197
var substitutedInterface =
198-
substitution.substituteType(interface) as InterfaceType;
198+
substitution.substituteType(interface) as InterfaceTypeImpl;
199199
return substitutedInterface.typeArguments;
200200
}
201201
}
@@ -204,8 +204,8 @@ class TypeConstraintGatherer extends shared.TypeConstraintGenerator<
204204

205205
@override
206206
(
207-
DartType,
208-
DartType, {
207+
TypeImpl,
208+
TypeImpl, {
209209
List<TypeParameterElementImpl2> typeParametersToEliminate
210210
}) instantiateFunctionTypesAndProvideFreshTypeParameters(
211211
covariant FunctionTypeImpl P, covariant FunctionTypeImpl Q,

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -681,11 +681,7 @@ class TypeSystemImpl implements TypeSystem {
681681
return const <DartType>[];
682682
}
683683

684-
inferenceLogWriter?.enterGenericInference(
685-
// TODO(paulberry): make this cast unnecessary by switching `fnType` to
686-
// `FunctionTypeImpl`
687-
fnType.typeParameters.cast(),
688-
fnType);
684+
inferenceLogWriter?.enterGenericInference(fnType.typeParameters, fnType);
689685
// Create a TypeSystem that will allow certain type parameters to be
690686
// inferred. It will optimistically assume these type parameters can be
691687
// subtypes (or supertypes) as necessary, and track the constraints that

pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import 'package:analyzer/dart/ast/syntactic_entity.dart';
1111
import 'package:analyzer/dart/ast/token.dart';
1212
import 'package:analyzer/dart/element/element.dart';
1313
import 'package:analyzer/dart/element/type.dart';
14-
import 'package:analyzer/dart/element/type_provider.dart';
1514
import 'package:analyzer/error/listener.dart';
1615
import 'package:analyzer/src/dart/ast/ast.dart';
1716
import 'package:analyzer/src/dart/ast/extensions.dart';
1817
import 'package:analyzer/src/dart/element/element.dart';
1918
import 'package:analyzer/src/dart/element/type.dart';
19+
import 'package:analyzer/src/dart/element/type_provider.dart';
2020
import 'package:analyzer/src/dart/element/type_schema.dart';
2121
import 'package:analyzer/src/dart/element/type_system.dart';
2222
import 'package:analyzer/src/dart/resolver/resolution_result.dart';
@@ -37,11 +37,11 @@ class BinaryExpressionResolver {
3737

3838
ErrorReporter get _errorReporter => _resolver.errorReporter;
3939

40-
TypeProvider get _typeProvider => _resolver.typeProvider;
40+
TypeProviderImpl get _typeProvider => _resolver.typeProvider;
4141

4242
TypeSystemImpl get _typeSystem => _resolver.typeSystem;
4343

44-
void resolve(BinaryExpressionImpl node, {required DartType contextType}) {
44+
void resolve(BinaryExpressionImpl node, {required TypeImpl contextType}) {
4545
var operator = node.operator.type;
4646

4747
if (operator == TokenType.AMPERSAND_AMPERSAND) {
@@ -157,7 +157,7 @@ class BinaryExpressionResolver {
157157
}
158158

159159
void _resolveIfNull(BinaryExpressionImpl node,
160-
{required DartType contextType}) {
160+
{required TypeImpl contextType}) {
161161
var left = node.leftOperand;
162162
var right = node.rightOperand;
163163
var flow = _resolver.flowAnalysis.flow;
@@ -173,7 +173,7 @@ class BinaryExpressionResolver {
173173

174174
// - Let `T2` be the type of `e2` inferred with context type `J`, where:
175175
// - If `K` is `_`, `J = T1`.
176-
DartType j;
176+
TypeImpl j;
177177
if (contextType is DynamicType ||
178178
contextType is InvalidType ||
179179
contextType is UnknownInferredType) {
@@ -287,7 +287,7 @@ class BinaryExpressionResolver {
287287
var left = node.leftOperand;
288288

289289
var invokeType = node.staticInvokeType;
290-
DartType rightContextType;
290+
TypeImpl rightContextType;
291291
if (invokeType != null && invokeType.parameters.isNotEmpty) {
292292
// If this is a user-defined operator, set the right operand context
293293
// using the operator method's parameter type.

pkg/analyzer/lib/src/dart/resolver/body_inference_context.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class BodyInferenceContext {
2121

2222
/// The context type, computed from [imposedType].
2323
/// Might be `null` if an empty typing context.
24-
final DartType? contextType;
24+
final TypeImpl? contextType;
2525

2626
/// Types of all `return` or `yield` statements in the body.
2727
final List<DartType> _returnTypes = [];
@@ -37,7 +37,7 @@ class BodyInferenceContext {
3737
factory BodyInferenceContext({
3838
required TypeSystemImpl typeSystem,
3939
required FunctionBodyImpl node,
40-
required DartType? imposedType,
40+
required TypeImpl? imposedType,
4141
}) {
4242
var contextType = _contextTypeForImposed(typeSystem, node, imposedType);
4343

@@ -134,7 +134,7 @@ class BodyInferenceContext {
134134
// `FutureOr<void>`, let `S` be `void`.
135135
if (R is VoidType ||
136136
isAsynchronous &&
137-
R is InterfaceType &&
137+
R is InterfaceTypeImpl &&
138138
R.isDartAsyncFutureOr &&
139139
R.typeArguments[0] is VoidType) {
140140
return VoidTypeImpl.instance;
@@ -171,18 +171,20 @@ class BodyInferenceContext {
171171
.fold(initialType, _typeSystem.leastUpperBound);
172172
}
173173

174-
static DartType? _argumentOf(DartType type, InterfaceElement2 element) {
174+
static TypeImpl? _argumentOf(DartType type, InterfaceElement2 element) {
175175
var elementType = type.asInstanceOf2(element);
176176
if (elementType != null) {
177-
return elementType.typeArguments[0];
177+
// TODO(paulberry): eliminate this cast by changing the type of the
178+
// parameter `element` to `InterfaceElement2`.
179+
return elementType.typeArguments[0] as TypeImpl?;
178180
}
179181
return null;
180182
}
181183

182-
static DartType? _contextTypeForImposed(
184+
static TypeImpl? _contextTypeForImposed(
183185
TypeSystemImpl typeSystem,
184186
FunctionBody node,
185-
DartType? imposedType,
187+
TypeImpl? imposedType,
186188
) {
187189
if (imposedType == null) {
188190
return null;

pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,10 +370,7 @@ class ExtensionMemberResolver {
370370
}
371371
} else {
372372
inferenceLogWriter?.enterGenericInference(
373-
// TODO(paulberry): make this cast unnecessary by changing `element`
374-
// to `ExtensionElementImpl2`.
375-
typeParameters.cast(),
376-
element.extendedType);
373+
typeParameters.cast(), element.extendedType);
377374
var inferrer = GenericInferrer(
378375
_typeSystem,
379376
typeParameters,

0 commit comments

Comments
 (0)