Skip to content

Commit 1108caf

Browse files
committed
Fine. Remove ExportItem.
It was a hack, which started now to get in the way. Change-Id: I1fa606f5f51dcfeb836ca0bb3c453c91189e2d0b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/420502 Reviewed-by: Paul Berry <[email protected]>
1 parent 1600519 commit 1108caf

File tree

5 files changed

+75
-67
lines changed

5 files changed

+75
-67
lines changed

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

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,43 @@ import 'package:collection/collection.dart';
1919

2020
/// The manifest of a single library.
2121
class LibraryManifest {
22-
/// The URI of the library, mostly for debugging.
23-
final Uri uri;
22+
/// The names that are re-exported by this library.
23+
/// This does not include names that are declared in this library.
24+
final Map<LookupName, ManifestItemId> reExportMap;
2425

2526
/// The manifests of the top-level items.
2627
final Map<LookupName, TopLevelItem> items;
2728

2829
LibraryManifest({
29-
required this.uri,
30+
required this.reExportMap,
3031
required this.items,
3132
});
3233

3334
factory LibraryManifest.read(SummaryDataReader reader) {
3435
return LibraryManifest(
35-
uri: reader.readUri(),
36+
reExportMap: reader.readMap(
37+
readKey: () => LookupName.read(reader),
38+
readValue: () => ManifestItemId.read(reader),
39+
),
3640
items: reader.readMap(
3741
readKey: () => LookupName.read(reader),
3842
readValue: () => TopLevelItem.read(reader),
3943
),
4044
);
4145
}
4246

47+
/// Returns the ID of a top-level element either declared or re-exported,
48+
/// or `null` if there is no such element.
49+
ManifestItemId? getExportedId(LookupName name) {
50+
return items[name]?.id ?? reExportMap[name];
51+
}
52+
4353
void write(BufferedSink sink) {
44-
sink.writeUri(uri);
54+
sink.writeMap(
55+
reExportMap,
56+
writeKey: (lookupName) => lookupName.write(sink),
57+
writeValue: (id) => id.write(sink),
58+
);
4559
sink.writeMap(
4660
items,
4761
writeKey: (lookupName) => lookupName.write(sink),
@@ -296,23 +310,34 @@ class LibraryManifestBuilder {
296310
continue;
297311
}
298312

313+
// Skip elements declared in this library.
314+
if (elementLibraryUri == libraryUri) {
315+
continue;
316+
}
317+
299318
// Skip if the element is declared in this library.
300319
if (element.library2 == libraryElement) {
301320
continue;
302321
}
303322

304-
var id = elementFactory.getElementId(element) ??
305-
newManifests[elementLibraryUri]?.items[name]?.id;
323+
// Maybe exported from a library outside the current cycle.
324+
var id = elementFactory.getElementId(element);
325+
326+
// If not, then look into new manifest.
327+
if (id == null) {
328+
var newManifest = newManifests[elementLibraryUri];
329+
// Maybe declared in this library.
330+
id ??= newManifest?.items[name]?.id;
331+
// Maybe exported from this library.
332+
// TODO(scheglov): repeat for re-re-exports
333+
id ??= newManifest?.reExportMap[name];
334+
}
335+
306336
if (id == null) {
307337
// TODO(scheglov): complete
308338
continue;
309339
}
310-
manifest.items[name] = ExportItem(
311-
id: id,
312-
// TODO(scheglov): Exports should not be items at all.
313-
// We should have a separate map of names to IDs.
314-
metadata: ManifestMetadata(annotations: []),
315-
);
340+
manifest.reExportMap[name] = id;
316341
}
317342
}
318343
}
@@ -441,7 +466,7 @@ class LibraryManifestBuilder {
441466
}
442467

443468
var newManifest = LibraryManifest(
444-
uri: libraryUri,
469+
reExportMap: {},
445470
items: newItems,
446471
);
447472
libraryElement.manifest = newManifest;
@@ -517,7 +542,7 @@ class LibraryManifestBuilder {
517542

518543
/// Returns the manifest from [inputManifests], empty if absent.
519544
LibraryManifest _getInputManifest(Uri uri) {
520-
return inputManifests[uri] ?? LibraryManifest(uri: uri, items: {});
545+
return inputManifests[uri] ?? LibraryManifest(reExportMap: {}, items: {});
521546
}
522547

523548
/// Returns either the existing item from [itemMap], or builds a new one.

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

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -84,26 +84,6 @@ class ClassItem extends InterfaceItem {
8484
}
8585
}
8686

