Skip to content

Commit 85724eb

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate lib/src/summary2/extension_type.dart
Change-Id: I331f0c1db4129deb224cd31f22e97dc028dfdb06 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408500 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 89af242 commit 85724eb

File tree

4 files changed

+71
-52
lines changed

4 files changed

+71
-52
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4225,6 +4225,30 @@ class ExtensionTypeElementImpl2 extends InterfaceElementImpl2
42254225
];
42264226
}
42274227

4228+
/// Whether the element has direct or indirect reference to itself,
4229+
/// in implemented superinterfaces.
4230+
bool get hasImplementsSelfReference {
4231+
return firstFragment.hasImplementsSelfReference;
4232+
}
4233+
4234+
/// Whether the element has direct or indirect reference to itself,
4235+
/// in implemented superinterfaces.
4236+
set hasImplementsSelfReference(bool value) {
4237+
firstFragment.hasImplementsSelfReference = value;
4238+
}
4239+
4240+
/// Whether the element has direct or indirect reference to itself,
4241+
/// in representation.
4242+
bool get hasRepresentationSelfReference {
4243+
return firstFragment.hasRepresentationSelfReference;
4244+
}
4245+
4246+
/// Whether the element has direct or indirect reference to itself,
4247+
/// in representation.
4248+
set hasRepresentationSelfReference(bool value) {
4249+
firstFragment.hasRepresentationSelfReference = value;
4250+
}
4251+
42284252
@override
42294253
ConstructorElement2 get primaryConstructor2 => primaryConstructor.element;
42304254

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

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
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
import 'package:analyzer/dart/element/type.dart';
97
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -19,15 +17,13 @@ import 'package:analyzer/src/utilities/extensions/collection.dart';
1917
void buildExtensionTypes(Linker linker, List<AstNode> declarations) {
2018
var walker = _Walker(linker);
2119
var nodes = <_Node>[];
22-
var elements = <ExtensionTypeElementImpl>[];
20+
var elements = <ExtensionTypeElementImpl2>[];
2321
for (var declaration in declarations) {
2422
if (declaration is ExtensionTypeDeclarationImpl) {
25-
var element = declaration.declaredElement!;
26-
if (element.augmentationTarget == null) {
27-
var node = walker.getNode(declaration);
28-
nodes.add(node);
29-
elements.add(element);
30-
}
23+
var element = declaration.declaredFragment!.element;
24+
var node = walker.getNode(declaration);
25+
nodes.add(node);
26+
elements.add(element);
3127
}
3228
}
3329

@@ -39,7 +35,7 @@ void buildExtensionTypes(Linker linker, List<AstNode> declarations) {
3935
}
4036

4137
/// Clears interfaces for extension types that have cycles.
42-
void _breakImplementsCycles(List<ExtensionTypeElementImpl> elements) {
38+
void _breakImplementsCycles(List<ExtensionTypeElementImpl2> elements) {
4339
var walker = _ImplementsWalker();
4440
for (var element in elements) {
4541
var node = walker.getNode(element);
@@ -49,12 +45,12 @@ void _breakImplementsCycles(List<ExtensionTypeElementImpl> elements) {
4945

5046
/// Collector of referenced extension types in a type.
5147
class _DependenciesCollector extends RecursiveTypeVisitor {
52-
final List<ExtensionTypeElementImpl> dependencies = [];
48+
final List<ExtensionTypeElementImpl2> dependencies = [];
5349

5450
@override
5551
bool visitInterfaceType(InterfaceType type) {
56-
var element = type.element;
57-
if (element is ExtensionTypeElementImpl) {
52+
var element = type.element3;
53+
if (element is ExtensionTypeElementImpl2) {
5854
dependencies.add(element);
5955
}
6056

@@ -64,7 +60,7 @@ class _DependenciesCollector extends RecursiveTypeVisitor {
6460

6561
class _ImplementsNode extends graph.Node<_ImplementsNode> {
6662
final _ImplementsWalker walker;
67-
final ExtensionTypeElementImpl element;
63+
final ExtensionTypeElementImpl2 element;
6864

6965
@override
7066
bool isEvaluated = false;
@@ -74,8 +70,8 @@ class _ImplementsNode extends graph.Node<_ImplementsNode> {
7470
@override
7571
List<_ImplementsNode> computeDependencies() {
7672
return element.interfaces
77-
.map((interface) => interface.element)
78-
.whereType<ExtensionTypeElementImpl>()
73+
.map((interface) => interface.element3)
74+
.whereType<ExtensionTypeElementImpl2>()
7975
.map(walker.getNode)
8076
.toList();
8177
}
@@ -89,7 +85,7 @@ class _ImplementsNode extends graph.Node<_ImplementsNode> {
8985
element.hasImplementsSelfReference = true;
9086

9187
var representationType = element.representation.type;
92-
var typeSystem = element.library.typeSystem;
88+
var typeSystem = element.library2.typeSystem;
9389

9490
var superInterface = typeSystem.isNonNullable(representationType)
9591
? typeSystem.objectNone
@@ -99,7 +95,8 @@ class _ImplementsNode extends graph.Node<_ImplementsNode> {
9995
}
10096

10197
class _ImplementsWalker extends graph.DependencyWalker<_ImplementsNode> {
102-
final Map<ExtensionTypeElementImpl, _ImplementsNode> nodeMap = Map.identity();
98+
final Map<ExtensionTypeElementImpl2, _ImplementsNode> nodeMap =
99+
Map.identity();
103100

104101
@override
105102
void evaluate(_ImplementsNode v) {
@@ -113,15 +110,15 @@ class _ImplementsWalker extends graph.DependencyWalker<_ImplementsNode> {
113110
}
114111
}
115112

116-
_ImplementsNode getNode(ExtensionTypeElementImpl element) {
113+
_ImplementsNode getNode(ExtensionTypeElementImpl2 element) {
117114
return nodeMap[element] ??= _ImplementsNode(this, element);
118115
}
119116
}
120117

121118
class _Node extends graph.Node<_Node> {
122119
final _Walker walker;
123120
final ExtensionTypeDeclarationImpl node;
124-
final ExtensionTypeElementImpl element;
121+
final ExtensionTypeElementImpl2 element;
125122

126123
@override
127124
bool isEvaluated = false;
@@ -136,7 +133,7 @@ class _Node extends graph.Node<_Node> {
136133

137134
var dependencies = <_Node>[];
138135
for (var element in visitor.dependencies) {
139-
var declaration = walker.linker.elementNodes[element];
136+
var declaration = walker.linker.getLinkingNode2(element);
140137
if (declaration is ExtensionTypeDeclarationImpl) {
141138
var node = walker.getNode(declaration);
142139
dependencies.add(node);
@@ -152,18 +149,18 @@ class _Node extends graph.Node<_Node> {
152149
}
153150

154151
void _evaluateWithType(TypeImpl type) {
155-
var typeSystem = element.library.typeSystem;
152+
var typeSystem = element.library2.typeSystem;
156153

157154
element.representation.type = type;
158-
element.augmented.typeErasure = type.extensionTypeErasure;
159-
element.augmented.interfaces = element.augmented.interfaces
155+
element.typeErasure = type.extensionTypeErasure;
156+
element.interfaces = element.interfaces
160157
.whereType<InterfaceType>()
161158
.where(typeSystem.isValidExtensionTypeSuperinterface)
162159
.toFixedList();
163160

164-
var primaryConstructor = element.constructors.first;
165-
var primaryFormalParameter = primaryConstructor.parameters.first;
166-
primaryFormalParameter as FieldFormalParameterElementImpl;
161+
var primaryConstructor = element.constructors2.first;
162+
var primaryFormalParameter = primaryConstructor.formalParameters.first;
163+
primaryFormalParameter as FieldFormalParameterElementImpl2;
167164
primaryFormalParameter.type = type;
168165
isEvaluated = true;
169166
}
@@ -176,7 +173,7 @@ class _Node extends graph.Node<_Node> {
176173

177174
class _Walker extends graph.DependencyWalker<_Node> {
178175
final Linker linker;
179-
final Map<ExtensionTypeElementImpl, _Node> nodeMap = Map.identity();
176+
final Map<ExtensionTypeElementImpl2, _Node> nodeMap = Map.identity();
180177

181178
_Walker(this.linker);
182179

@@ -193,7 +190,7 @@ class _Walker extends graph.DependencyWalker<_Node> {
193190
}
194191

195192
_Node getNode(ExtensionTypeDeclarationImpl node) {
196-
var element = node.declaredElement!;
193+
var element = node.declaredFragment!.element;
197194
return nodeMap[element] ??= _Node(this, node, element);
198195
}
199196
}

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,14 +1002,14 @@ class _Element2Writer extends _AbstractElementWriter {
10021002
case ExtensionElementImpl2():
10031003
_sink.write('extension ');
10041004
case ExtensionTypeElementImpl2():
1005-
// _sink.writeIf(
1006-
// e.hasRepresentationSelfReference,
1007-
// 'hasRepresentationSelfReference ',
1008-
// );
1009-
// _sink.writeIf(
1010-
// e.hasImplementsSelfReference,
1011-
// 'hasImplementsSelfReference ',
1012-
// );
1005+
_sink.writeIf(
1006+
e.hasRepresentationSelfReference,
1007+
'hasRepresentationSelfReference ',
1008+
);
1009+
_sink.writeIf(
1010+
e.hasImplementsSelfReference,
1011+
'hasImplementsSelfReference ',
1012+
);
10131013
_writeNotSimplyBounded(e);
10141014
_sink.write('extension type ');
10151015
case MixinElementImpl2():
@@ -1256,7 +1256,6 @@ class _Element2Writer extends _AbstractElementWriter {
12561256
}
12571257
}
12581258

1259-
12601259
void _writeMetadata(Metadata metadata) {
12611260
if (configuration.withMetadata) {
12621261
var annotations = metadata.annotations;
@@ -2416,7 +2415,6 @@ class _ElementWriter extends _AbstractElementWriter {
24162415
});
24172416
}
24182417

2419-
24202418
void _writeMetadata(Element element) {
24212419
if (configuration.withMetadata) {
24222420
var annotations = element.metadata;

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,7 @@ library
15121512
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
15131513
typeErasure: int
15141514
interfaces
1515-
Object
1515+
B
15161516
fields
15171517
final it @21
15181518
reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -1530,7 +1530,7 @@ library
15301530
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
15311531
typeErasure: int
15321532
interfaces
1533-
Object
1533+
A
15341534
fields
15351535
final it @62
15361536
reference: <testLibraryFragment>::@extensionType::B::@field::it
@@ -1573,14 +1573,14 @@ library
15731573
reference: <testLibraryFragment>::@extensionType::B::@getter::it
15741574
element: <testLibraryFragment>::@extensionType::B::@getter::it#element
15751575
extensionTypes
1576-
extension type A
1576+
hasImplementsSelfReference extension type A
15771577
reference: <testLibrary>::@extensionType::A
15781578
firstFragment: <testLibraryFragment>::@extensionType::A
15791579
representation: <testLibraryFragment>::@extensionType::A::@field::it#element
15801580
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new#element
15811581
typeErasure: int
15821582
interfaces
1583-
B
1583+
Object
15841584
fields
15851585
final it
15861586
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
@@ -1589,14 +1589,14 @@ library
15891589
getters
15901590
synthetic get it
15911591
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
1592-
extension type B
1592+
hasImplementsSelfReference extension type B
15931593
reference: <testLibrary>::@extensionType::B
15941594
firstFragment: <testLibraryFragment>::@extensionType::B
15951595
representation: <testLibraryFragment>::@extensionType::B::@field::it#element
15961596
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new#element
15971597
typeErasure: int
15981598
interfaces
1599-
A
1599+
Object
16001600
fields
16011601
final it
16021602
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
@@ -1629,7 +1629,7 @@ library
16291629
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
16301630
typeErasure: int
16311631
interfaces
1632-
Object
1632+
A
16331633
fields
16341634
final it @21
16351635
reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -1660,14 +1660,14 @@ library
16601660
reference: <testLibraryFragment>::@extensionType::A::@getter::it
16611661
element: <testLibraryFragment>::@extensionType::A::@getter::it#element
16621662
extensionTypes
1663-
extension type A
1663+
hasImplementsSelfReference extension type A
16641664
reference: <testLibrary>::@extensionType::A
16651665
firstFragment: <testLibraryFragment>::@extensionType::A
16661666
representation: <testLibraryFragment>::@extensionType::A::@field::it#element
16671667
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new#element
16681668
typeErasure: int
16691669
interfaces
1670-
A
1670+
Object
16711671
fields
16721672
final it
16731673
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
@@ -2924,7 +2924,7 @@ library
29242924
reference: <testLibraryFragment>::@extensionType::B::@getter::it
29252925
element: <testLibraryFragment>::@extensionType::B::@getter::it#element
29262926
extensionTypes
2927-
extension type A
2927+
hasRepresentationSelfReference extension type A
29282928
reference: <testLibrary>::@extensionType::A
29292929
firstFragment: <testLibraryFragment>::@extensionType::A
29302930
representation: <testLibraryFragment>::@extensionType::A::@field::it#element
@@ -2938,7 +2938,7 @@ library
29382938
getters
29392939
synthetic get it
29402940
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
2941-
extension type B
2941+
hasRepresentationSelfReference extension type B
29422942
reference: <testLibrary>::@extensionType::B
29432943
firstFragment: <testLibraryFragment>::@extensionType::B
29442944
representation: <testLibraryFragment>::@extensionType::B::@field::it#element
@@ -3049,7 +3049,7 @@ library
30493049
getters
30503050
synthetic get it
30513051
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
3052-
extension type B
3052+
hasRepresentationSelfReference extension type B
30533053
reference: <testLibrary>::@extensionType::B
30543054
firstFragment: <testLibraryFragment>::@extensionType::B
30553055
representation: <testLibraryFragment>::@extensionType::B::@field::it#element
@@ -3116,7 +3116,7 @@ library
31163116
reference: <testLibraryFragment>::@extensionType::A::@getter::it
31173117
element: <testLibraryFragment>::@extensionType::A::@getter::it#element
31183118
extensionTypes
3119-
extension type A
3119+
hasRepresentationSelfReference extension type A
31203120
reference: <testLibrary>::@extensionType::A
31213121
firstFragment: <testLibraryFragment>::@extensionType::A
31223122
representation: <testLibraryFragment>::@extensionType::A::@field::it#element

0 commit comments

Comments
 (0)