@@ -6,7 +6,6 @@ import 'dart:collection';
6
6
7
7
import 'package:analyzer/dart/element/element.dart' ;
8
8
import 'package:analyzer/dart/element/scope.dart' ;
9
- import 'package:analyzer/dart/element/type_system.dart' ;
10
9
import 'package:analyzer/source/line_info.dart' ;
11
10
// ignore: implementation_imports
12
11
import 'package:analyzer/src/generated/sdk.dart' show SdkLibrary;
@@ -58,7 +57,7 @@ class Library extends ModelElement
58
57
// Initialize the list of elements defined in this library and
59
58
// exported via its export directives.
60
59
...element.exportNamespace.definedNames.values,
61
- // TODO(jcollins-g): Consider switch to [_libraryElement .topLevelElements] .
60
+ // TODO(jcollins-g): Consider switch to `element .topLevelElements` .
62
61
..._getDefinedElements (element.definingCompilationUnit),
63
62
...element.parts
64
63
.map ((e) => e.uri)
@@ -110,21 +109,6 @@ class Library extends ModelElement
110
109
CompilationUnitElement get compilationUnitElement =>
111
110
element.definingCompilationUnit;
112
111
113
- @override
114
- Iterable <Class > get classes => allClasses.where ((c) => ! c.isErrorOrException);
115
-
116
- @override
117
- late final List <Extension > extensions = _exportedAndLocalElements
118
- .whereType <ExtensionElement >()
119
- .map ((e) => getModelFor (e, this ) as Extension )
120
- .toList (growable: false );
121
-
122
- @override
123
- late final List <ExtensionType > extensionTypes = _exportedAndLocalElements
124
- .whereType <ExtensionTypeElement >()
125
- .map ((e) => getModelFor (e, this ) as ExtensionType )
126
- .toList (growable: false );
127
-
128
112
SdkLibrary ? get _sdkLib =>
129
113
packageGraph.sdkLibrarySources[element.librarySource];
130
114
@@ -144,10 +128,6 @@ class Library extends ModelElement
144
128
return true ;
145
129
}
146
130
147
- @override
148
- Iterable <TopLevelVariable > get constants =>
149
- _variables.where ((v) => v.isConst);
150
-
151
131
/// Map of each import prefix ('import "foo" as prefix;') to the set of
152
132
/// libraries which are imported via that prefix.
153
133
Map <String , Set <Library >> get _prefixToLibrary {
@@ -203,22 +183,6 @@ class Library extends ModelElement
203
183
@override
204
184
ModelElement ? get enclosingElement => null ;
205
185
206
- @override
207
- late final List <Enum > enums = _exportedAndLocalElements
208
- .whereType <EnumElement >()
209
- .map ((e) => getModelFor (e, this ) as Enum )
210
- .toList (growable: false );
211
-
212
- @override
213
- late final List <Mixin > mixins = _exportedAndLocalElements
214
- .whereType <MixinElement >()
215
- .map ((e) => getModelFor (e, this ) as Mixin )
216
- .toList (growable: false );
217
-
218
- @override
219
- late final List <Class > exceptions =
220
- allClasses.where ((c) => c.isErrorOrException).toList (growable: false );
221
-
222
186
@override
223
187
String get filePath => '${library .dirName }/$fileName ' ;
224
188
@@ -235,12 +199,6 @@ class Library extends ModelElement
235
199
@override
236
200
String get belowSidebarPath => sidebarPath;
237
201
238
- @override
239
- late final List <ModelFunction > functions = _exportedAndLocalElements
240
- .whereType <FunctionElement >()
241
- .map ((e) => getModelFor (e, this ) as ModelFunction )
242
- .toList (growable: false );
243
-
244
202
@override
245
203
String ? get href {
246
204
if (! identical (canonicalModelElement, this )) {
@@ -328,30 +286,62 @@ class Library extends ModelElement
328
286
late final PackageMeta ? packageMeta =
329
287
packageGraph.packageMetaProvider.fromElement (element, config.sdkDir);
330
288
331
- /// All variables ("properties") except constants.
289
+ late final List <Class > classesAndExceptions =
290
+ _elementsOfType <ClassElement , Class >();
291
+
332
292
@override
333
- late final List < TopLevelVariable > properties =
334
- _variables .where ((v ) => ! v.isConst). toList (growable : false );
293
+ Iterable < Class > get classes =>
294
+ classesAndExceptions .where ((c ) => ! c.isErrorOrException );
335
295
336
296
@override
337
- late final List <Typedef > typedefs = _exportedAndLocalElements
338
- .whereType <TypeAliasElement >()
339
- .map ((e) => packageGraph.getModelFor (e, this ) as Typedef )
340
- .toList (growable: false );
297
+ Iterable <TopLevelVariable > get constants =>
298
+ _variables.where ((v) => v.isConst);
341
299
342
- TypeSystem get typeSystem => element.typeSystem;
300
+ @override
301
+ late final List <Enum > enums = _elementsOfType <EnumElement , Enum >();
343
302
344
- late final List < Class > allClasses = _exportedAndLocalElements
345
- . whereType < ClassElement >()
346
- .map ((e ) => packageGraph. getModelFor (e, this ) as Class )
303
+ @override
304
+ late final List < Class > exceptions = classesAndExceptions
305
+ .where ((c ) => c.isErrorOrException )
347
306
.toList (growable: false );
348
307
308
+ @override
309
+ late final List <Extension > extensions =
310
+ _elementsOfType <ExtensionElement , Extension >();
311
+
312
+ @override
313
+ late final List <ExtensionType > extensionTypes =
314
+ _elementsOfType <ExtensionTypeElement , ExtensionType >();
315
+
316
+ @override
317
+ late final List <ModelFunction > functions =
318
+ _elementsOfType <FunctionElement , ModelFunction >();
319
+
320
+ @override
321
+ late final List <Mixin > mixins = _elementsOfType <MixinElement , Mixin >();
322
+
323
+ @override
324
+ late final List <TopLevelVariable > properties =
325
+ _variables.where ((v) => ! v.isConst).toList (growable: false );
326
+
327
+ @override
328
+ late final List <Typedef > typedefs =
329
+ _elementsOfType <TypeAliasElement , Typedef >();
330
+
331
+ List <U > _elementsOfType <T extends Element , U extends ModelElement >() =>
332
+ _exportedAndLocalElements
333
+ .whereType <T >()
334
+ .map ((e) => packageGraph.getModelFor (e, this ) as U )
335
+ .toList (growable: false );
336
+
337
+ /// All top-level variables, including "properties" and constants.
349
338
List <TopLevelVariable > get _variables {
350
- var elements =
351
- _exportedAndLocalElements.whereType <TopLevelVariableElement >().toSet ();
352
- elements.addAll (_exportedAndLocalElements
353
- .whereType <PropertyAccessorElement >()
354
- .map ((a) => a.variable as TopLevelVariableElement ));
339
+ var elements = {
340
+ ..._exportedAndLocalElements.whereType <TopLevelVariableElement >(),
341
+ ..._exportedAndLocalElements
342
+ .whereType <PropertyAccessorElement >()
343
+ .map ((a) => a.variable as TopLevelVariableElement )
344
+ };
355
345
var variables = < TopLevelVariable > [];
356
346
for (var element in elements) {
357
347
Accessor ? getter;
@@ -378,15 +368,15 @@ class Library extends ModelElement
378
368
late final HashMap <Element , Set <ModelElement >> modelElementsMap = () {
379
369
var modelElements = HashMap <Element , Set <ModelElement >>();
380
370
for (var modelElement in < ModelElement > [
381
- ...library. constants,
382
- ...library. functions,
383
- ...library. properties,
384
- ...library. typedefs,
385
- ...library. extensions.expand ((e) => [e, ...e.allModelElements]),
386
- ...library. extensionTypes.expand ((e) => [e, ...e.allModelElements]),
387
- ...library.allClasses .expand ((c) => [c, ...c.allModelElements]),
388
- ...library. enums.expand ((e) => [e, ...e.allModelElements]),
389
- ...library. mixins.expand ((m) => [m, ...m.allModelElements]),
371
+ ...constants,
372
+ ...functions,
373
+ ...properties,
374
+ ...typedefs,
375
+ ...extensions.expand ((e) => [e, ...e.allModelElements]),
376
+ ...extensionTypes.expand ((e) => [e, ...e.allModelElements]),
377
+ ...classesAndExceptions .expand ((c) => [c, ...c.allModelElements]),
378
+ ...enums.expand ((e) => [e, ...e.allModelElements]),
379
+ ...mixins.expand ((m) => [m, ...m.allModelElements]),
390
380
]) {
391
381
modelElements
392
382
.putIfAbsent (modelElement.element, () => {})
@@ -454,7 +444,7 @@ class Library extends ModelElement
454
444
var libraryMembers = [
455
445
...library.extensions,
456
446
...library.extensionTypes,
457
- ...library.allClasses ,
447
+ ...library.classesAndExceptions ,
458
448
...library.enums,
459
449
...library.mixins,
460
450
...library.constants,
0 commit comments