Skip to content

Commit 60d98b8

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate ReplacementVisitor.
Change-Id: I06104d34aee22a3355929fc53f99d1cee93ee5c5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405606 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent eb512ee commit 60d98b8

File tree

6 files changed

+144
-76
lines changed

6 files changed

+144
-76
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4636,6 +4636,11 @@ class FormalParameterElementImpl extends PromotableElementImpl2
46364636
@override
46374637
String get nameShared => wrappedElement.name;
46384638

4639+
@override
4640+
ParameterKind get parameterKind {
4641+
return firstFragment.parameterKind;
4642+
}
4643+
46394644
@override
46404645
// TODO(augmentations): Implement the merge of formal parameters.
46414646
TypeImpl get type => wrappedElement.type;
@@ -4665,6 +4670,7 @@ class FormalParameterElementImpl extends PromotableElementImpl2
46654670
child.accept2(visitor);
46664671
}
46674672
}
4673+
46684674
// firstFragment.typeParameters
46694675
// .map((fragment) => (fragment as TypeParameterElementImpl).element)
46704676
// .toList();
@@ -4677,6 +4683,8 @@ mixin FormalParameterElementMixin
46774683
FormalParameterElement,
46784684
SharedNamedFunctionParameter,
46794685
VariableElement2OrMember {
4686+
ParameterKind get parameterKind;
4687+
46804688
@override
46814689
TypeImpl get type;
46824690

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

Lines changed: 72 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
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';
5+
import 'package:analyzer/dart/element/element2.dart';
86
import 'package:analyzer/dart/element/nullability_suffix.dart';
97
import 'package:analyzer/dart/element/type.dart';
108
import 'package:analyzer/dart/element/type_visitor.dart';
@@ -18,6 +16,7 @@ import 'package:analyzer/src/generated/utilities_dart.dart';
1816
import 'package:analyzer/src/summary2/function_type_builder.dart';
1917
import 'package:analyzer/src/summary2/named_type_builder.dart';
2018
import 'package:analyzer/src/summary2/record_type_builder.dart';
19+
import 'package:analyzer/src/utilities/extensions/element.dart';
2120

2221
/// Helper visitor that clones a type if a nested type is replaced, and
2322
/// otherwise returns `null`.
@@ -33,8 +32,8 @@ class ReplacementVisitor
3332
DartType? createFunctionType({
3433
required FunctionType type,
3534
required InstantiatedTypeAliasElement? newAlias,
36-
required List<TypeParameterElement>? newTypeParameters,
37-
required List<ParameterElement>? newParameters,
35+
required List<TypeParameterElement2>? newTypeParameters,
36+
required List<FormalParameterElement>? newParameters,
3837
required DartType? newReturnType,
3938
required NullabilitySuffix? newNullability,
4039
}) {
@@ -45,9 +44,9 @@ class ReplacementVisitor
4544
return null;
4645
}
4746

48-
return FunctionTypeImpl(
49-
typeFormals: newTypeParameters ?? type.typeFormals,
50-
parameters: newParameters ?? type.parameters,
47+
return FunctionTypeImpl.v2(
48+
typeParameters: newTypeParameters ?? type.typeParameters,
49+
formalParameters: newParameters ?? type.formalParameters,
5150
returnType: newReturnType ?? type.returnType,
5251
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
5352
alias: newAlias ?? type.alias,
@@ -56,8 +55,8 @@ class ReplacementVisitor
5655

5756
DartType? createFunctionTypeBuilder({
5857
required FunctionTypeBuilder type,
59-
required List<TypeParameterElement>? newTypeParameters,
60-
required List<ParameterElement>? newParameters,
58+
required List<TypeParameterElement2>? newTypeParameters,
59+
required List<FormalParameterElement>? newParameters,
6160
required TypeImpl? newReturnType,
6261
required NullabilitySuffix? newNullability,
6362
}) {
@@ -67,11 +66,11 @@ class ReplacementVisitor
6766
return null;
6867
}
6968

70-
return FunctionTypeBuilder(
71-
newTypeParameters ?? type.typeFormals,
72-
newParameters ?? type.parameters,
73-
newReturnType ?? type.returnType,
74-
newNullability ?? type.nullabilitySuffix,
69+
return FunctionTypeBuilder.v2(
70+
typeParameters: newTypeParameters ?? type.typeParameters,
71+
formalParameters: newParameters ?? type.formalParameters,
72+
returnType: newReturnType ?? type.returnType,
73+
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
7574
);
7675
}
7776

@@ -104,12 +103,12 @@ class ReplacementVisitor
104103
return null;
105104
}
106105

107-
return NamedTypeBuilder(
108-
type.linker,
109-
type.typeSystem,
110-
type.element,
111-
newTypeArguments ?? type.arguments,
112-
newNullability ?? type.nullabilitySuffix,
106+
return NamedTypeBuilder.v2(
107+
linker: type.linker,
108+
typeSystem: type.typeSystem,
109+
element: type.element3,
110+
arguments: newTypeArguments ?? type.arguments,
111+
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
113112
);
114113
}
115114

@@ -134,8 +133,8 @@ class ReplacementVisitor
134133
}
135134

136135
var promotedBound = (type as TypeParameterTypeImpl).promotedBound;
137-
return TypeParameterTypeImpl(
138-
element: type.element,
136+
return TypeParameterTypeImpl.v2(
137+
element: type.element3,
139138
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
140139
promotedBound: newPromotedBound ?? promotedBound,
141140
alias: type.alias,
@@ -150,8 +149,8 @@ class ReplacementVisitor
150149
return null;
151150
}
152151

153-
return TypeParameterTypeImpl(
154-
element: type.element,
152+
return TypeParameterTypeImpl.v2(
153+
element: type.element3,
155154
nullabilitySuffix: newNullability,
156155
alias: type.alias,
157156
);
@@ -164,42 +163,42 @@ class ReplacementVisitor
164163

165164
@override
166165
DartType? visitFunctionType(FunctionType node) {
166+
// TODO(scheglov): avoid this cast
167+
node as FunctionTypeImpl;
167168
var newNullability = visitNullability(node);
168169

169-
List<TypeParameterElement>? newTypeParameters;
170-
for (var i = 0; i < node.typeFormals.length; i++) {
171-
var typeParameter = node.typeFormals[i];
170+
List<TypeParameterElementImpl2>? newTypeParameters;
171+
for (var i = 0; i < node.typeParameters.length; i++) {
172+
var typeParameter = node.typeParameters[i];
172173
var bound = typeParameter.bound;
173174
if (bound != null) {
174175
var newBound = visitTypeParameterBound(bound);
175176
if (newBound != null) {
176-
newTypeParameters ??= node.typeFormals.toList(growable: false);
177-
newTypeParameters[i] = TypeParameterElementImpl.synthetic(
178-
typeParameter.name,
179-
)..bound = newBound;
177+
newTypeParameters ??= node.typeParameters.toList(growable: false);
178+
newTypeParameters[i] = typeParameter.freshCopy()..bound = newBound;
180179
}
181180
}
182181
}
183182

184183
Substitution? substitution;
185184
if (newTypeParameters != null) {
186-
var map = <TypeParameterElement, DartType>{};
185+
var map = <TypeParameterElement2, DartType>{};
187186
for (var i = 0; i < newTypeParameters.length; ++i) {
188-
var typeParameter = node.typeFormals[i];
187+
var typeParameter = node.typeParameters[i];
189188
var newTypeParameter = newTypeParameters[i];
190189
map[typeParameter] = newTypeParameter.instantiate(
191190
nullabilitySuffix: NullabilitySuffix.none,
192191
);
193192
}
194193

195-
substitution = Substitution.fromMap(map);
194+
substitution = Substitution.fromMap2(map);
196195

197196
for (var i = 0; i < newTypeParameters.length; i++) {
198197
var newTypeParameter = newTypeParameters[i];
199198
var bound = newTypeParameter.bound;
200199
if (bound != null) {
201200
var newBound = substitution.substituteType(bound);
202-
(newTypeParameter as TypeParameterElementImpl).bound = newBound;
201+
newTypeParameter.bound = newBound;
203202
}
204203
}
205204
}
@@ -228,28 +227,27 @@ class ReplacementVisitor
228227
}
229228
}
230229
if (newArguments != null) {
231-
newAlias = InstantiatedTypeAliasElementImpl(
232-
element: alias.element,
230+
newAlias = InstantiatedTypeAliasElementImpl.v2(
231+
element: alias.element2,
233232
typeArguments: newArguments,
234233
);
235234
}
236235
}
237236

238237
changeVariance();
239238

240-
List<ParameterElement>? newParameters;
241-
for (var i = 0; i < node.parameters.length; i++) {
242-
var parameter = node.parameters[i];
239+
List<FormalParameterElement>? newParameters;
240+
for (var i = 0; i < node.formalParameters.length; i++) {
241+
var parameter = node.formalParameters[i];
243242

244243
var type = parameter.type;
245244
var newType = visitType(type);
246245

247-
// ignore: deprecated_member_use_from_same_package
248246
var kind = parameter.parameterKind;
249247
var newKind = visitParameterKind(kind);
250248

251249
if (newType != null || newKind != null) {
252-
newParameters ??= node.parameters.toList(growable: false);
250+
newParameters ??= node.formalParameters.toList(growable: false);
253251
newParameters[i] = parameter.copyWith(
254252
type: newType,
255253
kind: newKind,
@@ -273,40 +271,38 @@ class ReplacementVisitor
273271
DartType? visitFunctionTypeBuilder(FunctionTypeBuilder node) {
274272
var newNullability = visitNullability(node);
275273

276-
List<TypeParameterElement>? newTypeParameters;
277-
for (var i = 0; i < node.typeFormals.length; i++) {
278-
var typeParameter = node.typeFormals[i];
274+
List<TypeParameterElementImpl2>? newTypeParameters;
275+
for (var i = 0; i < node.typeParameters.length; i++) {
276+
var typeParameter = node.typeParameters[i];
279277
var bound = typeParameter.bound;
280278
if (bound != null) {
281279
var newBound = visitTypeParameterBound(bound);
282280
if (newBound != null) {
283-
newTypeParameters ??= node.typeFormals.toList(growable: false);
284-
newTypeParameters[i] = TypeParameterElementImpl.synthetic(
285-
typeParameter.name,
286-
)..bound = newBound;
281+
newTypeParameters ??= node.typeParameters.toList(growable: false);
282+
newTypeParameters[i] = typeParameter.freshCopy()..bound = newBound;
287283
}
288284
}
289285
}
290286

291287
Substitution? substitution;
292288
if (newTypeParameters != null) {
293-
var map = <TypeParameterElement, DartType>{};
289+
var map = <TypeParameterElement2, DartType>{};
294290
for (var i = 0; i < newTypeParameters.length; ++i) {
295-
var typeParameter = node.typeFormals[i];
291+
var typeParameter = node.typeParameters[i];
296292
var newTypeParameter = newTypeParameters[i];
297293
map[typeParameter] = newTypeParameter.instantiate(
298294
nullabilitySuffix: NullabilitySuffix.none,
299295
);
300296
}
301297

302-
substitution = Substitution.fromMap(map);
298+
substitution = Substitution.fromMap2(map);
303299

304300
for (var i = 0; i < newTypeParameters.length; i++) {
305301
var newTypeParameter = newTypeParameters[i];
306302
var bound = newTypeParameter.bound;
307303
if (bound != null) {
308304
var newBound = substitution.substituteType(bound);
309-
(newTypeParameter as TypeParameterElementImpl).bound = newBound;
305+
newTypeParameter.bound = newBound;
310306
}
311307
}
312308
}
@@ -326,9 +322,9 @@ class ReplacementVisitor
326322

327323
changeVariance();
328324

329-
List<ParameterElement>? newParameters;
330-
for (var i = 0; i < node.parameters.length; i++) {
331-
var parameter = node.parameters[i];
325+
List<FormalParameterElement>? newParameters;
326+
for (var i = 0; i < node.formalParameters.length; i++) {
327+
var parameter = node.formalParameters[i];
332328

333329
var type = parameter.type;
334330
var newType = visitType(type);
@@ -338,7 +334,7 @@ class ReplacementVisitor
338334
var newKind = visitParameterKind(kind);
339335

340336
if (newType != null || newKind != null) {
341-
newParameters ??= node.parameters.toList(growable: false);
337+
newParameters ??= node.formalParameters.toList(growable: false);
342338
newParameters[i] = parameter.copyWith(
343339
type: newType,
344340
kind: newKind,
@@ -365,19 +361,19 @@ class ReplacementVisitor
365361
var alias = type.alias;
366362
if (alias != null) {
367363
var newArguments = _typeArguments(
368-
alias.element.typeParameters,
364+
alias.element2.typeParameters2,
369365
alias.typeArguments,
370366
);
371367
if (newArguments != null) {
372-
newAlias = InstantiatedTypeAliasElementImpl(
373-
element: alias.element,
368+
newAlias = InstantiatedTypeAliasElementImpl.v2(
369+
element: alias.element2,
374370
typeArguments: newArguments,
375371
);
376372
}
377373
}
378374

379375
var newTypeArguments = _typeArguments(
380-
type.element.typeParameters,
376+
type.element3.typeParameters2,
381377
type.typeArguments,
382378
);
383379

@@ -398,12 +394,12 @@ class ReplacementVisitor
398394
DartType? visitNamedTypeBuilder(NamedTypeBuilder type) {
399395
var newNullability = visitNullability(type);
400396

401-
var parameters = const <TypeParameterElement>[];
402-
var element = type.element;
403-
if (element is InterfaceElement) {
404-
parameters = element.typeParameters;
405-
} else if (element is TypeAliasElement) {
406-
parameters = element.typeParameters;
397+
var parameters = const <TypeParameterElement2>[];
398+
var element = type.element3;
399+
if (element is InterfaceElement2) {
400+
parameters = element.typeParameters2;
401+
} else if (element is TypeAliasElement2) {
402+
parameters = element.typeParameters2;
407403
}
408404

409405
var newArguments = _typeArguments(parameters, type.arguments);
@@ -440,12 +436,12 @@ class ReplacementVisitor
440436
var alias = type.alias;
441437
if (alias != null) {
442438
var newArguments = _typeArguments(
443-
alias.element.typeParameters,
439+
alias.element2.typeParameters2,
444440
alias.typeArguments,
445441
);
446442
if (newArguments != null) {
447-
newAlias = InstantiatedTypeAliasElementImpl(
448-
element: alias.element,
443+
newAlias = InstantiatedTypeAliasElementImpl.v2(
444+
element: alias.element2,
449445
typeArguments: newArguments,
450446
);
451447
}
@@ -521,7 +517,7 @@ class ReplacementVisitor
521517
}
522518

523519
DartType? visitTypeArgument(
524-
TypeParameterElement parameter,
520+
TypeParameterElement2 parameter,
525521
DartType argument,
526522
) {
527523
return argument.accept(this);
@@ -533,9 +529,11 @@ class ReplacementVisitor
533529

534530
@override
535531
DartType? visitTypeParameterType(TypeParameterType type) {
532+
// TODO(scheglov): avoid this cast
533+
type as TypeParameterTypeImpl;
536534
var newNullability = visitNullability(type);
537535

538-
var promotedBound = (type as TypeParameterTypeImpl).promotedBound;
536+
var promotedBound = type.promotedBound;
539537
if (promotedBound != null) {
540538
var newPromotedBound = promotedBound.accept(this);
541539
return createPromotedTypeParameterType(
@@ -562,7 +560,7 @@ class ReplacementVisitor
562560
}
563561

564562
List<DartType>? _typeArguments(
565-
List<TypeParameterElement> parameters,
563+
List<TypeParameterElement2> parameters,
566564
List<DartType> arguments,
567565
) {
568566
if (arguments.length != parameters.length) {

0 commit comments

Comments
 (0)