87-
class ExportItem extends TopLevelItem {
88-
ExportItem({
89-
required super.id,
90-
required super.metadata,
91-
});
92-
93-
factory ExportItem.read(SummaryDataReader reader) {
94-
return ExportItem(
95-
id: ManifestItemId.read(reader),
96-
metadata: ManifestMetadata.read(reader),
97-
);
98-
}
99-
100-
@override
101-
void write(BufferedSink sink) {
102-
sink.writeEnum(_ManifestItemKind.export_);
103-
super.write(sink);
104-
}
105-
}
106-
10787
/// The item for [InstanceElementImpl2].
10888
sealed class InstanceItem extends TopLevelItem {
10989
final List<ManifestTypeParameter> typeParameters;
@@ -612,8 +592,6 @@ sealed class TopLevelItem extends AnnotatedItem {
612592
switch (kind) {
613593
case _ManifestItemKind.class_:
614594
return ClassItem.read(reader);
615-
case _ManifestItemKind.export_:
616-
return ExportItem.read(reader);
617595
case _ManifestItemKind.topLevelFunction:
618596
return TopLevelFunctionItem.read(reader);
619597
case _ManifestItemKind.topLevelGetter:
@@ -680,7 +658,6 @@ class TopLevelSetterItem extends TopLevelItem {
680658

681659
enum _ManifestItemKind {
682660
class_,
683-
export_,
684661
topLevelFunction,
685662
topLevelGetter,
686663
topLevelSetter,

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ class BundleRequirementsManifest {
105105

106106
for (var topLevelEntry in libraryEntry.value.entries) {
107107
var name = topLevelEntry.key;
108-
var item = libraryManifest.items[name];
109-
if (topLevelEntry.value != item?.id) {
108+
var actualId = libraryManifest.getExportedId(name);
109+
if (topLevelEntry.value != actualId) {
110110
return TopLevelIdMismatch(
111111
libraryUri: libraryUri,
112112
name: name,
113113
expectedId: topLevelEntry.value,
114-
actualId: item?.id,
114+
actualId: actualId,
115115
);
116116
}
117117
}
@@ -216,7 +216,7 @@ class BundleRequirementsManifest {
216216
var uri = importedLibrary.uri;
217217
var nameToId = topLevels[uri] ??= {};
218218
var name = nameStr.asLookupName;
219-
nameToId[name] = manifest.items[name]?.id;
219+
nameToId[name] = manifest.getExportedId(name);
220220
}
221221
}
222222

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6609,7 +6609,7 @@ export ':';
66096609
requirements
66106610
[operation] linkLibraryCycle
66116611
package:test/test.dart
6612-
manifest
6612+
reExportMap
66136613
a: #M0
66146614
requirements
66156615
exportRequirements
@@ -6671,7 +6671,7 @@ export 'a.dart';
66716671
requirements
66726672
[operation] linkLibraryCycle
66736673
package:test/test.dart
6674-
manifest
6674+
reExportMap
66756675
a: #M0
66766676
requirements
66776677
exportRequirements
@@ -6711,7 +6711,7 @@ final b = 0;
67116711
actualId: #M1
67126712
[operation] linkLibraryCycle
67136713
package:test/test.dart
6714-
manifest
6714+
reExportMap
67156715
a: #M0
67166716
b: #M1
67176717
requirements
@@ -6752,7 +6752,7 @@ export 'a.dart' hide b;
67526752
requirements
67536753
[operation] linkLibraryCycle
67546754
package:test/test.dart
6755-
manifest
6755+
reExportMap
67566756
a: #M0
67576757
requirements
67586758
exportRequirements
@@ -6818,7 +6818,7 @@ export 'a.dart' hide c;
68186818
requirements
68196819
[operation] linkLibraryCycle
68206820
package:test/test.dart
6821-
manifest
6821+
reExportMap
68226822
a: #M0
68236823
requirements
68246824
exportRequirements
@@ -6860,7 +6860,7 @@ final b = 0;
68606860
actualId: #M1
68616861
[operation] linkLibraryCycle
68626862
package:test/test.dart
6863-
manifest
6863+
reExportMap
68646864
a: #M0
68656865
b: #M1
68666866
requirements
@@ -6903,7 +6903,7 @@ export 'a.dart' show a;
69036903
requirements
69046904
[operation] linkLibraryCycle
69056905
package:test/test.dart
6906-
manifest
6906+
reExportMap
69076907
a: #M0
69086908
requirements
69096909
exportRequirements
@@ -6969,7 +6969,7 @@ export 'a.dart' show a, b;
69696969
requirements
69706970
[operation] linkLibraryCycle
69716971
package:test/test.dart
6972-
manifest
6972+
reExportMap
69736973
a: #M0
69746974
requirements
69756975
exportRequirements
@@ -7011,7 +7011,7 @@ final b = 0;
70117011
actualId: #M1
70127012
[operation] linkLibraryCycle
70137013
package:test/test.dart
7014-
manifest
7014+
reExportMap
70157015
a: #M0
70167016
b: #M1
70177017
requirements
@@ -7054,7 +7054,7 @@ export 'a.dart' show a, b hide c;
70547054
requirements
70557055
[operation] linkLibraryCycle
70567056
package:test/test.dart
7057-
manifest
7057+
reExportMap
70587058
a: #M0
70597059
requirements
70607060
exportRequirements
@@ -7097,7 +7097,7 @@ final b = 0;
70977097
actualId: #M1
70987098
[operation] linkLibraryCycle
70997099
package:test/test.dart
7100-
manifest
7100+
reExportMap
71017101
a: #M0
71027102
b: #M1
71037103
requirements
@@ -7141,7 +7141,7 @@ export 'a.dart';
71417141
requirements
71427142
[operation] linkLibraryCycle
71437143
package:test/test.dart
7144-
manifest
7144+
reExportMap
71457145
a: #M0
71467146
requirements
71477147
exportRequirements
@@ -7209,7 +7209,7 @@ export 'a.dart';
72097209
requirements
72107210
[operation] linkLibraryCycle
72117211
package:test/test.dart
7212-
manifest
7212+
reExportMap
72137213
a: #M0
72147214
b: #M1
72157215
requirements
@@ -7246,7 +7246,7 @@ final a = 0;
72467246
required: 2
72477247
[operation] linkLibraryCycle
72487248
package:test/test.dart
7249-
manifest
7249+
reExportMap
72507250
a: #M0
72517251
requirements
72527252
exportRequirements
@@ -7287,7 +7287,7 @@ export 'a.dart' show a;
72877287
requirements
72887288
[operation] linkLibraryCycle
72897289
package:test/test.dart
7290-
manifest
7290+
reExportMap
72917291
a: #M0
72927292
requirements
72937293
exportRequirements
@@ -7355,7 +7355,7 @@ export 'a.dart';
73557355
requirements
73567356
[operation] linkLibraryCycle
73577357
package:test/test.dart
7358-
manifest
7358+
reExportMap
73597359
a: #M0
73607360
b: #M1
73617361
requirements
@@ -7397,7 +7397,7 @@ final c = 0;
73977397
actualId: #M2
73987398
[operation] linkLibraryCycle
73997399
package:test/test.dart
7400-
manifest
7400+
reExportMap
74017401
a: #M0
74027402
c: #M2
74037403
requirements
@@ -7447,7 +7447,7 @@ final x = a;
74477447
requirements
74487448
[operation] linkLibraryCycle
74497449
package:test/b.dart
7450-
manifest
7450+
reExportMap
74517451
a: #M0
74527452
requirements
74537453
exportRequirements
@@ -7498,7 +7498,7 @@ final a = 1.2;
74987498
actualId: #M2
74997499
[operation] linkLibraryCycle
75007500
package:test/b.dart
7501-
manifest
7501+
reExportMap
75027502
a: #M2
75037503
requirements
75047504
exportRequirements
@@ -7920,7 +7920,7 @@ final x = a;
79207920
requirements
79217921
[operation] linkLibraryCycle
79227922
package:test/b.dart
7923-
manifest
7923+
reExportMap
79247924
a: #M0
79257925
requirements
79267926
exportRequirements
@@ -7967,7 +7967,7 @@ final a = 1.2;
79677967
actualId: #M2
79687968
[operation] linkLibraryCycle
79697969
package:test/b.dart
7970-
manifest
7970+
reExportMap
79717971
a: #M2
79727972
requirements
79737973
exportRequirements

0 commit comments

Comments
 (0)