Skip to content

Commit 0b11d0c

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate VarianceBuilder.
Change-Id: I490145959037ca4e2f584340b1714fa36d47f38e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407520 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent c93b1ff commit 0b11d0c

File tree

2 files changed

+54
-52
lines changed

2 files changed

+54
-52
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11535,6 +11535,10 @@ class TypeParameterElementImpl2 extends TypeDefiningElementImpl2
1153511535

1153611536
shared.Variance get variance => firstFragment.variance;
1153711537

11538+
set variance(shared.Variance value) {
11539+
firstFragment.variance = value;
11540+
}
11541+
1153811542
@override
1153911543
Element? get _enclosingFunction => firstFragment._enclosingElement3;
1154011544

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

Lines changed: 50 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
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-
75
import 'package:_fe_analyzer_shared/src/type_inference/type_analyzer_operations.dart';
8-
import 'package:analyzer/dart/element/element.dart';
6+
import 'package:analyzer/dart/element/element2.dart';
97
import 'package:analyzer/dart/element/type.dart';
108
import 'package:analyzer/src/dart/ast/ast.dart';
119
import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -14,7 +12,6 @@ import 'package:analyzer/src/summary2/function_type_builder.dart';
1412
import 'package:analyzer/src/summary2/link.dart';
1513
import 'package:analyzer/src/summary2/named_type_builder.dart';
1614
import 'package:analyzer/src/summary2/record_type_builder.dart';
17-
import 'package:analyzer/src/utilities/extensions/element.dart';
1815

1916
class VarianceBuilder {
2017
final Linker _linker;
@@ -57,42 +54,46 @@ class VarianceBuilder {
5754
}
5855
}
5956

