@@ -2415,8 +2415,6 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
2415
2415
return _allOriginalModelElementNames;
2416
2416
}
2417
2417
2418
- List <Class > get allClasses => _allClasses;
2419
-
2420
2418
@override
2421
2419
CharacterLocation get characterLocation {
2422
2420
if (element.nameOffset == - 1 ) {
@@ -2430,19 +2428,30 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
2430
2428
CompilationUnitElement get compilationUnitElement => (element as LibraryElement ).definingCompilationUnit;
2431
2429
2432
2430
@override
2433
- Iterable <Class > get classes {
2434
- return _allClasses
2435
- .where ((c) => ! c.isErrorOrException)
2436
- .toList (growable: false );
2437
- }
2431
+ Iterable <Class > get classes => allClasses.where ((c) => ! c.isErrorOrException);
2438
2432
2439
2433
@override
2440
2434
Iterable <Extension > get extensions {
2441
- if (_extensions != null ) return _extensions;
2442
- _extensions = _libraryElement.definingCompilationUnit.extensions
2443
- .map ((e) => ModelElement .from (e, this , packageGraph) as Extension )
2444
- .toList (growable: false )
2445
- ..sort (byName);
2435
+ if (_extensions == null ) {
2436
+ // De-dupe extensions coming from multiple exported libraries at once.
2437
+ Set <ExtensionElement > extensionElements = Set ();
2438
+ extensionElements.addAll (_libraryElement.definingCompilationUnit.extensions);
2439
+ for (CompilationUnitElement cu in _libraryElement.parts) {
2440
+ extensionElements.addAll (cu.extensions);
2441
+ }
2442
+ for (LibraryElement le in _libraryElement.exportedLibraries) {
2443
+ extensionElements.addAll (le.definingCompilationUnit.extensions
2444
+ .where ((t) => _exportedNamespace.definedNames.values.contains (t.name)));
2445
+ }
2446
+
2447
+ extensionElements.addAll (_exportedNamespace.definedNames.values
2448
+ .whereType <ExtensionElement >());
2449
+
2450
+ _extensions = extensionElements
2451
+ .map ((e) => ModelElement .from (e, this , packageGraph) as Extension )
2452
+ .toList (growable: false )
2453
+ ..sort (byName);
2454
+ }
2446
2455
return _extensions;
2447
2456
}
2448
2457
@@ -2628,10 +2637,10 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
2628
2637
2629
2638
@override
2630
2639
List <Class > get exceptions {
2631
- return _allClasses
2632
- .where ((c) => c.isErrorOrException)
2633
- . toList (growable : false )
2634
- .. sort (byName) ;
2640
+ if (_exceptions == null ) {
2641
+ _exceptions = allClasses .where ((c) => c.isErrorOrException). toList (growable : false );
2642
+ }
2643
+ return _exceptions ;
2635
2644
}
2636
2645
2637
2646
@override
@@ -2752,24 +2761,23 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
2752
2761
return _typedefs;
2753
2762
}
2754
2763
2755
- List <Class > get _allClasses {
2764
+ List <Class > get allClasses {
2756
2765
if (_classes != null ) return _classes;
2757
2766
2767
+ // De-dupe classes coming from multiple exported libraries at once.
2758
2768
Set <ClassElement > types = Set ();
2759
2769
types.addAll (_libraryElement.definingCompilationUnit.types);
2760
2770
for (CompilationUnitElement cu in _libraryElement.parts) {
2761
2771
types.addAll (cu.types);
2762
2772
}
2763
2773
for (LibraryElement le in _libraryElement.exportedLibraries) {
2764
2774
types.addAll (le.definingCompilationUnit.types
2765
- .where ((t) => _exportedNamespace.definedNames.values.contains (t.name))
2766
- .toList ());
2775
+ .where ((t) => _exportedNamespace.definedNames.values.contains (t.name)));
2767
2776
}
2768
2777
2769
2778
types.addAll (_exportedNamespace.definedNames.values
2770
- .where ((e) => e is ClassElement && ! e.isMixin)
2771
- .cast <ClassElement >()
2772
- .where ((element) => ! element.isEnum));
2779
+ .whereType <ClassElement >()
2780
+ .where ((e) => ! e.isMixin && ! e.isEnum));
2773
2781
2774
2782
_classes = types
2775
2783
.map ((e) => ModelElement .from (e, this , packageGraph) as Class )
@@ -2783,7 +2791,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
2783
2791
LibraryElement get _libraryElement => (element as LibraryElement );
2784
2792
2785
2793
Class getClassByName (String name) {
2786
- return _allClasses .firstWhere ((it) => it.name == name, orElse: () => null );
2794
+ return allClasses .firstWhere ((it) => it.name == name, orElse: () => null );
2787
2795
}
2788
2796
2789
2797
List <TopLevelVariable > _getVariables () {
@@ -5026,7 +5034,7 @@ class PackageGraph {
5026
5034
documentedPackages.toList ().forEach ((package) {
5027
5035
package._libraries.sort ((a, b) => compareNatural (a.name, b.name));
5028
5036
package._libraries.forEach ((library) {
5029
- library._allClasses .forEach (_addToImplementors);
5037
+ library.allClasses .forEach (_addToImplementors);
5030
5038
});
5031
5039
});
5032
5040
_implementors.values.forEach ((l) => l.sort ());
0 commit comments