Skip to content

Commit 152963b

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate FunctionTypeBuilder.
Change-Id: I9fc6acd85170a328c99b624da29d8e6fd7ffb769 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407162 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 79d9e91 commit 152963b

File tree

5 files changed

+66
-69
lines changed

5 files changed

+66
-69
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4654,6 +4654,10 @@ class FormalParameterElementImpl extends PromotableElementImpl2
46544654
// TODO(augmentations): Implement the merge of formal parameters.
46554655
TypeImpl get type => wrappedElement.type;
46564656

4657+
set type(TypeImpl value) {
4658+
wrappedElement.type = value;
4659+
}
4660+
46574661
@override
46584662
// TODO(augmentations): Implement the merge of formal parameters.
46594663
List<TypeParameterElement2> get typeParameters2 => const [];

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,20 @@ class ReplacementVisitor
5555

5656
DartType? createFunctionTypeBuilder({
5757
required FunctionTypeBuilder type,
58-
required List<TypeParameterElement2>? newTypeParameters,
59-
required List<FormalParameterElement>? newParameters,
58+
required List<TypeParameterElementImpl2>? newTypeParameters,
59+
required List<FormalParameterElementImpl>? newFormalParameters,
6060
required TypeImpl? newReturnType,
6161
required NullabilitySuffix? newNullability,
6262
}) {
6363
if (newNullability == null &&
6464
newReturnType == null &&
65-
newParameters == null) {
65+
newFormalParameters == null) {
6666
return null;
6767
}
6868

6969
return FunctionTypeBuilder.v2(
7070
typeParameters: newTypeParameters ?? type.typeParameters,
71-
formalParameters: newParameters ?? type.formalParameters,
71+
formalParameters: newFormalParameters ?? type.formalParameters,
7272
returnType: newReturnType ?? type.returnType,
7373
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
7474
);
@@ -330,7 +330,7 @@ class ReplacementVisitor
330330

331331
changeVariance();
332332

333-
List<FormalParameterElement>? newParameters;
333+
List<FormalParameterElementImpl>? newFormalParameters;
334334
for (var i = 0; i < node.formalParameters.length; i++) {
335335
var parameter = node.formalParameters[i];
336336

@@ -341,8 +341,8 @@ class ReplacementVisitor
341341
var newKind = visitParameterKind(kind);
342342

343343
if (newType != null || newKind != null) {
344-
newParameters ??= node.formalParameters.toList(growable: false);
345-
newParameters[i] = parameter.copyWith(
344+
newFormalParameters ??= node.formalParameters.toList(growable: false);
345+
newFormalParameters[i] = parameter.copyWith(
346346
type: newType,
347347
kind: newKind,
348348
);
@@ -354,7 +354,7 @@ class ReplacementVisitor
354354
return createFunctionTypeBuilder(
355355
type: node,
356356
newTypeParameters: newTypeParameters,
357-
newParameters: newParameters,
357+
newFormalParameters: newFormalParameters,
358358
newReturnType: newReturnType,
359359
newNullability: newNullability,
360360
);

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -544,18 +544,21 @@ abstract class _TypeSubstitutor
544544
int before = useCounter;
545545

546546
var inner = this;
547-
var typeFormals = type.typeFormals;
548-
if (typeFormals.isNotEmpty) {
547+
var typeParameters = type.typeParameters;
548+
if (typeParameters.isNotEmpty) {
549549
inner = newInnerEnvironment();
550-
typeFormals = inner.freshTypeParameters(typeFormals);
550+
typeParameters = inner
551+
.freshTypeParameters(typeParameters.map((e) => e.asElement).toList())
552+
.map((e) => e.asElement2 as TypeParameterElementImpl2)
553+
.toList();
551554
}
552555

553556
// Invert the variance when translating parameters.
554557
inner.invertVariance();
555558

556-
var parameters = type.parameters.map((parameter) {
557-
var type = parameter.type.accept(inner);
558-
return parameter.copyWith(type: type);
559+
var formalParameters = type.formalParameters.map((formalParameter) {
560+
var type = formalParameter.type.accept(inner);
561+
return formalParameter.copyWith(type: type);
559562
}).toList();
560563

561564
inner.invertVariance();
@@ -567,8 +570,8 @@ abstract class _TypeSubstitutor
567570
if (useCounter == before) return type;
568571

569572
return FunctionTypeBuilder(
570-
typeFormals,
571-
parameters,
573+
typeParameters,
574+
formalParameters,
572575
returnType,
573576
type.nullabilitySuffix,
574577
);

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

Lines changed: 35 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
7-
import 'package:analyzer/dart/element/element.dart';
8-
import 'package:analyzer/dart/element/element2.dart';
95
import 'package:analyzer/dart/element/nullability_suffix.dart';
106
import 'package:analyzer/dart/element/type.dart';
117
import 'package:analyzer/dart/element/type_visitor.dart';
@@ -17,14 +13,13 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
1713
import 'package:analyzer/src/dart/element/type_visitor.dart';
1814
import 'package:analyzer/src/summary2/type_builder.dart';
1915
import 'package:analyzer/src/utilities/extensions/collection.dart';
20-
import 'package:analyzer/src/utilities/extensions/element.dart';
2116

2217
/// The type builder for a [GenericFunctionType].
2318
class FunctionTypeBuilder extends TypeBuilder {
2419
static DynamicTypeImpl get _dynamicType => DynamicTypeImpl.instance;
2520

26-
final List<TypeParameterElement> typeFormals;
27-
final List<ParameterElement> parameters;
21+
final List<TypeParameterElementImpl2> typeParameters;
22+
final List<FormalParameterElementImpl> formalParameters;
2823
final TypeImpl returnType;
2924

3025
@override
@@ -42,8 +37,8 @@ class FunctionTypeBuilder extends TypeBuilder {
4237
FunctionTypeImpl? _type;
4338

4439
FunctionTypeBuilder(
45-
this.typeFormals,
46-
this.parameters,
40+
this.typeParameters,
41+
this.formalParameters,
4742
this.returnType,
4843
this.nullabilitySuffix, {
4944
this.node,
@@ -63,29 +58,21 @@ class FunctionTypeBuilder extends TypeBuilder {
6358
}
6459

6560
factory FunctionTypeBuilder.v2({
66-
required List<TypeParameterElement2> typeParameters,
67-
required List<FormalParameterElement> formalParameters,
61+
required List<TypeParameterElementImpl2> typeParameters,
62+
required List<FormalParameterElementImpl> formalParameters,
6863
required TypeImpl returnType,
6964
required NullabilitySuffix nullabilitySuffix,
7065
GenericFunctionTypeImpl? node,
7166
}) {
7267
return FunctionTypeBuilder(
73-
typeParameters.map((e) => e.asElement).toList(),
74-
formalParameters.map((e) => e.asElement).toList(),
68+
typeParameters,
69+
formalParameters,
7570
returnType,
7671
nullabilitySuffix,
7772
node: node,
7873
);
7974
}
8075

81-
List<FormalParameterElementMixin> get formalParameters {
82-
return parameters.map((p) => p.asElement2).toList(growable: false);
83-
}
84-
85-
List<TypeParameterElementImpl2> get typeParameters => typeFormals
86-
.map((fragment) => fragment.asElement2 as TypeParameterElementImpl2)
87-
.toList();
88-
8976
@override
9077
R accept<R>(TypeVisitor<R> visitor) {
9178
if (visitor is LinkingTypeVisitor<R>) {
@@ -103,27 +90,26 @@ class FunctionTypeBuilder extends TypeBuilder {
10390
return type;
10491
}
10592

106-
for (var typeParameter in typeFormals) {
107-
var typeParameterImpl = typeParameter as TypeParameterElementImpl;
108-
var bound = typeParameterImpl.bound;
93+
for (var typeParameter in typeParameters) {
94+
var bound = typeParameter.bound;
10995
if (bound != null) {
110-
typeParameterImpl.bound = _buildType(bound);
96+
typeParameter.bound = _buildType(bound);
11197
}
11298
}
11399

114-
for (var parameter in parameters) {
115-
(parameter as ParameterElementImpl).type = _buildType(parameter.type);
100+
for (var formalParameter in formalParameters) {
101+
formalParameter.type = _buildType(formalParameter.type);
116102
}
117103

118104
var builtReturnType = _buildType(returnType);
119-
type = FunctionTypeImpl(
120-
typeFormals: typeFormals,
121-
parameters: parameters,
105+
type = FunctionTypeImpl.v2(
106+
typeParameters: typeParameters,
107+
formalParameters: formalParameters,
122108
returnType: builtReturnType,
123109
nullabilitySuffix: nullabilitySuffix,
124110
);
125111

126-
var fresh = getFreshTypeParameters(typeFormals);
112+
var fresh = getFreshTypeParameters2(typeParameters);
127113
type = fresh.applyToFunctionType(type);
128114

129115
_type = type;
@@ -135,14 +121,14 @@ class FunctionTypeBuilder extends TypeBuilder {
135121
String toString() {
136122
var buffer = StringBuffer();
137123

138-
if (typeFormals.isNotEmpty) {
124+
if (typeParameters.isNotEmpty) {
139125
buffer.write('<');
140-
buffer.write(typeFormals.join(', '));
126+
buffer.write(typeParameters.join(', '));
141127
buffer.write('>');
142128
}
143129

144130
buffer.write('(');
145-
buffer.write(parameters.join(', '));
131+
buffer.write(formalParameters.join(', '));
146132
buffer.write(')');
147133

148134
buffer.write(' → ');
@@ -158,19 +144,19 @@ class FunctionTypeBuilder extends TypeBuilder {
158144
}
159145

160146
return FunctionTypeBuilder(
161-
typeFormals,
162-
parameters,
147+
typeParameters,
148+
formalParameters,
163149
returnType,
164150
nullabilitySuffix,
165151
node: node,
166152
);
167153
}
168154

169-
static List<ParameterElementImpl> getParameters(
170-
FormalParameterList node,
155+
static List<FormalParameterElementImpl> getParameters(
156+
FormalParameterListImpl node,
171157
) {
172-
return node.parameters.asImpl.map((parameter) {
173-
return ParameterElementImpl.synthetic(
158+
return node.parameters.map((parameter) {
159+
return FormalParameterElementImpl.synthetic(
174160
parameter.name?.lexeme ?? '',
175161
_getParameterType(parameter),
176162
parameter.kind,
@@ -197,12 +183,12 @@ class FunctionTypeBuilder extends TypeBuilder {
197183
}
198184

199185
/// Return the type of the [node] as is, possibly a [TypeBuilder].
200-
static DartType _getParameterType(FormalParameter node) {
201-
if (node is DefaultFormalParameter) {
186+
static DartType _getParameterType(FormalParameterImpl node) {
187+
if (node is DefaultFormalParameterImpl) {
202188
return _getParameterType(node.parameter);
203-
} else if (node is SimpleFormalParameter) {
189+
} else if (node is SimpleFormalParameterImpl) {
204190
return _getNodeType(node.type);
205-
} else if (node is FunctionTypedFormalParameter) {
191+
} else if (node is FunctionTypedFormalParameterImpl) {
206192
NullabilitySuffix nullabilitySuffix;
207193
if (node.question != null) {
208194
nullabilitySuffix = NullabilitySuffix.question;
@@ -221,10 +207,12 @@ class FunctionTypeBuilder extends TypeBuilder {
221207
}
222208
}
223209

224-
static List<TypeParameterElement> _getTypeParameters(
225-
TypeParameterList? node,
210+
static List<TypeParameterElementImpl2> _getTypeParameters(
211+
TypeParameterListImpl? node,
226212
) {
227213
if (node == null) return const [];
228-
return node.typeParameters.map((n) => n.declaredElement!).toFixedList();
214+
return node.typeParameters.map((node) {
215+
return node.declaredFragment!.element;
216+
}).toFixedList();
229217
}
230218
}

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ class VarianceBuilder {
104104
return _computeFunctionType(
105105
variable,
106106
returnType: type.returnType,
107-
typeFormals: type.typeFormals,
108-
parameters: type.parameters,
107+
typeFormals: type.typeParameters.map((e) => e.asElement).toList(),
108+
parameters: type.formalParameters.map((e) => e.asElement).toList(),
109109
);
110110
} else if (type is RecordTypeBuilder) {
111111
var result = Variance.unrelated;
@@ -153,7 +153,7 @@ class VarianceBuilder {
153153
return result;
154154
}
155155

156-
void _functionTypeAlias(FunctionTypeAlias node) {
156+
void _functionTypeAlias(FunctionTypeAliasImpl node) {
157157
var parameterList = node.typeParameters;
158158
if (parameterList == null) {
159159
return;
@@ -179,7 +179,9 @@ class VarianceBuilder {
179179
parameter.declaredElement!,
180180
returnType: node.returnType?.type,
181181
typeFormals: null,
182-
parameters: FunctionTypeBuilder.getParameters(node.parameters),
182+
parameters: FunctionTypeBuilder.getParameters(node.parameters)
183+
.map((e) => e.asElement)
184+
.toList(),
183185
);
184186
_setVariance(parameter, variance);
185187
}
@@ -231,9 +233,9 @@ class VarianceBuilder {
231233
var node = _linker.getLinkingNode(element);
232234
if (node == null) {
233235
// Not linking.
234-
} else if (node is GenericTypeAlias) {
236+
} else if (node is GenericTypeAliasImpl) {
235237
_genericTypeAlias(node);
236-
} else if (node is FunctionTypeAlias) {
238+
} else if (node is FunctionTypeAliasImpl) {
237239
_functionTypeAlias(node);
238240
} else {
239241
throw UnimplementedError('(${node.runtimeType}) $node');

0 commit comments

Comments
 (0)