Skip to content

Commit 10bc588

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Unify manifest item hierarchy and rename member items.
Refactor the fine-grained manifest model to reduce duplication and make member representations consistent across top-level and instance scopes. Key changes - Replace many ad-hoc item types with shared bases: - Introduce `ExecutableItem` and `VariableItem`. - Add concrete items: `ConstructorItem`, `MethodItem`, `GetterItem`, `SetterItem`, `FieldItem`. - Make `TopLevelFunctionItem` extend `ExecutableItem` and `TopLevelVariableItem` extend `VariableItem`. - Remove `TopLevelItem` and the previous `InstanceItem{Field,Getter,Setter,Method}Item`, `InterfaceItemConstructorItem`, `TopLevel{Getter,Setter}Item`. - Normalize maps and APIs: - `LibraryManifest.declaredGetters/declaredSetters` now map to `GetterItem`/`SetterItem`. - `exportedIds` aggregates over `Map<LookupName, ManifestItem>` instead of `TopLevelItem`. - Matching logic simplifies to presence checks; type guards on the old item classes are no longer needed. - Unify function typing: - Getters and setters now carry a full `functionType` (setters previously stored only a `valueType`; getters now print return types via `functionType.returnType`). - Update printers and ID lookup to the new structure. - Bump persisted data format: `DATA_VERSION 544 → 545`. Why - Consolidates parallel class hierarchies into a single, coherent model. - Eliminates redundant code paths and special-case handling between top-level and instance members. - Makes future additions (e.g., executable flags) consistent by moving shared properties into `ExecutableItem`. - Keeps item IDs stable when semantics don’t change while simplifying the matching and serialization logic. Change-Id: Ie9c097eae71a2abea874468a740050ae4fe3a570 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/448760 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent f14f177 commit 10bc588

File tree

6 files changed

+458
-639
lines changed

6 files changed

