Skip to content

Commit 810af11

Browse files
srawlinsCommit Queue
authored andcommitted
analyzer: Element model migration type_algebra.dart
Change-Id: I18a9e5858ac016154bf1572e0abebebe94518edf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/409740 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 2c117f9 commit 810af11

File tree

6 files changed

+55
-62
lines changed

6 files changed

+55
-62
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class ConstructorMember extends ExecutableMember
156156
if (element is ConstructorMember) {
157157
declaration = element._declaration as ConstructorElement;
158158
var map = <TypeParameterElement2, DartType>{};
159-
var elementMap = element._substitution.map2;
159+
var elementMap = element._substitution.map;
160160
for (var typeParameter in elementMap.keys) {
161161
var type = elementMap[typeParameter]!;
162162
map[typeParameter] = _substitution.substituteType(type);
@@ -423,9 +423,9 @@ abstract class ExecutableMember extends Member
423423
augmentationSubstitution = member.augmentationSubstitution;
424424

425425
var map = <TypeParameterElement2, DartType>{
426-
for (var MapEntry(:key, :value) in member._substitution.map2.entries)
426+
for (var MapEntry(:key, :value) in member._substitution.map.entries)
427427
key: substitution.substituteType(value),
428-
...substitution.map2,
428+
...substitution.map,
429429
};
430430
combined = Substitution.fromMap2(map);
431431
}
@@ -1372,9 +1372,9 @@ class ParameterMember extends VariableMember
13721372
element = member.declaration;
13731373

13741374
var map = <TypeParameterElement2, DartType>{
1375-
for (var MapEntry(:key, :value) in member._substitution.map2.entries)
1375+
for (var MapEntry(:key, :value) in member._substitution.map.entries)
13761376
key: substitution.substituteType(value),
1377-
...substitution.map2,
1377+
...substitution.map,
13781378
};
13791379
combined = Substitution.fromMap2(map);
13801380
}
@@ -1826,8 +1826,8 @@ class _SubstitutedTypeParameters {
18261826
return _SubstitutedTypeParameters._(
18271827
newElements,
18281828
Substitution.fromMap2({
1829-
...substitution.map2,
1830-
...substitution2.map2,
1829+
...substitution.map,
1830+
...substitution2.map,
18311831
}),
18321832
);
18331833
}

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

