Skip to content

Commit eba7e49

Browse files
stereotype441Commit Queue
authored andcommitted
[analyzer] Change VariableElementImpl.type setter to TypeImpl.
The types of `LocalVariableElementImpl2.type=`, `PropertyInducingElementImpl.type=`, and `VariableElementImpl.type=` are all changed to accept `TypeImpl` rather than `DartType`. To reduce the number of casts that need to be added, some field types, getter types, method return types, and method parameter types are changed to `Impl` types in the following classes: - `DeclarationBuilder` - `ElementFactory` - `ElementsTypesMixin` - `ForResolver` - `FunctionExpressionResolver` - `FunctionTypeBuilder` - `FunctionTypeTest` - `InstanceMemberInferrer` - `LocalVariableElementImpl2` - `NamedTypeBuilder` - `NonCovariantTypeParameterPositionVisitorTest` - `ReplacementVisitor` - `ResolutionReader` - `ResolutionVisitor` - `TypeBuilder` - `TypeReferencesAnyTest` - `TypesBuilder` - `_MockSdkElementsBuilder` - `_Node` 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: I726bb1ce414eec3f360ae655c1f55e6be9e713fe Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405242 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent 751fe13 commit eba7e49

25 files changed

+148
-118
lines changed

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7844,9 +7844,9 @@ class LocalVariableElementImpl2 extends PromotableElementImpl2
78447844
Metadata get metadata2 => wrappedElement.metadata2;
78457845

78467846
@override
7847-
DartType get type => _wrappedElement.type;
7847+
TypeImpl get type => _wrappedElement.type;
78487848

7849-
set type(DartType type) => _wrappedElement.type = type;
7849+
set type(TypeImpl type) => _wrappedElement.type = type;
78507850

78517851
LocalVariableElementImpl get wrappedElement {
78527852
return _wrappedElement;
@@ -9310,7 +9310,9 @@ class ParameterElementImpl extends VariableElementImpl
93109310
nameOffset: -1,
93119311
parameterKind: parameterKind,
93129312
);
9313-
element.type = type;
9313+
// TODO(paulberry): remove this cast by changing the type of the `type`
9314+
// parameter.
9315+
element.type = type as TypeImpl;
93149316
element.isSynthetic = true;
93159317
return element;
93169318
}
@@ -10357,7 +10359,7 @@ abstract class PropertyInducingElementImpl
1035710359
}
1035810360

