@@ -11,9 +11,11 @@ import 'package:analyzer/src/generated/resolver.dart';
11
11
import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
12
12
import 'package:quiver/core.dart' ;
13
13
14
+ import 'debug.dart' ;
14
15
import 'html_utils.dart' ;
15
16
import 'model_utils.dart' ;
16
17
import 'package_meta.dart' ;
18
+
17
19
import '../markdown_processor.dart' ;
18
20
19
21
int byName (a, b) => a.name.toUpperCase ().compareTo (b.name.toUpperCase ());
@@ -84,12 +86,12 @@ abstract class ModelElement implements Comparable {
84
86
if (e is MethodElement && ! e.isOperator) {
85
87
return new Method (e, library);
86
88
}
87
- if (e is PropertyAccessorElement ) {
88
- return new Accessor (e, library);
89
- }
90
89
if (e is TopLevelVariableElement ) {
91
90
return new TopLevelVariable (e, library);
92
91
}
92
+ if (e is PropertyAccessorElement ) {
93
+ return new Accessor (e, library);
94
+ }
93
95
if (e is TypeParameterElement ) {
94
96
return new TypeParameter (e, library);
95
97
}
@@ -239,13 +241,13 @@ abstract class ModelElement implements Comparable {
239
241
240
242
ElementType get modelType => _modelType;
241
243
242
- /// Returns the [ModelElement ] that encloses this.
243
- ModelElement get enclosingElement {
244
+ /// Returns the [ClassElement ] that encloses this.
245
+ Class get enclosingClass {
244
246
// A class's enclosing element is a library, and there isn't a
245
247
// modelelement for a library.
246
248
if (element.enclosingElement != null &&
247
249
element.enclosingElement is ClassElement ) {
248
- return new ModelElement .from (element.enclosingElement, library);
250
+ return new ModelElement .from (element.enclosingElement, library) as Class ;
249
251
} else {
250
252
return null ;
251
253
}
@@ -258,10 +260,13 @@ abstract class ModelElement implements Comparable {
258
260
if (! package.isDocumented (this .element)) {
259
261
return htmlEscape (name);
260
262
}
263
+
261
264
if (name.startsWith ('_' )) {
262
265
return htmlEscape (name);
263
266
}
264
- Class c = enclosingElement;
267
+
268
+ // this smells like it's in the wrong place
269
+ Class c = enclosingClass;
265
270
if (c != null && c.name.startsWith ('_' )) {
266
271
return '${c .name }.${htmlEscape (name )}' ;
267
272
}
@@ -292,8 +297,8 @@ abstract class ModelElement implements Comparable {
292
297
buf.write (' <span class="parameter-name">${p .name }</span>' );
293
298
}
294
299
buf.write ('(' );
295
- buf.write (p.modelType.element
296
- . linkedParams ( showNames: showNames, showMetadata: showMetadata));
300
+ buf.write (p.modelType.element. linkedParams (
301
+ showNames: showNames, showMetadata: showMetadata));
297
302
buf.write (')' );
298
303
} else if (p.modelType != null && p.modelType.element != null ) {
299
304
var mt = p.modelType;
@@ -414,29 +419,42 @@ class Package {
414
419
415
420
String toString () => isSdk ? 'SDK' : 'Package $name ' ;
416
421
417
- bool isDocumented ( Element element) {
422
+ Library findLibraryFor ( final Element element) {
418
423
if (element is LibraryElement ) {
419
- return _libraries.any ((lib) => lib.element == element);
424
+ // will equality work here? or should we check names?
425
+ return _libraries.firstWhere ((lib) => lib.element == element,
426
+ orElse: () => null );
420
427
}
421
428
422
429
Element el;
423
430
if (element is ClassMemberElement || element is PropertyAccessorElement ) {
424
- el = element.enclosingElement;
431
+ if (element.enclosingElement is ! CompilationUnitElement ) {
432
+ el = element.enclosingElement;
433
+ } else {
434
+ // in this case, element is an accessor for a library-level variable,
435
+ // likely a const. We, in this case, actually don't want the enclosing
436
+ // element because it's a compilation unit, whatever that is.
437
+ el = element;
438
+ }
425
439
} else if (element is TopLevelVariableElement ) {
426
- TopLevelVariableElement variable = element;
427
- if (variable .getter != null ) {
428
- el = variable .getter;
429
- } else if (variable .setter != null ) {
430
- el = variable .setter;
440
+ final TopLevelVariableElement variableElement = element;
441
+ if (variableElement .getter != null ) {
442
+ el = variableElement .getter;
443
+ } else if (variableElement .setter != null ) {
444
+ el = variableElement .setter;
431
445
} else {
432
- el = variable ;
446
+ el = variableElement ;
433
447
}
434
448
} else {
435
449
el = element;
436
450
}
437
- return _libraries.any ((lib) => lib.hasInNamespace (el));
451
+ //debugger(when: element.name == 'NAME_WITH_TWO_UNDERSCORES');
452
+ return _libraries.firstWhere ((lib) => lib.hasInNamespace (el),
453
+ orElse: () => null );
438
454
}
439
455
456
+ bool isDocumented (Element element) => findLibraryFor (element) != null ;
457
+
440
458
String get href => 'index.html' ;
441
459
442
460
Library _getLibraryFor (Element e) {
@@ -682,9 +700,8 @@ class Library extends ModelElement {
682
700
}
683
701
684
702
List <Class > get classes {
685
- return _allClasses
686
- .where ((c) => ! c.isErrorOrException)
687
- .toList (growable: false );
703
+ return _allClasses.where ((c) => ! c.isErrorOrException).toList (
704
+ growable: false );
688
705
}
689
706
690
707
List <Class > get allClasses => _allClasses;
@@ -781,9 +798,9 @@ class Class extends ModelElement {
781
798
}
782
799
783
800
List <TypeParameter > get _typeParameters => _cls.typeParameters.map ((f) {
784
- var lib = new Library (f.enclosingElement.library, package);
785
- return new TypeParameter (f, lib);
786
- }).toList ();
801
+ var lib = new Library (f.enclosingElement.library, package);
802
+ return new TypeParameter (f, lib);
803
+ }).toList ();
787
804
788
805
String get kind => 'class' ;
789
806
@@ -1212,8 +1229,7 @@ class Enum extends Class {
1212
1229
1213
1230
@override
1214
1231
List <EnumField > get instanceProperties {
1215
- return super
1216
- .instanceProperties
1232
+ return super .instanceProperties
1217
1233
.map ((Field p) => new EnumField (p.element, p.library))
1218
1234
.toList (growable: false );
1219
1235
}
@@ -1437,7 +1453,7 @@ class Constructor extends ModelElement {
1437
1453
@override
1438
1454
String get name {
1439
1455
String constructorName = element.name;
1440
- Class c = enclosingElement ;
1456
+ Class c = enclosingClass ;
1441
1457
if (constructorName.isEmpty) {
1442
1458
return c.name;
1443
1459
} else {
@@ -1706,10 +1722,8 @@ class ElementType {
1706
1722
1707
1723
ElementType get _returnType {
1708
1724
var rt = (_type as FunctionType ).returnType;
1709
- return new ElementType (
1710
- rt,
1711
- new ModelElement .from (rt.element,
1712
- new Library (_element.library.element, _element.package)));
1725
+ return new ElementType (rt, new ModelElement .from (
1726
+ rt.element, new Library (_element.library.element, _element.package)));
1713
1727
}
1714
1728
1715
1729
ModelElement get returnElement {
@@ -1723,9 +1737,9 @@ class ElementType {
1723
1737
1724
1738
List <ElementType > get typeArguments =>
1725
1739
(_type as ParameterizedType ).typeArguments.map ((f) {
1726
- var lib = new Library (f.element.library, _element.package);
1727
- return new ElementType (f, new ModelElement .from (f.element, lib));
1728
- }).toList ();
1740
+ var lib = new Library (f.element.library, _element.package);
1741
+ return new ElementType (f, new ModelElement .from (f.element, lib));
1742
+ }).toList ();
1729
1743
1730
1744
String get linkedName {
1731
1745
if (_linkedName != null ) return _linkedName;
0 commit comments