Lines changed: 41 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ class FreshTypeParameters {
128128
FreshTypeParameters(this.freshTypeParameters, this.substitution);
129129

130130
FunctionTypeImpl applyToFunctionType(FunctionType type) {
131-
return FunctionTypeImpl(
132-
typeFormals: freshTypeParameters.map((e) => e.firstFragment).toList(),
133-
parameters: type.parameters.map((parameter) {
131+
return FunctionTypeImpl.v2(
132+
typeParameters: freshTypeParameters,
133+
formalParameters: type.formalParameters.map((parameter) {
134134
var type = substitute(parameter.type);
135135
return parameter.copyWith(type: type);
136136
}).toFixedList(),
@@ -146,21 +146,15 @@ class FreshTypeParameters {
146146
abstract class MapSubstitution extends Substitution {
147147
const MapSubstitution();
148148

149-
Map<TypeParameterElement, DartType> get map;
150-
151-
Map<TypeParameterElement2, DartType> get map2 {
152-
return map.map((key, value) {
153-
return MapEntry(key.asElement2, value);
154-
});
155-
}
149+
Map<TypeParameterElement2, DartType> get map;
156150
}
157151

158152
abstract class Substitution {
159153
static const MapSubstitution empty = _NullSubstitution.instance;
160154

161155
const Substitution();
162156

163-
DartType? getSubstitute(TypeParameterElement parameter, bool upperBound);
157+
DartType? getSubstitute(TypeParameterElement2 parameter, bool upperBound);
164158

165159
InterfaceTypeImpl mapInterfaceType(InterfaceType type) {
166160
return substituteType(type) as InterfaceTypeImpl;
@@ -203,9 +197,7 @@ abstract class Substitution {
203197
if (map.isEmpty) {
204198
return _NullSubstitution.instance;
205199
}
206-
return _MapSubstitution(
207-
map.map((key, value) => MapEntry(key.asElement, value)),
208-
);
200+
return _MapSubstitution(map.map((key, value) => MapEntry(key, value)));
209201
}
210202

211203
/// Substitutes the Nth parameter in [parameters] with the Nth type in
@@ -214,7 +206,7 @@ abstract class Substitution {
214206
List<TypeParameterElement> parameters,
215207
List<DartType> types,
216208
) {
217-
return fromPairs2(parameters.map((p) => p.asElement2).toList(), types);
209+
return fromPairs2(parameters.map((p) => p.asElement2).toFixedList(), types);
218210
}
219211

220212
/// Substitutes the Nth parameter in [parameters] with the Nth type in
@@ -243,65 +235,65 @@ class _CombinedSubstitution extends Substitution {
243235
_CombinedSubstitution(this.first, this.second);
244236

245237
@override
246-
DartType? getSubstitute(TypeParameterElement parameter, bool upperBound) {
238+
DartType? getSubstitute(TypeParameterElement2 parameter, bool upperBound) {
247239
return first.getSubstitute(parameter, upperBound) ??
248240
second.getSubstitute(parameter, upperBound);
249241
}
250242
}
251243

252244
class _FreshTypeParametersSubstitutor extends _TypeSubstitutor {
253-
final Map<TypeParameterElement, DartType> substitution = {};
245+
final Map<TypeParameterElement2, DartType> substitution = {};
254246

255247
_FreshTypeParametersSubstitutor(_TypeSubstitutor super.outer);
256248

257249
@override
258-
List<TypeParameterElement> freshTypeParameters(
259-
List<TypeParameterElement> elements) {
250+
List<TypeParameterElement2> freshTypeParameters(
251+
List<TypeParameterElement2> elements) {
260252
if (elements.isEmpty) {
261-
return const <TypeParameterElement>[];
253+
return const <TypeParameterElement2>[];
262254
}
263255

264256
var freshElements = List.generate(elements.length, (index) {
265257
// TODO(kallentu): : Clean up TypeParameterElementImpl casting once
266258
// variance is added to the interface.
267-
var element = elements[index] as TypeParameterElementImpl;
268-
var freshElement = TypeParameterElementImpl(element.name, -1);
259+
var element = elements[index] as TypeParameterElementImpl2;
260+
var freshElement = TypeParameterElementImpl(element.name3!, -1);
269261
var freshType = freshElement.instantiate(
270262
nullabilitySuffix: NullabilitySuffix.none,
271263
);
272264
substitution[element] = freshType;
273265
if (!element.isLegacyCovariant) {
274266
freshElement.variance = element.variance;
275267
}
276-
return freshElement;
268+
return freshElement.asElement2;
277269
}, growable: false);
278270

279271
for (var i = 0; i < freshElements.length; i++) {
280272
var element = elements[i];
281273
var bound = element.bound;
282274
if (bound != null) {
283275
var freshElement = freshElements[i];
284-
freshElement.bound = bound.accept(this);
276+
freshElement.bound = bound.accept(this) as TypeImpl?;
285277
}
286278
}
287279

288280
return freshElements;
289281
}
290282

291283
@override
292-
DartType? lookup(TypeParameterElement parameter, bool upperBound) {
284+
DartType? lookup(TypeParameterElement2 parameter, bool upperBound) {
293285
return substitution[parameter];
294286
}
295287
}
296288

297289
class _MapSubstitution extends MapSubstitution {
298290
@override
299-
final Map<TypeParameterElement, DartType> map;
291+
final Map<TypeParameterElement2, DartType> map;
300292

301293
_MapSubstitution(this.map);
302294

303295
@override
304-
DartType? getSubstitute(TypeParameterElement parameter, bool upperBound) {
296+
DartType? getSubstitute(TypeParameterElement2 parameter, bool upperBound) {
305297
return map[parameter];
306298
}
307299

@@ -315,11 +307,11 @@ class _NullSubstitution extends MapSubstitution {
315307
const _NullSubstitution();
316308

317309
@override
318-
Map<TypeParameterElement, DartType> get map => const {};
310+
Map<TypeParameterElement2, DartType> get map => const {};
319311

320312
@override
321-
DartType getSubstitute(TypeParameterElement parameter, bool upperBound) {
322-
return TypeParameterTypeImpl(
313+
DartType getSubstitute(TypeParameterElement2 parameter, bool upperBound) {
314+
return TypeParameterTypeImpl.v2(
323315
element: parameter,
324316
nullabilitySuffix: NullabilitySuffix.none,
325317
);
@@ -343,13 +335,13 @@ class _TopSubstitutor extends _TypeSubstitutor {
343335
}
344336

345337
@override
346-
List<TypeParameterElement> freshTypeParameters(
347-
List<TypeParameterElement> parameters) {
338+
List<TypeParameterElement2> freshTypeParameters(
339+
List<TypeParameterElement2> parameters) {
348340
throw 'Create a fresh environment first';
349341
}
350342

351343
@override
352-
DartType? lookup(TypeParameterElement parameter, bool upperBound) {
344+
DartType? lookup(TypeParameterElement2 parameter, bool upperBound) {
353345
return substitution.getSubstitute(parameter, upperBound);
354346
}
355347
}
@@ -383,10 +375,10 @@ abstract class _TypeSubstitutor
383375
target.useCounter++;
384376
}
385377

386-
List<TypeParameterElement> freshTypeParameters(
387-
List<TypeParameterElement> elements);
378+
List<TypeParameterElement2> freshTypeParameters(
379+
List<TypeParameterElement2> elements);
388380

389-
DartType? getSubstitute(TypeParameterElement parameter) {
381+
DartType? getSubstitute(TypeParameterElement2 parameter) {
390382
_TypeSubstitutor? environment = this;
391383
while (environment != null) {
392384
var replacement = environment.lookup(parameter, covariantContext);
@@ -403,7 +395,7 @@ abstract class _TypeSubstitutor
403395
covariantContext = !covariantContext;
404396
}
405397

406-
DartType? lookup(TypeParameterElement parameter, bool upperBound);
398+
DartType? lookup(TypeParameterElement2 parameter, bool upperBound);
407399

408400
_FreshTypeParametersSubstitutor newInnerEnvironment() {
409401
return _FreshTypeParametersSubstitutor(this);
@@ -428,7 +420,7 @@ abstract class _TypeSubstitutor
428420
int before = useCounter;
429421

430422
var inner = this;
431-
var typeFormals = type.typeFormals;
423+
var typeFormals = type.typeParameters;
432424
if (typeFormals.isNotEmpty) {
433425
inner = newInnerEnvironment();
434426
typeFormals = inner.freshTypeParameters(typeFormals);
@@ -437,7 +429,7 @@ abstract class _TypeSubstitutor
437429
// Invert the variance when translating parameters.
438430
inner.invertVariance();
439431

440-
var parameters = type.parameters.map((parameter) {
432+
var parameters = type.formalParameters.map((parameter) {
441433
var type = parameter.type.accept(inner);
442434
return parameter.copyWith(type: type);
443435
}).toFixedList();
@@ -449,9 +441,9 @@ abstract class _TypeSubstitutor
449441

450442
if (useCounter == before) return type;
451443

452-
return FunctionTypeImpl(
453-
typeFormals: typeFormals,
454-
parameters: parameters,
444+
return FunctionTypeImpl.v2(
445+
typeParameters: typeFormals,
446+
formalParameters: parameters,
455447
returnType: returnType,
456448
nullabilitySuffix: type.nullabilitySuffix,
457449
alias: alias,
@@ -478,9 +470,9 @@ abstract class _TypeSubstitutor
478470
if (typeParameters.isNotEmpty) {
479471
inner = newInnerEnvironment();
480472
typeParameters = inner
481-
.freshTypeParameters(typeParameters.map((e) => e.asElement).toList())
482-
.map((e) => e.asElement2 as TypeParameterElementImpl2)
483-
.toList();
473+
.freshTypeParameters(typeParameters)
474+
.cast<TypeParameterElementImpl2>()
475+
.toFixedList();
484476
}
485477

486478
// Invert the variance when translating parameters.
@@ -489,7 +481,7 @@ abstract class _TypeSubstitutor
489481
var formalParameters = type.formalParameters.map((formalParameter) {
490482
var type = formalParameter.type.accept(inner);
491483
return formalParameter.copyWith(type: type);
492-
}).toList();
484+
}).toFixedList();
493485

494486
inner.invertVariance();
495487

@@ -593,7 +585,7 @@ abstract class _TypeSubstitutor
593585

594586
@override
595587
DartType visitTypeParameterType(TypeParameterType type) {
596-
var argument = getSubstitute(type.element);
588+
var argument = getSubstitute(type.element3);
597589
if (argument == null) {
598590
return type;
599591
}
@@ -616,8 +608,8 @@ abstract class _TypeSubstitutor
616608
if (alias == null) {
617609
return null;
618610
}
619-
return InstantiatedTypeAliasElementImpl(
620-
element: alias.element,
611+
return InstantiatedTypeAliasElementImpl.v2(
612+
element: alias.element2,
621613
typeArguments: _mapList(alias.typeArguments),
622614
);
623615
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2277,7 +2277,7 @@ class _TypeVariableEliminator extends Substitution {
22772277
);
22782278

22792279
@override
2280-
DartType getSubstitute(TypeParameterElement parameter, bool upperBound) {
2280+
DartType getSubstitute(TypeParameterElement2 parameter, bool upperBound) {
22812281
return upperBound ? _bottomType : _topType;
22822282
}
22832283
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ class ResolutionSink extends _SummaryDataWriter {
10471047

10481048
static List<DartType> _enclosingClassTypeArguments(
10491049
Element declaration,
1050-
Map<TypeParameterElement, DartType> substitution,
1050+
Map<TypeParameterElement2, DartType> substitution,
10511051
) {
10521052
// TODO(scheglov): Just keep it null in class Member?
10531053
if (substitution.isEmpty) {
@@ -1056,7 +1056,8 @@ class ResolutionSink extends _SummaryDataWriter {
10561056

10571057
var enclosing = declaration.enclosingElement3;
10581058
if (enclosing is InstanceElement) {
1059-
var typeParameters = enclosing.typeParameters;
1059+
var typeParameters =
1060+
(enclosing.asElement2! as InstanceElement2).typeParameters2;
10601061
if (typeParameters.isEmpty) {
10611062
return const <DartType>[];
10621063
}

pkg/analyzer/test/src/dart/resolution/resolution.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ mixin ResolutionTest implements ResourceProviderMixin {
311311
Map<String, String> expected,
312312
) {
313313
var actualMapString = Map.fromEntries(
314-
substitution.map2.entries.where((entry) {
314+
substitution.map.entries.where((entry) {
315315
return entry.key.enclosingElement2 is! ExecutableElement2;
316316
}).map((entry) {
317317
return MapEntry(

pkg/analyzer/test/util/element_printer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,9 @@ class ElementPrinter {
363363
return '${source.uri}';
364364
}
365365

366-
String _substitutionMapStr(Map<TypeParameterElement, DartType> map) {
366+
String _substitutionMapStr(Map<TypeParameterElement2, DartType> map) {
367367
var entriesStr = map.entries.map((entry) {
368-
return '${entry.key.name}: ${_typeStr(entry.value)}';
368+
return '${entry.key.name3}: ${_typeStr(entry.value)}';
369369
}).join(', ');
370370
return '{$entriesStr}';
371371
}

0 commit comments

Comments
 (0)