60-
Variance _compute(TypeParameterElement variable, DartType? type) {
57+
Variance _compute(TypeParameterElement2 variable, DartType? type) {
6158
if (type is TypeParameterType) {
62-
if (type.element == variable) {
59+
if (type.element3 == variable) {
6360
return Variance.covariant;
6461
} else {
6562
return Variance.unrelated;
6663
}
6764
} else if (type is NamedTypeBuilder) {
68-
var element = type.element3.asElement;
65+
var element = type.element3;
6966
var arguments = type.arguments;
70-
if (element is InterfaceElement) {
67+
if (element is InterfaceElementImpl2) {
7168
var result = Variance.unrelated;
7269
if (arguments.isNotEmpty) {
73-
var parameters = element.typeParameters;
74-
for (var i = 0; i < arguments.length && i < parameters.length; i++) {
75-
var parameter = parameters[i] as TypeParameterElementImpl;
70+
var typeParameters = element.typeParameters2;
71+
for (var i = 0;
72+
i < arguments.length && i < typeParameters.length;
73+
i++) {
74+
var typeParameter = typeParameters[i];
7675
result = result.meet(
77-
parameter.variance.combine(
76+
typeParameter.variance.combine(
7877
_compute(variable, arguments[i]),
7978
),
8079
);
8180
}
8281
}
8382
return result;
84-
} else if (element is TypeAliasElementImpl) {
83+
} else if (element is TypeAliasElementImpl2) {
8584
_typeAliasElement(element);
8685

8786
var result = Variance.unrelated;
8887

8988
if (arguments.isNotEmpty) {
90-
var parameters = element.typeParameters;
91-
for (var i = 0; i < arguments.length && i < parameters.length; i++) {
92-
var parameter = parameters[i];
93-
var parameterVariance = parameter.variance;
89+
var typeParameters = element.typeParameters2;
90+
for (var i = 0;
91+
i < arguments.length && i < typeParameters.length;
92+
i++) {
93+
var typeParameter = typeParameters[i];
94+
var typeParameterVariance = typeParameter.variance;
9495
result = result.meet(
95-
parameterVariance.combine(
96+
typeParameterVariance.combine(
9697
_compute(variable, arguments[i]),
9798
),
9899
);
@@ -104,8 +105,8 @@ class VarianceBuilder {
104105
return _computeFunctionType(
105106
variable,
106107
returnType: type.returnType,
107-
typeFormals: type.typeParameters.map((e) => e.asElement).toList(),
108-
parameters: type.formalParameters.map((e) => e.asElement).toList(),
108+
typeParameters: type.typeParameters,
109+
formalParameters: type.formalParameters,
109110
);
110111
} else if (type is RecordTypeBuilder) {
111112
var result = Variance.unrelated;
@@ -120,10 +121,10 @@ class VarianceBuilder {
120121
}
121122

122123
Variance _computeFunctionType(
123-
TypeParameterElement variable, {
124+
TypeParameterElement2 variable, {
124125
required DartType? returnType,
125-
required List<TypeParameterElement>? typeFormals,
126-
required List<ParameterElement> parameters,
126+
required List<TypeParameterElement2>? typeParameters,
127+
required List<FormalParameterElement> formalParameters,
127128
}) {
128129
var result = Variance.unrelated;
129130

@@ -133,19 +134,19 @@ class VarianceBuilder {
133134

134135
// If [variable] is referenced in a bound at all, it makes the
135136
// variance of [variable] in the entire type invariant.
136-
if (typeFormals != null) {
137-
for (var parameter in typeFormals) {
138-
var bound = parameter.bound;
137+
if (typeParameters != null) {
138+
for (var typeParameter in typeParameters) {
139+
var bound = typeParameter.bound;
139140
if (bound != null && _compute(variable, bound) != Variance.unrelated) {
140141
result = Variance.invariant;
141142
}
142143
}
143144
}
144145

145-
for (var parameter in parameters) {
146+
for (var typeParameter in formalParameters) {
146147
result = result.meet(
147148
Variance.contravariant.combine(
148-
_compute(variable, parameter.type),
149+
_compute(variable, typeParameter.type),
149150
),
150151
);
151152
}
@@ -161,8 +162,8 @@ class VarianceBuilder {
161162

162163
// Recursion detected, recover.
163164
if (_visit.contains(node)) {
164-
for (var parameter in parameterList.typeParameters) {
165-
_setVariance(parameter, Variance.covariant);
165+
for (var typeParameter in parameterList.typeParameters) {
166+
_setVariance(typeParameter, Variance.covariant);
166167
}
167168
return;
168169
}
@@ -174,16 +175,14 @@ class VarianceBuilder {
174175

175176
_visit.add(node);
176177
try {
177-
for (var parameter in parameterList.typeParameters) {
178+
for (var typeParameter in parameterList.typeParameters) {
178179
var variance = _computeFunctionType(
179-
parameter.declaredElement!,
180+
typeParameter.declaredFragment!.element,
180181
returnType: node.returnType?.type,
181-
typeFormals: null,
182-
parameters: FunctionTypeBuilder.getParameters(node.parameters)
183-
.map((e) => e.asElement)
184-
.toList(),
182+
typeParameters: null,
183+
formalParameters: FunctionTypeBuilder.getParameters(node.parameters),
185184
);
186-
_setVariance(parameter, variance);
185+
_setVariance(typeParameter, variance);
187186
}
188187
} finally {
189188
_visit.remove(node);
@@ -198,8 +197,8 @@ class VarianceBuilder {
198197

199198
// Recursion detected, recover.
200199
if (_visit.contains(node)) {
201-
for (var parameter in parameterList.typeParameters) {
202-
_setVariance(parameter, Variance.covariant);
200+
for (var typeParameter in parameterList.typeParameters) {
201+
_setVariance(typeParameter, Variance.covariant);
203202
}
204203
return;
205204
}
@@ -213,24 +212,24 @@ class VarianceBuilder {
213212

214213
// Not a function type, recover.
215214
if (type == null) {
216-
for (var parameter in parameterList.typeParameters) {
217-
_setVariance(parameter, Variance.covariant);
215+
for (var typeParameter in parameterList.typeParameters) {
216+
_setVariance(typeParameter, Variance.covariant);
218217
}
219218
}
220219

221220
_visit.add(node);
222221
try {
223-
for (var parameter in parameterList.typeParameters) {
224-
var variance = _compute(parameter.declaredElement!, type);
225-
_setVariance(parameter, variance);
222+
for (var typeParameter in parameterList.typeParameters) {
223+
var variance = _compute(typeParameter.declaredFragment!.element, type);
224+
_setVariance(typeParameter, variance);
226225
}
227226
} finally {
228227
_visit.remove(node);
229228
}
230229
}
231230

232-
void _typeAliasElement(TypeAliasElementImpl element) {
233-
var node = _linker.getLinkingNode(element);
231+
void _typeAliasElement(TypeAliasElementImpl2 element) {
232+
var node = _linker.getLinkingNode2(element);
234233
if (node == null) {
235234
// Not linking.
236235
} else if (node is GenericTypeAliasImpl) {
@@ -242,23 +241,22 @@ class VarianceBuilder {
242241
}
243242
}
244243

245-
void _typeParameters(TypeParameterList? parameterList) {
244+
void _typeParameters(TypeParameterListImpl? parameterList) {
246245
if (parameterList == null) {
247246
return;
248247
}
249248

250-
for (var parameter in parameterList.typeParameters) {
251-
var parameterImpl = parameter as TypeParameterImpl;
252-
var varianceKeyword = parameterImpl.varianceKeyword;
249+
for (var typeParameter in parameterList.typeParameters) {
250+
var varianceKeyword = typeParameter.varianceKeyword;
253251
if (varianceKeyword != null) {
254252
var variance = Variance.fromKeywordString(varianceKeyword.lexeme);
255-
_setVariance(parameter, variance);
253+
_setVariance(typeParameter, variance);
256254
}
257255
}
258256
}
259257

260258
static void _setVariance(TypeParameter node, Variance variance) {
261-
var element = node.declaredElement as TypeParameterElementImpl;
259+
var element = node.declaredFragment!.element as TypeParameterElementImpl2;
262260
element.variance = variance;
263261
}
264262
}

0 commit comments

Comments
 (0)