Skip to content

Commit 98a1b63

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Consistently use addTopFragment().
Change-Id: I23bcbd31de28e7c9478fc63406b8f1c13c6cdbae Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435701 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent fcddbff commit 98a1b63

File tree

2 files changed

+84
-66
lines changed

2 files changed

+84
-66
lines changed

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

Lines changed: 80 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ElementBuilder {
2727
LibraryElementImpl get libraryElement => libraryBuilder.element;
2828

2929
void buildElements({
30-
required List<FragmentImpl> topFragments,
30+
required Map<LibraryFragmentImpl, List<FragmentImpl>> topFragments,
3131
required Map<FragmentImpl, List<FragmentImpl>> parentChildFragments,
3232
}) {
3333
_buildTopFragments(topFragments);
@@ -118,35 +118,60 @@ class ElementBuilder {
118118
}
119119
}
120120

121-
void _buildTopFragments(List<FragmentImpl> topFragments) {
121+
void _buildTopFragments(
122+
Map<LibraryFragmentImpl, List<FragmentImpl>> topFragments,
123+
) {
122124
var lastFragments = <String?, FragmentImpl>{};
123-
for (var fragment in topFragments) {
124-
var lastFragment = lastFragments[fragment.name2];
125-
switch (fragment) {
126-
case ClassFragmentImpl():
127-
_handleClassFragment(lastFragment, fragment);
128-
case EnumFragmentImpl():
129-
_handleEnumFragment(lastFragment, fragment);
130-
case ExtensionFragmentImpl():
131-
_handleExtensionFragment(lastFragment, fragment);
132-
case ExtensionTypeFragmentImpl():
133-
_handleExtensionTypeFragment(lastFragment, fragment);
134-
case GetterFragmentImpl():
135-
_handleTopLevelGetterFragment(lastFragment, fragment);
136-
case MixinFragmentImpl():
137-
_handleMixinFragment(lastFragment, fragment);
138-
case SetterFragmentImpl():
139-
_handleTopLevelSetterFragment(lastFragment, fragment);
140-
case TopLevelFunctionFragmentImpl():
141-
_handleTopLevelFunctionFragment(lastFragment, fragment);
142-
case TopLevelVariableFragmentImpl():
143-
_handleTopLevelVariableFragment(lastFragment, fragment);
144-
case TypeAliasFragmentImpl():
145-
_handleTypeAliasFragment(lastFragment, fragment);
146-
default:
147-
throw UnimplementedError('${fragment.runtimeType}');
125+
for (var libraryFragmentEntry in topFragments.entries) {
126+
var libraryFragment = libraryFragmentEntry.key;
127+
for (var fragment in libraryFragmentEntry.value) {
128+
var lastFragment = lastFragments[fragment.name2];
129+
switch (fragment) {
130+
case ClassFragmentImpl():
131+
_handleClassFragment(libraryFragment, lastFragment, fragment);
132+
case EnumFragmentImpl():
133+
_handleEnumFragment(libraryFragment, lastFragment, fragment);
134+
case ExtensionFragmentImpl():
135+
_handleExtensionFragment(libraryFragment, lastFragment, fragment);
136+
case ExtensionTypeFragmentImpl():
137+
_handleExtensionTypeFragment(
138+
libraryFragment,
139+
lastFragment,
140+
fragment,
141+
);
142+
case GetterFragmentImpl():
143+
_handleTopLevelGetterFragment(
144+
libraryFragment,
145+
lastFragment,
146+
fragment,
147+
);
148+
case MixinFragmentImpl():
149+
_handleMixinFragment(libraryFragment, lastFragment, fragment);
150+
case SetterFragmentImpl():
151+
_handleTopLevelSetterFragment(
152+
libraryFragment,
153+
lastFragment,
154+
fragment,
155+
);
156+
case TopLevelFunctionFragmentImpl():
157+
_handleTopLevelFunctionFragment(
158+
libraryFragment,
159+
lastFragment,
160+
fragment,
161+
);
162+
case TopLevelVariableFragmentImpl():
163+
_handleTopLevelVariableFragment(
164+
libraryFragment,
165+
lastFragment,
166+
fragment,
167+
);
168+
case TypeAliasFragmentImpl():
169+
_handleTypeAliasFragment(libraryFragment, lastFragment, fragment);
170+
default:
171+
throw UnimplementedError('${fragment.runtimeType}');
172+
}
173+
lastFragments[fragment.name2] = fragment;
148174
}
149-
lastFragments[fragment.name2] = fragment;
150175
}
151176
}
152177

@@ -163,10 +188,12 @@ class ElementBuilder {
163188
}
164189

165190
void _handleClassFragment(
191+
LibraryFragmentImpl libraryFragment,
166192
FragmentImpl? lastFragment,
167193
ClassFragmentImpl fragment,
168194
) {
169195
assert(!fragment.isSynthetic);
196+
libraryFragment.addClass(fragment);
170197

171198
if (fragment.isAugmentation && lastFragment is ClassFragmentImpl) {
172199
lastFragment.addFragment(fragment);
@@ -182,10 +209,12 @@ class ElementBuilder {
182209
}
183210

184211
void _handleEnumFragment(
212+
LibraryFragmentImpl libraryFragment,
185213
FragmentImpl? lastFragment,
186214
EnumFragmentImpl fragment,
187215
) {
188216
assert(!fragment.isSynthetic);
217+
libraryFragment.addEnum(fragment);
189218

190219
if (fragment.isAugmentation && lastFragment is EnumFragmentImpl) {
191220
lastFragment.addFragment(fragment);
@@ -201,10 +230,12 @@ class ElementBuilder {
201230
}
202231

203232
void _handleExtensionFragment(
233+
LibraryFragmentImpl libraryFragment,
204234
FragmentImpl? lastFragment,
205235
ExtensionFragmentImpl fragment,
206236
) {
207237
assert(!fragment.isSynthetic);
238+
libraryFragment.addExtension(fragment);
208239

209240
if (fragment.isAugmentation && lastFragment is ExtensionFragmentImpl) {
210241
lastFragment.addFragment(fragment);
@@ -220,10 +251,12 @@ class ElementBuilder {
220251
}
221252

222253
void _handleExtensionTypeFragment(
254+
LibraryFragmentImpl libraryFragment,
223255
FragmentImpl? lastFragment,
224256
ExtensionTypeFragmentImpl fragment,
225257
) {
226258
assert(!fragment.isSynthetic);
259+
libraryFragment.addExtensionType(fragment);
227260

228261
if (fragment.isAugmentation && lastFragment is ExtensionTypeFragmentImpl) {
229262
lastFragment.addFragment(fragment);
@@ -474,10 +507,12 @@ class ElementBuilder {
474507
}
475508

476509
void _handleMixinFragment(
510+
LibraryFragmentImpl libraryFragment,
477511
FragmentImpl? lastFragment,
478512
MixinFragmentImpl fragment,
479513
) {
480514
assert(!fragment.isSynthetic);
515+
libraryFragment.addMixin(fragment);
481516

482517
if (fragment.isAugmentation && lastFragment is MixinFragmentImpl) {
483518
lastFragment.addFragment(fragment);
@@ -493,10 +528,10 @@ class ElementBuilder {
493528
}
494529

495530
void _handleTopLevelFunctionFragment(
531+
LibraryFragmentImpl libraryFragment,
496532
FragmentImpl? lastFragment,
497533
TopLevelFunctionFragmentImpl fragment,
498534
) {
499-
var libraryFragment = fragment.enclosingFragment as LibraryFragmentImpl;
500535
libraryFragment.addFunction(fragment);
501536

502537
if (lastFragment is TopLevelFunctionFragmentImpl &&
@@ -514,13 +549,11 @@ class ElementBuilder {
514549
}
515550

516551
void _handleTopLevelGetterFragment(
552+
LibraryFragmentImpl libraryFragment,
517553
FragmentImpl? lastFragment,
518554
GetterFragmentImpl getterFragment,
519555
) {
520556
assert(!getterFragment.isSynthetic);
521-
522-
var libraryFragment =
523-
getterFragment.enclosingFragment as LibraryFragmentImpl;
524557
libraryFragment.addGetter(getterFragment);
525558

526559
var lastVariableElement = _topLevelVariableElement(lastFragment);
@@ -566,13 +599,11 @@ class ElementBuilder {
566599
}
567600

568601
void _handleTopLevelSetterFragment(
602+
LibraryFragmentImpl libraryFragment,
569603
FragmentImpl? lastFragment,
570604
SetterFragmentImpl setterFragment,
571605
) {
572606
assert(!setterFragment.isSynthetic);
573-
574-
var libraryFragment =
575-
setterFragment.enclosingFragment as LibraryFragmentImpl;
576607
libraryFragment.addSetter(setterFragment);
577608

578609
var lastVariableElement = _topLevelVariableElement(lastFragment);
@@ -619,13 +650,11 @@ class ElementBuilder {
619650
}
620651

621652
void _handleTopLevelVariableFragment(
653+
LibraryFragmentImpl libraryFragment,
622654
FragmentImpl? lastVariableFragment,
623655
TopLevelVariableFragmentImpl variableFragment,
624656
) {
625657
assert(!variableFragment.isSynthetic);
626-
627-
var libraryFragment =
628-
variableFragment.enclosingFragment as LibraryFragmentImpl;
629658
libraryFragment.addTopLevelVariable(variableFragment);
630659

631660
if (variableFragment.isAugmentation &&
@@ -695,10 +724,10 @@ class ElementBuilder {
695724
}
696725

697726
void _handleTypeAliasFragment(
727+
LibraryFragmentImpl libraryFragment,
698728
FragmentImpl? lastFragment,
699729
TypeAliasFragmentImpl fragment,
700730
) {
701-
var libraryFragment = fragment.enclosingFragment as LibraryFragmentImpl;
702731
libraryFragment.addTypeAlias(fragment);
703732

704733
if (lastFragment is TypeAliasFragmentImpl && fragment.isAugmentation) {
@@ -834,8 +863,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
834863
node.declaredFragment = fragment;
835864
_linker.elementNodes[fragment] = node;
836865

837-
_unitElement.addClass(fragment);
838-
_libraryBuilder.addTopFragment(fragment);
866+
_libraryBuilder.addTopFragment(_unitElement, fragment);
839867

840868
var holder = _EnclosingContext(
841869
instanceElementBuilder: null,
@@ -880,8 +908,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
880908
node.declaredFragment = fragment;
881909
_linker.elementNodes[fragment] = node;
882910

883-
_unitElement.addClass(fragment);
884-
_libraryBuilder.addTopFragment(fragment);
911+
_libraryBuilder.addTopFragment(_unitElement, fragment);
885912

886913
var holder = _EnclosingContext(
887914
instanceElementBuilder: null,
@@ -979,8 +1006,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
9791006
node.declaredFragment = fragment;
9801007
_linker.elementNodes[fragment] = node;
9811008

982-
_unitElement.addEnum(fragment);
983-
_libraryBuilder.addTopFragment(fragment);
1009+
_libraryBuilder.addTopFragment(_unitElement, fragment);
9841010

9851011
var holder = _EnclosingContext(
9861012
instanceElementBuilder: null,
@@ -1181,8 +1207,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
11811207
node.declaredFragment = fragment;
11821208
_linker.elementNodes[fragment] = node;
11831209

1184-
_unitElement.addExtension(fragment);
1185-
_libraryBuilder.addTopFragment(fragment);
1210+
_libraryBuilder.addTopFragment(_unitElement, fragment);
11861211

11871212
var holder = _EnclosingContext(
11881213
instanceElementBuilder: null,
@@ -1222,8 +1247,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
12221247
node.declaredFragment = fragment;
12231248
_linker.elementNodes[fragment] = node;
12241249

1225-
_unitElement.addExtensionType(fragment);
1226-
_libraryBuilder.addTopFragment(fragment);
1250+
_libraryBuilder.addTopFragment(_unitElement, fragment);
12271251

12281252
var holder = _EnclosingContext(
12291253
instanceElementBuilder: null,
@@ -1387,8 +1411,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
13871411
getterFragment.enclosingElement3 = _unitElement;
13881412
executableFragment = getterFragment;
13891413

1390-
getterFragment.enclosingElement3 = _unitElement;
1391-
_libraryBuilder.addTopFragment(getterFragment);
1414+
_libraryBuilder.addTopFragment(_unitElement, getterFragment);
13921415
} else if (node.isSetter) {
13931416
var setterFragment = SetterFragmentImpl(
13941417
name2: name2,
@@ -1401,8 +1424,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
14011424
setterFragment.enclosingElement3 = _unitElement;
14021425
executableFragment = setterFragment;
14031426

1404-
setterFragment.enclosingElement3 = _unitElement;
1405-
_libraryBuilder.addTopFragment(setterFragment);
1427+
_libraryBuilder.addTopFragment(_unitElement, setterFragment);
14061428
} else {
14071429
var fragment = TopLevelFunctionFragmentImpl(
14081430
name2: name2,
@@ -1415,8 +1437,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
14151437

14161438
_enclosingContext.addFunction(name, fragment);
14171439

1418-
fragment.enclosingElement3 = _unitElement;
1419-
_libraryBuilder.addTopFragment(fragment);
1440+
_libraryBuilder.addTopFragment(_unitElement, fragment);
14201441
}
14211442

14221443
executableFragment.hasImplicitReturnType = node.returnType == null;
@@ -1458,8 +1479,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
14581479
node.declaredFragment = fragment;
14591480
_linker.elementNodes[fragment] = node;
14601481

1461-
fragment.enclosingElement3 = _unitElement;
1462-
_libraryBuilder.addTopFragment(fragment);
1482+
_libraryBuilder.addTopFragment(_unitElement, fragment);
14631483

14641484
var holder = _EnclosingContext(
14651485
instanceElementBuilder: null,
@@ -1582,8 +1602,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
15821602
node.declaredFragment = fragment;
15831603
_linker.elementNodes[fragment] = node;
15841604

1585-
fragment.enclosingElement3 = _unitElement;
1586-
_libraryBuilder.addTopFragment(fragment);
1605+
_libraryBuilder.addTopFragment(_unitElement, fragment);
15871606

15881607
var holder = _EnclosingContext(
15891608
instanceElementBuilder: null,
@@ -1735,8 +1754,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
17351754
node.declaredFragment = fragment;
17361755
_linker.elementNodes[fragment] = node;
17371756

1738-
_unitElement.addMixin(fragment);
1739-
_libraryBuilder.addTopFragment(fragment);
1757+
_libraryBuilder.addTopFragment(_unitElement, fragment);
17401758

17411759
var holder = _EnclosingContext(
17421760
instanceElementBuilder: null,
@@ -1938,8 +1956,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
19381956
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
19391957
_enclosingContext.addTopLevelVariable(refName, fragment);
19401958

1941-
fragment.enclosingElement3 = _unitElement;
1942-
_libraryBuilder.addTopFragment(fragment);
1959+
_libraryBuilder.addTopFragment(_unitElement, fragment);
19431960

19441961
_linker.elementNodes[fragment] = variable;
19451962
variable.declaredFragment = fragment;

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class LibraryBuilder {
6363
Map.identity();
6464

6565
/// Top fragments, in the same order as in AST.
66-
final List<FragmentImpl> _topFragments = [];
66+
final Map<LibraryFragmentImpl, List<FragmentImpl>> _topFragments = {};
6767

6868
/// Key: a parent fragment, e.g. [ClassFragmentImpl].
6969
/// Value: fragments of its direct children.
@@ -142,8 +142,9 @@ class LibraryBuilder {
142142
(_parentChildFragments[parent] ??= []).add(child);
143143
}
144144

145-
void addTopFragment(FragmentImpl fragment) {
146-
_topFragments.add(fragment);
145+
void addTopFragment(LibraryFragmentImpl parent, FragmentImpl fragment) {
146+
fragment.enclosingElement3 = parent;
147+
(_topFragments[parent] ??= []).add(fragment);
147148
}
148149

149150
void buildClassSyntheticConstructors() {

0 commit comments

Comments
 (0)