+458
-639
lines changed

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ testFineAfterLibraryAnalyzerHook;
106106
// TODO(scheglov): Clean up the list of implicitly analyzed files.
107107
class AnalysisDriver {
108108
/// The version of data format, should be incremented on every format change.
109-
static const int DATA_VERSION = 544;
109+
static const int DATA_VERSION = 545;
110110

111111
/// The number of exception contexts allowed to write. Once this field is
112112
/// zero, we stop writing any new exception contexts in this process.

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ class LibraryManifest {
3030
final Map<LookupName, ExtensionTypeItem> declaredExtensionTypes;
3131
final Map<LookupName, MixinItem> declaredMixins;
3232
final Map<LookupName, TypeAliasItem> declaredTypeAliases;
33-
final Map<LookupName, TopLevelGetterItem> declaredGetters;
34-
final Map<LookupName, TopLevelSetterItem> declaredSetters;
33+
final Map<LookupName, GetterItem> declaredGetters;
34+
final Map<LookupName, SetterItem> declaredSetters;
3535
final Map<LookupName, TopLevelFunctionItem> declaredFunctions;
3636
final Map<LookupName, TopLevelVariableItem> declaredVariables;
3737

@@ -75,10 +75,10 @@ class LibraryManifest {
7575
readValue: () => TypeAliasItem.read(reader),
7676
),
7777
declaredGetters: reader.readLookupNameMap(
78-
readValue: () => TopLevelGetterItem.read(reader),
78+
readValue: () => GetterItem.read(reader),
7979
),
8080
declaredSetters: reader.readLookupNameMap(
81-
readValue: () => TopLevelSetterItem.read(reader),
81+
readValue: () => SetterItem.read(reader),
8282
),
8383
declaredFunctions: reader.readLookupNameMap(
8484
readValue: () => TopLevelFunctionItem.read(reader),
@@ -93,7 +93,7 @@ class LibraryManifest {
9393
Map<LookupName, ManifestItemId> get exportedIds {
9494
return Map.fromEntries([
9595
...reExportMap.entries,
96-
...<Map<LookupName, TopLevelItem>>[
96+
...<Map<LookupName, ManifestItem>>[
9797
declaredClasses,
9898
declaredEnums,
9999
declaredExtensions,
@@ -291,7 +291,7 @@ class LibraryManifestBuilder {
291291

292292
void _addEnum({
293293
required EncodeContext encodingContext,
294-
required Map<LookupName, TopLevelItem> newItems,
294+
required Map<LookupName, EnumItem> newItems,
295295
required EnumElementImpl element,
296296
required LookupName lookupName,
297297
}) {
@@ -371,7 +371,7 @@ class LibraryManifestBuilder {
371371

372372
void _addExtensionType({
373373
required EncodeContext encodingContext,
374-
required Map<LookupName, TopLevelItem> newItems,
374+
required Map<LookupName, ExtensionTypeItem> newItems,
375375
required ExtensionTypeElementImpl element,
376376
required LookupName lookupName,
377377
}) {
@@ -408,7 +408,7 @@ class LibraryManifestBuilder {
408408
}
409409

410410
var item = _getOrBuildElementItem(element, () {
411-
return InstanceItemFieldItem.fromElement(
411+
return FieldItem.fromElement(
412412
id: ManifestItemId.generate(),
413413
context: encodingContext,
414414
element: element,
@@ -429,7 +429,7 @@ class LibraryManifestBuilder {
429429
}
430430

431431
var item = _getOrBuildElementItem(element, () {
432-
return InstanceItemGetterItem.fromElement(
432+
return GetterItem.fromElement(
433433
id: ManifestItemId.generate(),
434434
context: encodingContext,
435435
element: element,
@@ -488,7 +488,7 @@ class LibraryManifestBuilder {
488488
}
489489

490490
var item = _getOrBuildElementItem(element, () {
491-
return InstanceItemMethodItem.fromElement(
491+
return MethodItem.fromElement(
492492
id: ManifestItemId.generate(),
493493
context: encodingContext,
494494
element: element,
@@ -509,7 +509,7 @@ class LibraryManifestBuilder {
509509
}
510510

511511
var item = _getOrBuildElementItem(element, () {
512-
return InstanceItemSetterItem.fromElement(
512+
return SetterItem.fromElement(
513513
id: ManifestItemId.generate(),
514514
context: encodingContext,
515515
element: element,
@@ -530,7 +530,7 @@ class LibraryManifestBuilder {
530530
}
531531

532532
var item = _getOrBuildElementItem(element, () {
533-
return InterfaceItemConstructorItem.fromElement(
533+
return ConstructorItem.fromElement(
534534
id: ManifestItemId.generate(),
535535
context: encodingContext,
536536
element: element,
@@ -657,12 +657,12 @@ class LibraryManifestBuilder {
657657

658658
void _addTopLevelGetter({
659659
required EncodeContext encodingContext,
660-
required Map<LookupName, TopLevelGetterItem> newItems,
660+
required Map<LookupName, GetterItem> newItems,
661661
required GetterElementImpl element,
662662
required LookupName lookupName,
663663
}) {
664664
var item = _getOrBuildElementItem(element, () {
665-
return TopLevelGetterItem.fromElement(
665+
return GetterItem.fromElement(
666666
id: ManifestItemId.generate(),
667667
context: encodingContext,
668668
element: element,
@@ -673,12 +673,12 @@ class LibraryManifestBuilder {
673673

674674
void _addTopLevelSetter({
675675
required EncodeContext encodingContext,
676-
required Map<LookupName, TopLevelSetterItem> newItems,
676+
required Map<LookupName, SetterItem> newItems,
677677
required SetterElementImpl element,
678678
required LookupName lookupName,
679679
}) {
680680
var item = _getOrBuildElementItem(element, () {
681-
return TopLevelSetterItem.fromElement(
681+
return SetterItem.fromElement(
682682
id: ManifestItemId.generate(),
683683
context: encodingContext,
684684
element: element,
@@ -756,8 +756,8 @@ class LibraryManifestBuilder {
756756
var newExtensionTypeItems = <LookupName, ExtensionTypeItem>{};
757757
var newMixinItems = <LookupName, MixinItem>{};
758758
var newTypeAliasItems = <LookupName, TypeAliasItem>{};
759-
var newTopLevelGetters = <LookupName, TopLevelGetterItem>{};
760-
var newTopLevelSetters = <LookupName, TopLevelSetterItem>{};
759+
var newTopLevelGetters = <LookupName, GetterItem>{};
760+
var newTopLevelSetters = <LookupName, SetterItem>{};
761761
var newTopLevelFunctions = <LookupName, TopLevelFunctionItem>{};
762762
var newTopLevelVariables = <LookupName, TopLevelVariableItem>{};
763763

@@ -1446,7 +1446,7 @@ class _LibraryMatch {
14461446
}
14471447

14481448
var item = instanceItem.declaredGetters[lookupName];
1449-
if (item is! InstanceItemGetterItem) {
1449+
if (item == null) {
14501450
return false;
14511451
}
14521452

@@ -1470,7 +1470,7 @@ class _LibraryMatch {
14701470
}
14711471

14721472
var item = instanceItem.declaredMethods[lookupName];
1473-
if (item is! InstanceItemMethodItem) {
1473+
if (item == null) {
14741474
return false;
14751475
}
14761476

@@ -1494,7 +1494,7 @@ class _LibraryMatch {
14941494
}
14951495

14961496
var item = instanceItem.declaredSetters[lookupName];
1497-
if (item is! InstanceItemSetterItem) {
1497+
if (item == null) {
14981498
return false;
14991499
}
15001500

@@ -1518,7 +1518,7 @@ class _LibraryMatch {
15181518
}
15191519

15201520
var item = interfaceItem.declaredConstructors[lookupName];
1521-
if (item is! InterfaceItemConstructorItem) {
1521+
if (item == null) {
15221522
return false;
15231523
}
15241524

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ extension LinkedElementFactoryExtension on LinkedElementFactory {
361361

362362
// SAFETY: if we can reference the element, it has a name.
363363
var topLevelName = topLevelElement.lookupName!.asLookupName;
364-
TopLevelItem? topLevelItem;
364+
ManifestItem? topLevelItem;
365365
switch (topLevelElement) {
366366
case ClassElement():
367367
topLevelItem = manifest.declaredClasses[topLevelName];

0 commit comments

Comments
 (0)