1035910361
@override
10360-
set type(DartType type) {
10362+
set type(TypeImpl type) {
1036110363
super.type = type;
1036210364
// Reset cached types of synthetic getters and setters.
1036310365
// TODO(scheglov): Consider not caching these types.
@@ -11630,10 +11632,8 @@ abstract class VariableElementImpl extends ElementImpl
1163011632
@override
1163111633
TypeImpl get type => _type!;
1163211634

11633-
set type(DartType type) {
11634-
// TODO(paulberry): eliminate this cast by changing the setter parameter
11635-
// type to `TypeImpl`.
11636-
_type = type as TypeImpl;
11635+
set type(TypeImpl type) {
11636+
_type = type;
1163711637
}
1163811638

1163911639
@override

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ReplacementVisitor
5858
required FunctionTypeBuilder type,
5959
required List<TypeParameterElement>? newTypeParameters,
6060
required List<ParameterElement>? newParameters,
61-
required DartType? newReturnType,
61+
required TypeImpl? newReturnType,
6262
required NullabilitySuffix? newNullability,
6363
}) {
6464
if (newNullability == null &&
@@ -311,13 +311,15 @@ class ReplacementVisitor
311311
}
312312
}
313313

314-
DartType? visitType(DartType? type) {
314+
TypeImpl? visitType(DartType? type) {
315315
if (type == null) return null;
316316
var result = type.accept(this);
317317
if (substitution != null) {
318318
result = substitution.substituteType(result ?? type);
319319
}
320-
return result;
320+
// TODO(paulberry): eliminate this cast by changing `ReplacementVisitor`
321+
// to implement `TypeVisitor<TypeImpl?>`.
322+
return result as TypeImpl?;
321323
}
322324

323325
var newReturnType = visitType(node.returnType);

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,9 @@ abstract class _TypeSubstitutor
554554

555555
inner.invertVariance();
556556

557-
var returnType = type.returnType.accept(inner);
557+
// TODO(paulberry): eliminate this cast by changing `_TypeSubstitutor` to
558+
// implement `TypeVisitor<TypeImpl>`.
559+
var returnType = type.returnType.accept(inner) as TypeImpl;
558560

559561
if (useCounter == before) return type;
560562

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class ForResolver {
9999
/// a type for the elements being iterated over. Inference is based
100100
/// on the type of the iterator or stream over which the foreach loop
101101
/// is defined.
102-
DartType _computeForEachElementType(Expression iterable, bool isAsync) {
102+
TypeImpl _computeForEachElementType(ExpressionImpl iterable, bool isAsync) {
103103
var iterableType = iterable.staticType;
104104
if (iterableType == null) {
105105
return InvalidTypeImpl.instance;

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class FunctionExpressionResolver {
8080
return;
8181
}
8282

83-
void inferType(ParameterElementImpl p, DartType inferredType) {
83+
void inferType(ParameterElementImpl p, TypeImpl inferredType) {
8484
// Check that there is no declared type, and that we have not already
8585
// inferred a type in some fashion.
8686
if (p.hasImplicitType && p.type is DynamicType) {
@@ -108,8 +108,11 @@ class FunctionExpressionResolver {
108108
Iterator<ParameterElement> fnPositional =
109109
contextType.parameters.where((p) => p.isPositional).iterator;
110110
while (positional.moveNext() && fnPositional.moveNext()) {
111-
inferType(positional.current as ParameterElementImpl,
112-
fnPositional.current.type);
111+
inferType(
112+
positional.current as ParameterElementImpl,
113+
// TODO(paulberry): eliminate this cast by changing the type of
114+
// `contextType` to `FunctionTypeImpl`.
115+
fnPositional.current.type as TypeImpl);
113116
}
114117
}
115118

@@ -121,7 +124,11 @@ class FunctionExpressionResolver {
121124
if (!namedParameterTypes.containsKey(p.name)) {
122125
continue;
123126
}
124-
inferType(p as ParameterElementImpl, namedParameterTypes[p.name]!);
127+
inferType(
128+
p as ParameterElementImpl,
129+
// TODO(paulberry): eliminate this cast by changing the type of
130+
// `contextType` to `FunctionTypeImpl`.
131+
namedParameterTypes[p.name]! as TypeImpl);
125132
}
126133
}
127134
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import 'package:analyzer/src/dart/element/element.dart';
2323
import 'package:analyzer/src/dart/element/scope.dart';
2424
import 'package:analyzer/src/dart/element/type.dart';
2525
import 'package:analyzer/src/dart/element/type_constraint_gatherer.dart';
26+
import 'package:analyzer/src/dart/element/type_provider.dart';
2627
import 'package:analyzer/src/dart/resolver/ast_rewrite.dart';
2728
import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
2829
import 'package:analyzer/src/dart/resolver/named_type_resolver.dart';
@@ -73,7 +74,7 @@ class ElementHolder {
7374
/// 5. Rewrite AST where resolution provides a more accurate understanding.
7475
class ResolutionVisitor extends RecursiveAstVisitor<void> {
7576
final LibraryElementImpl _libraryElement;
76-
final TypeProvider _typeProvider;
77+
final TypeProviderImpl _typeProvider;
7778
final CompilationUnitElementImpl _unitElement;
7879
final ErrorReporter _errorReporter;
7980
final AstRewriter _astRewriter;
@@ -177,7 +178,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
177178
this.dataForTesting,
178179
);
179180

180-
DartType get _dynamicType => _typeProvider.dynamicType;
181+
TypeImpl get _dynamicType => _typeProvider.dynamicType;
181182

182183
@override
183184
void visitAnnotation(covariant AnnotationImpl node) {
@@ -1402,7 +1403,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
14021403
var localElement = node.declaredElement as LocalVariableElementImpl;
14031404
element = localElement;
14041405

1405-
var varList = node.parent as VariableDeclarationList;
1406+
var varList = node.parent as VariableDeclarationListImpl;
14061407
localElement.hasImplicitType = varList.type == null;
14071408
localElement.hasInitializer = initializerNode != null;
14081409
localElement.type = varList.type?.type ?? _dynamicType;

pkg/analyzer/lib/src/generated/testing/element_factory.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class ElementFactory {
120120

121121
static ConstructorElementImpl constructorElement(
122122
ClassElement definingClass, String? name, bool isConst,
123-
[List<DartType> argumentTypes = const []]) {
123+
[List<TypeImpl> argumentTypes = const []]) {
124124
var offset = name == null ? -1 : 0;
125125
// A constructor declared as `C.new` is unnamed, and is modeled as such.
126126
var constructor = name == null || name == 'new'
@@ -146,11 +146,11 @@ class ElementFactory {
146146

147147
static ConstructorElementImpl constructorElement2(
148148
ClassElement definingClass, String? name,
149-
[List<DartType> argumentTypes = const []]) =>
149+
[List<TypeImpl> argumentTypes = const []]) =>
150150
constructorElement(definingClass, name, false, argumentTypes);
151151

152152
static FieldElementImpl fieldElement(
153-
String name, bool isStatic, bool isFinal, bool isConst, DartType type,
153+
String name, bool isStatic, bool isFinal, bool isConst, TypeImpl type,
154154
{ExpressionImpl? initializer}) {
155155
FieldElementImpl field =
156156
isConst ? ConstFieldElementImpl(name, 0) : FieldElementImpl(name, 0);
@@ -184,7 +184,7 @@ class ElementFactory {
184184
}
185185

186186
static PropertyAccessorElementImpl getterElement(
187-
String name, bool isStatic, DartType type) {
187+
String name, bool isStatic, TypeImpl type) {
188188
FieldElementImpl field = FieldElementImpl(name, -1);
189189
field.isStatic = isStatic;
190190
field.isSynthetic = true;
@@ -227,7 +227,7 @@ class ElementFactory {
227227
LocalVariableElementImpl(name, 0);
228228

229229
static MethodElementImpl methodElement(String methodName, DartType returnType,
230-
[List<DartType> argumentTypes = const []]) {
230+
[List<TypeImpl> argumentTypes = const []]) {
231231
MethodElementImpl method = MethodElementImpl(methodName, 0);
232232
method.parameters = _requiredParameters(argumentTypes);
233233
method.returnType = returnType;
@@ -276,7 +276,7 @@ class ElementFactory {
276276
);
277277
}
278278

279-
static ParameterElementImpl namedParameter2(String name, DartType type) {
279+
static ParameterElementImpl namedParameter2(String name, TypeImpl type) {
280280
var parameter = ParameterElementImpl(
281281
name: name,
282282
nameOffset: 0,
@@ -294,7 +294,7 @@ class ElementFactory {
294294
);
295295
}
296296

297-
static ParameterElementImpl positionalParameter2(String name, DartType type) {
297+
static ParameterElementImpl positionalParameter2(String name, TypeImpl type) {
298298
var parameter = ParameterElementImpl(
299299
name: name,
300300
nameOffset: 0,
@@ -314,7 +314,7 @@ class ElementFactory {
314314
);
315315
}
316316

317-
static ParameterElementImpl requiredParameter2(String name, DartType type) {
317+
static ParameterElementImpl requiredParameter2(String name, TypeImpl type) {
318318
var parameter = ParameterElementImpl(
319319
name: name,
320320
nameOffset: 0,
@@ -325,7 +325,7 @@ class ElementFactory {
325325
}
326326

327327
static PropertyAccessorElementImpl setterElement(
328-
String name, bool isStatic, DartType type) {
328+
String name, bool isStatic, TypeImpl type) {
329329
FieldElementImpl field = FieldElementImpl(name, -1);
330330
field.isStatic = isStatic;
331331
field.isSynthetic = true;
@@ -367,7 +367,7 @@ class ElementFactory {
367367
}
368368

369369
static List<ParameterElementImpl> _requiredParameters(
370-
List<DartType> argumentTypes) {
370+
List<TypeImpl> argumentTypes) {
371371
var parameters = argumentTypes.mapIndexed((index, type) {
372372
var parameter = ParameterElementImpl(
373373
name: 'a$index',

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2170,7 +2170,7 @@ class ResolutionReader {
21702170
}
21712171
}
21722172

2173-
DartType readRequiredType() {
2173+
TypeImpl readRequiredType() {
21742174
return readType()!;
21752175
}
21762176

pkg/analyzer/lib/src/summary2/extension_type.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class _Node extends graph.Node<_Node> {
151151
_evaluateWithType(type);
152152
}
153153

154-
void _evaluateWithType(DartType type) {
154+
void _evaluateWithType(TypeImpl type) {
155155
var typeSystem = element.library.typeSystem;
156156

157157
element.representation.type = type;

pkg/analyzer/lib/src/summary2/function_type_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class FunctionTypeBuilder extends TypeBuilder {
2323

2424
final List<TypeParameterElement> typeFormals;
2525
final List<ParameterElement> parameters;
26-
final DartType returnType;
26+
final TypeImpl returnType;
2727

2828
@override
2929
final NullabilitySuffix nullabilitySuffix;
@@ -71,7 +71,7 @@ class FunctionTypeBuilder extends TypeBuilder {
7171
}
7272

7373
@override
74-
DartType build() {
74+
TypeImpl build() {
7575
var type = _type;
7676
if (type != null) {
7777
return type;
@@ -153,7 +153,7 @@ class FunctionTypeBuilder extends TypeBuilder {
153153
}
154154

155155
/// If the [type] is a [TypeBuilder], build it; otherwise return as is.
156-
static DartType _buildType(DartType type) {
156+
static TypeImpl _buildType(TypeImpl type) {
157157
if (type is TypeBuilder) {
158158
return type.build();
159159
} else {
@@ -162,7 +162,7 @@ class FunctionTypeBuilder extends TypeBuilder {
162162
}
163163

164164
/// Return the type of the [node] as is, possibly a [TypeBuilder].
165-
static DartType _getNodeType(TypeAnnotation? node) {
165+
static TypeImpl _getNodeType(TypeAnnotation? node) {
166166
if (node == null) {
167167
return _dynamicType;
168168
} else {

0 commit comments

Comments
 (0)