Skip to content

Commit c7fc65a

Browse files
committed
Elements. Migrate computeSimplyBounded().
Change-Id: Ibf62f9f804565db257ed83dc867d9bb88a6b6f15 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406783 Reviewed-by: Phil Quitslund <[email protected]>
1 parent e42a919 commit c7fc65a

File tree

10 files changed

+126
-103
lines changed

10 files changed

+126
-103
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5779,7 +5779,7 @@ final class EnumDeclarationImpl extends NamedCompilationUnitMemberImpl
57795779

57805780
@experimental
57815781
@override
5782-
EnumFragment? get declaredFragment => declaredElement as EnumFragment?;
5782+
EnumElementImpl? get declaredFragment => declaredElement;
57835783

57845784
@override
57855785
Token get endToken => rightBracket;
@@ -6826,8 +6826,7 @@ final class ExtensionTypeDeclarationImpl extends NamedCompilationUnitMemberImpl
68266826

68276827
@experimental
68286828
@override
6829-
ExtensionTypeFragment? get declaredFragment =>
6830-
declaredElement as ExtensionTypeFragment;
6829+
ExtensionTypeElementImpl? get declaredFragment => declaredElement;
68316830

68326831
@override
68336832
Token get endToken => rightBracket;
@@ -8807,8 +8806,7 @@ final class FunctionTypeAliasImpl extends TypeAliasImpl
88078806

88088807
@experimental
88098808
@override
8810-
TypeAliasFragment? get declaredFragment =>
8811-
declaredElement as TypeAliasFragment?;
8809+
TypeAliasElementImpl? get declaredFragment => declaredElement;
88128810

88138811
@override
88148812
FormalParameterListImpl get parameters => _parameters;
@@ -9137,7 +9135,7 @@ final class GenericTypeAliasImpl extends TypeAliasImpl
91379135
final Token equals;
91389136

91399137
@override
9140-
ElementImpl? declaredElement;
9138+
TypeAliasElementImpl? declaredElement;
91419139

91429140
/// Initializes a newly created generic type alias.
91439141
///
@@ -9163,7 +9161,7 @@ final class GenericTypeAliasImpl extends TypeAliasImpl
91639161

91649162
@experimental
91659163
@override
9166-
Fragment? get declaredFragment => declaredElement as Fragment?;
9164+
TypeAliasElementImpl? get declaredFragment => declaredElement;
91679165

91689166
@override
91699167
GenericFunctionType? get functionType {

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6270,6 +6270,9 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
62706270
return super.name!;
62716271
}
62726272

