Skip to content

Commit 13377d1

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Use separate top-level declaredClasses, etc.
Change-Id: Id7a675f7c641acb1839aa26c65099eeffff7a955 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/429462 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 0ccd963 commit 13377d1

File tree

6 files changed

+1663
-1538
lines changed

6 files changed

+1663
-1538
lines changed

pkg/analyzer/lib/src/fine/library_manifest.dart

Lines changed: 84 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -23,41 +23,60 @@ class LibraryManifest {
2323
/// This does not include names that are declared in this library.
2424
final Map<LookupName, ManifestItemId> reExportMap;
2525

26-
/// The manifests of the top-level items.
27-
final Map<LookupName, TopLevelItem> items;
28-
29-
LibraryManifest({required this.reExportMap, required this.items});
26+
final Map<LookupName, ClassItem> declaredClasses;
27+
final Map<LookupName, MixinItem> declaredMixins;
28+
final Map<LookupName, TopLevelGetterItem> declaredGetters;
29+
final Map<LookupName, TopLevelSetterItem> declaredSetters;
30+
final Map<LookupName, TopLevelFunctionItem> declaredFunctions;
31+
32+
LibraryManifest({
33+
required this.reExportMap,
34+
required this.declaredClasses,
35+
required this.declaredMixins,
36+
required this.declaredGetters,
37+
required this.declaredSetters,
38+
required this.declaredFunctions,
39+
});
3040

3141
factory LibraryManifest.read(SummaryDataReader reader) {
3242
return LibraryManifest(
33-
reExportMap: reader.readMap(
34-
readKey: () => LookupName.read(reader),
35-
readValue: () => ManifestItemId.read(reader),
43+
reExportMap: reader.readLookupNameToIdMap(),
44+
declaredClasses: reader.readLookupNameMap(
45+
readValue: () => ClassItem.read(reader),
46+
),
47+
declaredMixins: reader.readLookupNameMap(
48+
readValue: () => MixinItem.read(reader),
49+
),
50+
declaredGetters: reader.readLookupNameMap(
51+
readValue: () => TopLevelGetterItem.read(reader),
3652
),
37-
items: reader.readMap(
38-
readKey: () => LookupName.read(reader),
39-
readValue: () => TopLevelItem.read(reader),
53+
declaredSetters: reader.readLookupNameMap(
54+
readValue: () => TopLevelSetterItem.read(reader),
55+
),
56+
declaredFunctions: reader.readLookupNameMap(
57+
readValue: () => TopLevelFunctionItem.read(reader),
4058
),
4159
);
4260
}
4361

4462
/// Returns the ID of a top-level element either declared or re-exported,
4563
/// or `null` if there is no such element.
4664
ManifestItemId? getExportedId(LookupName name) {
47-
return items[name]?.id ?? reExportMap[name];
65+
return declaredClasses[name]?.id ??
66+
declaredMixins[name]?.id ??
67+
declaredGetters[name]?.id ??
68+
declaredSetters[name]?.id ??
69+
declaredFunctions[name]?.id ??
70+
reExportMap[name];
4871
}
4972

5073
void write(BufferedSink sink) {
51-
sink.writeMap(
52-
reExportMap,
53-
writeKey: (lookupName) => lookupName.write(sink),
54-
writeValue: (id) => id.write(sink),
55-
);
56-
sink.writeMap(
57-
items,
58-
writeKey: (lookupName) => lookupName.write(sink),
59-
writeValue: (item) => item.write(sink),
60-
);
74+
reExportMap.write(sink);
75+
declaredClasses.write(sink);
76+
declaredMixins.write(sink);
77+
declaredGetters.write(sink);
78+
declaredSetters.write(sink);
79+
declaredFunctions.write(sink);
6180
}
6281
}
6382

@@ -119,7 +138,7 @@ class LibraryManifestBuilder {
119138

120139
void _addClass({
121140
required EncodeContext encodingContext,
122-
required Map<LookupName, TopLevelItem> newItems,
141+
required Map<LookupName, ClassItem> newItems,
123142
required ClassElementImpl2 element,
124143
required LookupName lookupName,
125144
}) {
@@ -374,7 +393,7 @@ class LibraryManifestBuilder {
374393

375394
void _addMixin({
376395
required EncodeContext encodingContext,
377-
required Map<LookupName, TopLevelItem> newItems,
396+
required Map<LookupName, MixinItem> newItems,
378397
required MixinElementImpl2 element,
379398
required LookupName lookupName,
380399
}) {
@@ -430,11 +449,8 @@ class LibraryManifestBuilder {
430449
// If not, then look into new manifest.
431450
if (id == null) {
432451
var newManifest = newManifests[elementLibraryUri];
433-
// Maybe declared in this library.
434-
id ??= newManifest?.items[name]?.id;
435-
// Maybe exported from this library.
452+
id ??= newManifest?.getExportedId(name);
436453
// TODO(scheglov): repeat for re-re-exports
437-
id ??= newManifest?.reExportMap[name];
438454
}
439455

440456
if (id == null) {
@@ -448,7 +464,7 @@ class LibraryManifestBuilder {
448464

449465
void _addTopLevelFunction({
450466
required EncodeContext encodingContext,
451-
required Map<LookupName, TopLevelItem> newItems,
467+
required Map<LookupName, TopLevelFunctionItem> newItems,
452468
required TopLevelFunctionElementImpl element,
453469
required LookupName lookupName,
454470
}) {
@@ -464,7 +480,7 @@ class LibraryManifestBuilder {
464480

465481
void _addTopLevelGetter({
466482
required EncodeContext encodingContext,
467-
required Map<LookupName, TopLevelItem> newItems,
483+
required Map<LookupName, TopLevelGetterItem> newItems,
468484
required GetterElementImpl element,
469485
required LookupName lookupName,
470486
}) {
@@ -480,7 +496,7 @@ class LibraryManifestBuilder {
480496

481497
void _addTopLevelSetter({
482498
required EncodeContext encodingContext,
483-
required Map<LookupName, TopLevelItem> newItems,
499+
required Map<LookupName, TopLevelSetterItem> newItems,
484500
required SetterElementImpl element,
485501
required LookupName lookupName,
486502
}) {
@@ -525,7 +541,12 @@ class LibraryManifestBuilder {
525541

526542
for (var libraryElement in libraryElements) {
527543
var libraryUri = libraryElement.uri;
528-
var newItems = <LookupName, TopLevelItem>{};
544+
var newClassItems = <LookupName, ClassItem>{};
545+
var newMixinItems = <LookupName, MixinItem>{};
546+
var newTopLevelGetters = <LookupName, TopLevelGetterItem>{};
547+
var newTopLevelSetters = <LookupName, TopLevelSetterItem>{};
548+
var newTopLevelFunctions = <LookupName, TopLevelFunctionItem>{};
549+
529550
for (var element in libraryElement.children2) {
530551
var lookupName = element.lookupName?.asLookupName;
531552
if (lookupName == null) {
@@ -536,43 +557,50 @@ class LibraryManifestBuilder {
536557
case ClassElementImpl2():
537558
_addClass(
538559
encodingContext: encodingContext,
539-
newItems: newItems,
560+
newItems: newClassItems,
540561
element: element,
541562
lookupName: lookupName,
542563
);
543564
case GetterElementImpl():
544565
_addTopLevelGetter(
545566
encodingContext: encodingContext,
546-
newItems: newItems,
567+
newItems: newTopLevelGetters,
547568
element: element,
548569
lookupName: lookupName,
549570
);
550571
case MixinElementImpl2():
551572
_addMixin(
552573
encodingContext: encodingContext,
553-
newItems: newItems,
574+
newItems: newMixinItems,
554575
element: element,
555576
lookupName: lookupName,
556577
);
557578
case SetterElementImpl():
558579
_addTopLevelSetter(
559580
encodingContext: encodingContext,
560-
newItems: newItems,
581+
newItems: newTopLevelSetters,
561582
element: element,
562583
lookupName: lookupName,
563584
);
564585
case TopLevelFunctionElementImpl():
565586
_addTopLevelFunction(
566587
encodingContext: encodingContext,
567-
newItems: newItems,
588+
newItems: newTopLevelFunctions,
568589
element: element,
569590
lookupName: lookupName,
570591
);
571592
// TODO(scheglov): add remaining elements
572593
}
573594
}
574595

575-
var newManifest = LibraryManifest(reExportMap: {}, items: newItems);
596+
var newManifest = LibraryManifest(
597+
reExportMap: {},
598+
declaredClasses: newClassItems,
599+
declaredMixins: newMixinItems,
600+
declaredGetters: newTopLevelGetters,
601+
declaredSetters: newTopLevelSetters,
602+
declaredFunctions: newTopLevelFunctions,
603+
);
576604
libraryElement.manifest = newManifest;
577605
newManifests[libraryUri] = newManifest;
578606
}
@@ -714,7 +742,15 @@ class LibraryManifestBuilder {
714742

715743
/// Returns the manifest from [inputManifests], empty if absent.
716744
LibraryManifest _getInputManifest(Uri uri) {
717-
return inputManifests[uri] ?? LibraryManifest(reExportMap: {}, items: {});
745+
return inputManifests[uri] ??
746+
LibraryManifest(
747+
reExportMap: {},
748+
declaredClasses: {},
749+
declaredMixins: {},
750+
declaredGetters: {},
751+
declaredSetters: {},
752+
declaredFunctions: {},
753+
);
718754
}
719755

720756
ManifestItemId _getInterfaceElementMemberId(ExecutableElementImpl2 element) {
@@ -861,8 +897,8 @@ class _LibraryMatch {
861897
required LookupName? name,
862898
required ClassElementImpl2 element,
863899
}) {
864-
var item = manifest.items[name];
865-
if (item is! ClassItem) {
900+
var item = manifest.declaredClasses[name];
901+
if (item == null) {
866902
return false;
867903
}
868904

@@ -1074,8 +1110,8 @@ class _LibraryMatch {
10741110
required LookupName? name,
10751111
required MixinElementImpl2 element,
10761112
}) {
1077-
var item = manifest.items[name];
1078-
if (item is! MixinItem) {
1113+
var item = manifest.declaredMixins[name];
1114+
if (item == null) {
10791115
return false;
10801116
}
10811117

@@ -1099,8 +1135,8 @@ class _LibraryMatch {
10991135
required LookupName? name,
11001136
required TopLevelFunctionElementImpl element,
11011137
}) {
1102-
var item = manifest.items[name];
1103-
if (item is! TopLevelFunctionItem) {
1138+
var item = manifest.declaredFunctions[name];
1139+
if (item == null) {
11041140
return false;
11051141
}
11061142

@@ -1117,8 +1153,8 @@ class _LibraryMatch {
11171153
required LookupName? name,
11181154
required GetterElementImpl element,
11191155
}) {
1120-
var item = manifest.items[name];
1121-
if (item is! TopLevelGetterItem) {
1156+
var item = manifest.declaredGetters[name];
1157+
if (item == null) {
11221158
return false;
11231159
}
11241160

@@ -1135,8 +1171,8 @@ class _LibraryMatch {
11351171
required LookupName? name,
11361172
required SetterElementImpl element,
11371173
}) {
1138-
var item = manifest.items[name];
1139-
if (item is! TopLevelSetterItem) {
1174+
var item = manifest.declaredSetters[name];
1175+
if (item == null) {
11401176
return false;
11411177
}
11421178

pkg/analyzer/lib/src/fine/manifest_context.dart

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,19 @@ extension LinkedElementFactoryExtension on LinkedElementFactory {
291291

292292
// SAFETY: if we can reference the element, it has a name.
293293
var topLevelName = topLevelElement.lookupName!.asLookupName;
294-
var topLevelItem = manifest.items[topLevelName];
294+
TopLevelItem? topLevelItem;
295+
switch (topLevelElement) {
296+
case ClassElement():
297+
topLevelItem = manifest.declaredClasses[topLevelName];
298+
case MixinElement():
299+
topLevelItem = manifest.declaredMixins[topLevelName];
300+
case GetterElement():
301+
return manifest.declaredGetters[topLevelName]?.id;
302+
case SetterElement():
303+
return manifest.declaredSetters[topLevelName]?.id;
304+
case TopLevelFunctionElement():
305+
return manifest.declaredFunctions[topLevelName]?.id;
306+
}
295307

296308
// TODO(scheglov): remove it after supporting all elements
297309
if (topLevelItem == null) {

0 commit comments

Comments
 (0)