Skip to content

Commit b92ef7e

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate DefaultTypesBuilder.
Change-Id: Ic9742f46b3d83077baa720112d2576b1f40ac6f8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405662 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 6c4028e commit b92ef7e

File tree

4 files changed

+56
-51
lines changed

4 files changed

+56
-51
lines changed

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

Lines changed: 46 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +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-
75
import 'package:_fe_analyzer_shared/src/type_inference/type_analyzer_operations.dart';
8-
import 'package:analyzer/dart/element/element.dart';
96
import 'package:analyzer/dart/element/element2.dart';
107
import 'package:analyzer/dart/element/type.dart';
118
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -27,52 +24,52 @@ class DefaultTypesBuilder {
2724
void build(List<AstNode> nodes) {
2825
for (var node in nodes) {
2926
if (node is ClassDeclaration) {
30-
var element = node.declaredElement!;
27+
var element = node.declaredFragment!.element;
3128
_breakSelfCycles(node.typeParameters);
3229
_breakRawTypeCycles(element, node.typeParameters);
3330
_computeBounds(element, node.typeParameters);
3431
} else if (node is ClassTypeAlias) {
35-
var element = node.declaredElement!;
32+
var element = node.declaredFragment!.element;
3633
_breakSelfCycles(node.typeParameters);
3734
_breakRawTypeCycles(element, node.typeParameters);
3835
_computeBounds(element, node.typeParameters);
3936
} else if (node is EnumDeclaration) {
40-
var element = node.declaredElement!;
37+
var element = node.declaredFragment!.element;
4138
_breakSelfCycles(node.typeParameters);
4239
_breakRawTypeCycles(element, node.typeParameters);
4340
_computeBounds(element, node.typeParameters);
4441
} else if (node is ExtensionDeclaration) {
45-
var element = node.declaredElement!;
42+
var element = node.declaredFragment!.element;
4643
_breakSelfCycles(node.typeParameters);
4744
_breakRawTypeCycles(element, node.typeParameters);
4845
_computeBounds(element, node.typeParameters);
4946
} else if (node is ExtensionTypeDeclaration) {
50-
var element = node.declaredElement!;
47+
var element = node.declaredFragment!.element;
5148
_breakSelfCycles(node.typeParameters);
5249
_breakRawTypeCycles(element, node.typeParameters);
5350
_computeBounds(element, node.typeParameters);
5451
} else if (node is FunctionTypeAlias) {
55-
var element = node.declaredElement!;
52+
var element = node.declaredFragment!.element;
5653
_breakSelfCycles(node.typeParameters);
5754
_breakRawTypeCycles(element, node.typeParameters);
5855
_computeBounds(element, node.typeParameters);
5956
} else if (node is GenericTypeAlias) {
60-
var element = node.declaredElement!;
57+
var element = node.declaredFragment!.element;
6158
_breakSelfCycles(node.typeParameters);
6259
_breakRawTypeCycles(element, node.typeParameters);
6360
_computeBounds(element, node.typeParameters);
6461
} else if (node is MixinDeclaration) {
65-
var element = node.declaredElement!;
62+
var element = node.declaredFragment!.element;
6663
_breakSelfCycles(node.typeParameters);
6764
_breakRawTypeCycles(element, node.typeParameters);
6865
_computeBounds(element, node.typeParameters);
6966
} else if (node is MethodDeclaration) {
70-
var element = node.declaredElement!;
67+
var element = node.declaredFragment!.element;
7168
_breakSelfCycles(node.typeParameters);
7269
_breakRawTypeCycles(element, node.typeParameters);
7370
_computeBounds(element, node.typeParameters);
7471
} else if (node is FunctionDeclaration) {
75-
var element = node.declaredElement!;
72+
var element = node.declaredFragment!.element;
7673
_breakSelfCycles(node.functionExpression.typeParameters);
7774
_breakRawTypeCycles(element, node.functionExpression.typeParameters);
7875
_computeBounds(element, node.functionExpression.typeParameters);
@@ -104,7 +101,7 @@ class DefaultTypesBuilder {
104101
}
105102

106103
void _breakRawTypeCycles(
107-
Element declarationElement,
104+
Element2 declarationElement,
108105
TypeParameterList? parameterList,
109106
) {
110107
if (parameterList == null) return;
@@ -118,7 +115,7 @@ class DefaultTypesBuilder {
118115
parameter,
119116
boundNode.typeOrThrow,
120117
declarationElement,
121-
Set<Element>.identity(),
118+
Set<Element2>.identity(),
122119
);
123120
allCycles.addAll(cycles);
124121
}
@@ -181,7 +178,7 @@ class DefaultTypesBuilder {
181178
if (parameterList == null) return;
182179

183180
for (var parameter in parameterList.typeParameters) {
184-
var element = parameter.declaredElement as TypeParameterElementImpl;
181+
var element = parameter.declaredFragment as TypeParameterElementImpl;
185182
var defaultType = element.defaultType;
186183
if (defaultType is TypeBuilder) {
187184
var builtType = defaultType.build();
@@ -193,7 +190,7 @@ class DefaultTypesBuilder {
193190
/// Compute bounds to be provided as type arguments in place of missing type
194191
/// arguments on raw types with the given type parameters.
195192
void _computeBounds(
196-
Element declarationElement,
193+
Element2 declarationElement,
197194
TypeParameterList? parameterList,
198195
) {
199196
if (parameterList == null) return;
@@ -203,19 +200,19 @@ class DefaultTypesBuilder {
203200

204201
var nodes = parameterList.typeParameters;
205202
var length = nodes.length;
206-
var elements = <TypeParameterElementImpl>[];
203+
var elements = <TypeParameterElementImpl2>[];
207204
var bounds = <DartType>[];
208205
for (int i = 0; i < length; i++) {
209206
var node = nodes[i];
210-
elements.add(node.declaredElement as TypeParameterElementImpl);
207+
elements.add(node.declaredFragment!.element as TypeParameterElementImpl2);
211208
bounds.add(node.bound?.type ?? dynamicType);
212209
}
213210

214211
var graph = _TypeParametersGraph(elements, bounds);
215212
var stronglyConnected = computeStrongComponents(graph);
216213
for (var component in stronglyConnected) {
217-
var dynamicSubstitution = <TypeParameterElement, DartType>{};
218-
var nullSubstitution = <TypeParameterElement, DartType>{};
214+
var dynamicSubstitution = <TypeParameterElement2, DartType>{};
215+
var nullSubstitution = <TypeParameterElement2, DartType>{};
219216
for (var i in component) {
220217
var element = elements[i];
221218
dynamicSubstitution[element] = dynamicType;
@@ -234,8 +231,8 @@ class DefaultTypesBuilder {
234231
}
235232

236233
for (var i = 0; i < length; i++) {
237-
var thisSubstitution = <TypeParameterElement, DartType>{};
238-
var nullSubstitution = <TypeParameterElement, DartType>{};
234+
var thisSubstitution = <TypeParameterElement2, DartType>{};
235+
var nullSubstitution = <TypeParameterElement2, DartType>{};
239236
var element = elements[i];
240237
thisSubstitution[element] = bounds[i];
241238
nullSubstitution[element] = bottomType;
@@ -253,7 +250,7 @@ class DefaultTypesBuilder {
253250

254251
// Set computed TypeBuilder(s) as default types.
255252
for (var i = 0; i < length; i++) {
256-
var element = nodes[i].declaredElement as TypeParameterElementImpl;
253+
var element = nodes[i].declaredFragment as TypeParameterElementImpl;
257254
element.defaultType = bounds[i];
258255
}
259256
}
@@ -263,21 +260,21 @@ class DefaultTypesBuilder {
263260
List<List<_CycleElement>> _findRawTypePathsToDeclaration(
264261
TypeParameter startParameter,
265262
DartType startType,
266-
Element end,
267-
Set<Element> visited,
263+
Element2 end,
264+
Set<Element2> visited,
268265
) {
269266
var paths = <List<_CycleElement>>[];
270267
if (startType is NamedTypeBuilder) {
271-
var declaration = startType.element;
268+
var declaration = startType.element3;
272269
if (startType.arguments.isEmpty) {
273-
if (startType.element == end) {
270+
if (startType.element3 == end) {
274271
paths.add([
275272
_CycleElement(startParameter, startType),
276273
]);
277-
} else if (visited.add(startType.element)) {
278-
void recurseParameters(List<TypeParameterElement> parameters) {
274+
} else if (visited.add(startType.element3)) {
275+
void recurseParameters(List<TypeParameterElement2> parameters) {
279276
for (var parameter in parameters) {
280-
var parameterNode = _linker.getLinkingNode(parameter);
277+
var parameterNode = _linker.getLinkingNode2(parameter);
281278
if (parameterNode is TypeParameter) {
282279
var bound = parameterNode.bound;
283280
if (bound != null) {
@@ -298,12 +295,12 @@ class DefaultTypesBuilder {
298295
}
299296
}
300297

301-
if (declaration is InterfaceElement) {
302-
recurseParameters(declaration.typeParameters);
303-
} else if (declaration is TypeAliasElement) {
304-
recurseParameters(declaration.typeParameters);
298+
if (declaration is InterfaceElement2) {
299+
recurseParameters(declaration.typeParameters2);
300+
} else if (declaration is TypeAliasElement2) {
301+
recurseParameters(declaration.typeParameters2);
305302
}
306-
visited.remove(startType.element);
303+
visited.remove(startType.element3);
307304
}
308305
} else {
309306
for (var argument in startType.arguments) {
@@ -326,7 +323,7 @@ class DefaultTypesBuilder {
326323
visited,
327324
),
328325
);
329-
for (var typeParameter in startType.typeFormals) {
326+
for (var typeParameter in startType.typeParameters) {
330327
var bound = typeParameter.bound;
331328
if (bound != null) {
332329
paths.addAll(
@@ -339,7 +336,7 @@ class DefaultTypesBuilder {
339336
);
340337
}
341338
}
342-
for (var formalParameter in startType.parameters) {
339+
for (var formalParameter in startType.formalParameters) {
343340
paths.addAll(
344341
_findRawTypePathsToDeclaration(
345342
startParameter,
@@ -372,10 +369,10 @@ class _TypeParametersGraph implements Graph<int> {
372369
// the type parameter with the index `i` in their bounds.
373370
final List<List<int>> _edges = [];
374371

375-
final Map<TypeParameterElement, int> _parameterToIndex = Map.identity();
372+
final Map<TypeParameterElement2, int> _parameterToIndex = Map.identity();
376373

377374
_TypeParametersGraph(
378-
List<TypeParameterElement> parameters,
375+
List<TypeParameterElement2> parameters,
379376
List<DartType> bounds,
380377
) {
381378
assert(parameters.length == bounds.length);
@@ -400,10 +397,10 @@ class _TypeParametersGraph implements Graph<int> {
400397
/// Collect references to the [index]th type parameter from the [type].
401398
void _collectReferencesFrom(int index, DartType? type) {
402399
if (type is FunctionTypeBuilder) {
403-
for (var parameter in type.typeFormals) {
400+
for (var parameter in type.typeParameters) {
404401
_collectReferencesFrom(index, parameter.bound);
405402
}
406-
for (var parameter in type.parameters) {
403+
for (var parameter in type.formalParameters) {
407404
_collectReferencesFrom(index, parameter.type);
408405
}
409406
_collectReferencesFrom(index, type.returnType);
@@ -412,7 +409,7 @@ class _TypeParametersGraph implements Graph<int> {
412409
_collectReferencesFrom(index, argument);
413410
}
414411
} else if (type is TypeParameterType) {
415-
var typeIndex = _parameterToIndex[type.element];
412+
var typeIndex = _parameterToIndex[type.element3];
416413
if (typeIndex != null) {
417414
_edges[typeIndex].add(index);
418415
}
@@ -421,13 +418,13 @@ class _TypeParametersGraph implements Graph<int> {
421418
}
422419

423420
class _UpperLowerReplacementVisitor extends ReplacementVisitor {
424-
final Map<TypeParameterElement, DartType> _upper;
425-
final Map<TypeParameterElement, DartType> _lower;
421+
final Map<TypeParameterElement2, DartType> _upper;
422+
final Map<TypeParameterElement2, DartType> _lower;
426423
Variance _variance;
427424

428425
_UpperLowerReplacementVisitor({
429-
required Map<TypeParameterElement, DartType> upper,
430-
required Map<TypeParameterElement, DartType> lower,
426+
required Map<TypeParameterElement2, DartType> upper,
427+
required Map<TypeParameterElement2, DartType> lower,
431428
required Variance variance,
432429
}) : _upper = upper,
433430
_lower = lower,
@@ -465,9 +462,9 @@ class _UpperLowerReplacementVisitor extends ReplacementVisitor {
465462
@override
466463
DartType? visitTypeParameterType(TypeParameterType type) {
467464
if (_variance == Variance.contravariant) {
468-
return _lower[type.element];
465+
return _lower[type.element3];
469466
} else {
470-
return _upper[type.element];
467+
return _upper[type.element3];
471468
}
472469
}
473470
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'dart:typed_data';
99
import 'package:analyzer/dart/analysis/declared_variables.dart';
1010
import 'package:analyzer/dart/ast/ast.dart' as ast;
1111
import 'package:analyzer/dart/element/element.dart';
12+
import 'package:analyzer/dart/element/element2.dart';
1213
import 'package:analyzer/src/context/context.dart';
1314
import 'package:analyzer/src/dart/analysis/file_state.dart';
1415
import 'package:analyzer/src/dart/element/element.dart';
@@ -29,6 +30,7 @@ import 'package:analyzer/src/summary2/types_builder.dart';
2930
import 'package:analyzer/src/summary2/variance_builder.dart';
3031
import 'package:analyzer/src/util/performance/operation_performance.dart';
3132
import 'package:analyzer/src/utilities/extensions/collection.dart';
33+
import 'package:analyzer/src/utilities/extensions/element.dart';
3234
import 'package:analyzer/src/utilities/uri_cache.dart';
3335
import 'package:macros/src/executor/multi_executor.dart' as macro;
3436

@@ -104,6 +106,12 @@ class Linker {
104106
return elementNodes[element];
105107
}
106108

109+
/// If the [element] is part of a library being linked, return the node
110+
/// from which it was created.
111+
ast.AstNode? getLinkingNode2(Element2 element) {
112+
return elementNodes[element.asElement];
113+
}
114+
107115
Future<void> link({
108116
required OperationPerformanceImpl performance,
109117
required List<LibraryFileKind> inputLibraries,

pkg/analyzer/test/src/summary/elements/class_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43292,7 +43292,7 @@ library
4329243292
typeParameters
4329343293
covariant T @37
4329443294
bound: A<dynamic>
43295-
defaultType: A<dynamic>
43295+
defaultType: dynamic
4329643296
augmentationTarget: <testLibraryFragment>::@class::A
4329743297
----------------------------------------
4329843298
library

pkg/analyzer/test/src/summary/elements/mixin_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8752,7 +8752,7 @@ library
87528752
typeParameters
87538753
covariant T @37
87548754
bound: A<dynamic>
8755-
defaultType: A<dynamic>
8755+
defaultType: dynamic
87568756
augmentationTarget: <testLibraryFragment>::@mixin::A
87578757
----------------------------------------
87588758
library

0 commit comments

Comments
 (0)