6273+
@override
6274+
InterfaceElementImpl? get nextFragment;
6275+
62736276
@override
62746277
InterfaceTypeImpl? get supertype {
62756278
linkedData?.read(this);
@@ -6605,6 +6608,16 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
66056608
@override
66066609
InterfaceElementImpl get firstFragment;
66076610

6611+
@override
6612+
List<InterfaceElementImpl> get fragments {
6613+
return [
6614+
for (InterfaceElementImpl? fragment = firstFragment;
6615+
fragment != null;
6616+
fragment = fragment.nextFragment)
6617+
fragment,
6618+
];
6619+
}
6620+
66086621
InheritanceManager3 get inheritanceManager {
66096622
var library = library2 as LibraryElementImpl;
66106623
return library.session.inheritanceManager;
@@ -6619,6 +6632,12 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
66196632
_interfaces = values.cast();
66206633
}
66216634

6635+
set isSimplyBounded(bool value) {
6636+
for (var fragment in fragments) {
6637+
fragment.isSimplyBounded = value;
6638+
}
6639+
}
6640+
66226641
@override
66236642
List<InterfaceTypeImpl> get mixins {
66246643
if (firstFragment.mixinInferenceCallback case var callback?) {
@@ -11268,6 +11287,12 @@ class TypeAliasElementImpl2 extends TypeDefiningElementImpl2
1126811287
@override
1126911288
bool get isSimplyBounded => firstFragment.isSimplyBounded;
1127011289

11290+
set isSimplyBounded(bool value) {
11291+
for (var fragment in fragments) {
11292+
fragment.isSimplyBounded = value;
11293+
}
11294+
}
11295+
1127111296
@override
1127211297
ElementKind get kind => ElementKind.TYPE_ALIAS;
1127311298

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

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
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/util/dependency_walker.dart' as graph
86
show DependencyWalker, Node;
9-
import 'package:analyzer/dart/ast/ast.dart';
10-
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
8+
import 'package:analyzer/src/dart/ast/ast.dart';
119
import 'package:analyzer/src/dart/ast/extensions.dart';
12-
import 'package:analyzer/src/dart/element/element.dart';
1310
import 'package:analyzer/src/summary2/link.dart';
1411

1512
/// Compute simple-boundedness for all classes and generic types aliases in
@@ -19,53 +16,52 @@ void computeSimplyBounded(Linker linker) {
1916
var walker = SimplyBoundedDependencyWalker(linker);
2017
var nodes = <SimplyBoundedNode>[];
2118
for (var libraryBuilder in linker.builders.values) {
22-
for (var unit in libraryBuilder.element.units) {
23-
for (var element in unit.classes) {
24-
var node = walker.getNode(element);
25-
nodes.add(node);
26-
}
27-
for (var element in unit.enums) {
28-
var node = walker.getNode(element);
29-
nodes.add(node);
30-
}
31-
for (var element in unit.extensionTypes) {
32-
var node = walker.getNode(element);
33-
nodes.add(node);
34-
}
35-
for (var element in unit.mixins) {
36-
var node = walker.getNode(element);
37-
nodes.add(node);
38-
}
39-
for (var element in unit.typeAliases) {
40-
var node = walker.getNode(element);
41-
nodes.add(node);
42-
}
19+
var libraryElement = libraryBuilder.element;
20+
for (var element in libraryElement.classes) {
21+
var node = walker.getNode(element);
22+
nodes.add(node);
23+
}
24+
for (var element in libraryElement.enums) {
25+
var node = walker.getNode(element);
26+
nodes.add(node);
27+
}
28+
for (var element in libraryElement.extensionTypes) {
29+
var node = walker.getNode(element);
30+
nodes.add(node);
31+
}
32+
for (var element in libraryElement.mixins) {
33+
var node = walker.getNode(element);
34+
nodes.add(node);
35+
}
36+
for (var element in libraryElement.typeAliases) {
37+
var node = walker.getNode(element);
38+
nodes.add(node);
4339
}
4440
}
4541

4642
for (var node in nodes) {
4743
walker.walk(node);
4844
var node2 = node._node;
49-
if (node2 is ClassDeclaration) {
50-
var element = node2.declaredElement as ClassElementImpl;
45+
if (node2 is ClassDeclarationImpl) {
46+
var element = node2.declaredFragment!.element;
5147
element.isSimplyBounded = node.isSimplyBounded;
52-
} else if (node2 is ClassTypeAlias) {
53-
var element = node2.declaredElement as ClassElementImpl;
48+
} else if (node2 is ClassTypeAliasImpl) {
49+
var element = node2.declaredFragment!.element;
5450
element.isSimplyBounded = node.isSimplyBounded;
55-
} else if (node2 is EnumDeclaration) {
56-
var element = node2.declaredElement as EnumElementImpl;
51+
} else if (node2 is EnumDeclarationImpl) {
52+
var element = node2.declaredFragment!.element;
5753
element.isSimplyBounded = node.isSimplyBounded;
58-
} else if (node2 is ExtensionTypeDeclaration) {
59-
var element = node2.declaredElement as ExtensionTypeElementImpl;
54+
} else if (node2 is ExtensionTypeDeclarationImpl) {
55+
var element = node2.declaredFragment!.element;
6056
element.isSimplyBounded = node.isSimplyBounded;
61-
} else if (node2 is GenericTypeAlias) {
62-
var element = node2.declaredElement as TypeAliasElementImpl;
57+
} else if (node2 is GenericTypeAliasImpl) {
58+
var element = node2.declaredFragment!.element;
6359
element.isSimplyBounded = node.isSimplyBounded;
64-
} else if (node2 is FunctionTypeAlias) {
65-
var element = node2.declaredElement as TypeAliasElementImpl;
60+
} else if (node2 is FunctionTypeAliasImpl) {
61+
var element = node2.declaredFragment!.element;
6662
element.isSimplyBounded = node.isSimplyBounded;
67-
} else if (node2 is MixinDeclaration) {
68-
var element = node2.declaredElement as MixinElementImpl;
63+
} else if (node2 is MixinDeclarationImpl) {
64+
var element = node2.declaredFragment!.element;
6965
element.isSimplyBounded = node.isSimplyBounded;
7066
} else {
7167
throw UnimplementedError('${node2.runtimeType}');
@@ -77,7 +73,7 @@ void computeSimplyBounded(Linker linker) {
7773
class SimplyBoundedDependencyWalker
7874
extends graph.DependencyWalker<SimplyBoundedNode> {
7975
final Linker linker;
80-
final Map<Element, SimplyBoundedNode> nodeMap = Map.identity();
76+
final Map<Element2, SimplyBoundedNode> nodeMap = Map.identity();
8177

8278
SimplyBoundedDependencyWalker(this.linker);
8379

@@ -93,10 +89,10 @@ class SimplyBoundedDependencyWalker
9389
}
9490
}
9591

96-
SimplyBoundedNode getNode(Element element) {
92+
SimplyBoundedNode getNode(Element2 element) {
9793
var graphNode = nodeMap[element];
9894
if (graphNode == null) {
99-
var node = linker.getLinkingNode(element);
95+
var node = linker.getLinkingNode2(element);
10096
if (node is ClassDeclaration) {
10197
var parameters = node.typeParameters?.typeParameters;
10298
graphNode = SimplyBoundedNode(
@@ -287,9 +283,9 @@ class SimplyBoundedNode extends graph.Node<SimplyBoundedNode> {
287283
bool _visitType(List<SimplyBoundedNode> dependencies, TypeAnnotation type,
288284
bool allowTypeParameters) {
289285
if (type is NamedType) {
290-
var element = type.element;
286+
var element = type.element2;
291287

292-
if (element is TypeParameterElement) {
288+
if (element is TypeParameterElement2) {
293289
return allowTypeParameters;
294290
}
295291

@@ -299,7 +295,7 @@ class SimplyBoundedNode extends graph.Node<SimplyBoundedNode> {
299295

300296
// If not a node being linked, then the flag is already set.
301297
if (graphNode == null) {
302-
if (element is TypeParameterizedElement) {
298+
if (element is TypeParameterizedElement2) {
303299
return element.isSimplyBounded;
304300
}
305301
return true;

pkg/analyzer/test/src/summary/element_text.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,12 +1004,12 @@ class _Element2Writer extends _AbstractElementWriter {
10041004
_sink.writeIf(e.isBase, 'base ');
10051005
_sink.writeIf(e.isInterface, 'interface ');
10061006
_sink.writeIf(e.isFinal, 'final ');
1007-
// _writeNotSimplyBounded(e);
1007+
_writeNotSimplyBounded(e);
10081008
_sink.writeIf(e.isMixinClass, 'mixin ');
10091009
_sink.write('class ');
10101010
_sink.writeIf(e.isMixinApplication, 'alias ');
10111011
case EnumElementImpl2():
1012-
// _writeNotSimplyBounded(e);
1012+
_writeNotSimplyBounded(e);
10131013
_sink.write('enum ');
10141014
case ExtensionElementImpl2():
10151015
_sink.write('extension ');
@@ -1022,11 +1022,11 @@ class _Element2Writer extends _AbstractElementWriter {
10221022
// e.hasImplementsSelfReference,
10231023
// 'hasImplementsSelfReference ',
10241024
// );
1025-
// // _writeNotSimplyBounded(e);
1025+
_writeNotSimplyBounded(e);
10261026
_sink.write('extension type ');
10271027
case MixinElementImpl2():
10281028
_sink.writeIf(e.isBase, 'base ');
1029-
// _writeNotSimplyBounded(e);
1029+
_writeNotSimplyBounded(e);
10301030
_sink.write('mixin ');
10311031
}
10321032

@@ -1625,6 +1625,10 @@ class _Element2Writer extends _AbstractElementWriter {
16251625
});
16261626
}
16271627

1628+
void _writeNotSimplyBounded(InterfaceElementImpl2 e) {
1629+
_sink.writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
1630+
}
1631+
16281632
void _writePrefixElement(PrefixElementImpl2 e) {
16291633
_sink.writeIndentedLine(() {
16301634
_elementPrinter.writeElement2(e);

0 commit comments

Comments
 (0)