@@ -8,15 +8,17 @@ library dartdoc.element_type;
8
8
import 'package:analyzer/dart/element/element.dart' ;
9
9
import 'package:analyzer/dart/element/nullability_suffix.dart' ;
10
10
import 'package:analyzer/dart/element/type.dart' ;
11
+ import 'package:dartdoc/src/model/comment_referable.dart' ;
11
12
import 'package:dartdoc/src/model/model.dart' ;
12
13
import 'package:dartdoc/src/render/element_type_renderer.dart' ;
13
14
14
15
/// Base class representing a type in Dartdoc. It wraps a [DartType] , and
15
16
/// may link to a [ModelElement] .
16
- abstract class ElementType extends Privacy {
17
+ abstract class ElementType extends Privacy with CommentReferable , Nameable {
17
18
final DartType _type;
18
19
final PackageGraph packageGraph;
19
20
final ElementType returnedFrom;
21
+ @override
20
22
final Library library;
21
23
22
24
ElementType (this ._type, this .library, this .packageGraph, this .returnedFrom);
@@ -73,8 +75,6 @@ abstract class ElementType extends Privacy {
73
75
74
76
String get linkedName;
75
77
76
- String get name;
77
-
78
78
/// Name with generics and nullability indication.
79
79
String get nameWithGenerics;
80
80
@@ -113,6 +113,9 @@ class UndefinedElementType extends ElementType {
113
113
ElementType returnedFrom)
114
114
: super (f, library, packageGraph, returnedFrom);
115
115
116
+ @override
117
+ Element get element => null ;
118
+
116
119
String _linkedName;
117
120
118
121
@override
@@ -131,7 +134,7 @@ class UndefinedElementType extends ElementType {
131
134
bool get isImpliedFuture => (type.isDynamic &&
132
135
returnedFrom != null &&
133
136
returnedFrom is DefinedElementType &&
134
- (returnedFrom as DefinedElementType ).element .isAsynchronous);
137
+ (returnedFrom as DefinedElementType ).modelElement .isAsynchronous);
135
138
136
139
@override
137
140
String get nameWithGenerics => '$name $nullabilitySuffix ' ;
@@ -153,6 +156,12 @@ class UndefinedElementType extends ElementType {
153
156
@override
154
157
String get linkedName => name;
155
158
159
+ @override
160
+ Map <String , CommentReferable > get referenceChildren => {};
161
+
162
+ @override
163
+ Iterable <CommentReferable > get referenceParents => [];
164
+
156
165
@override
157
166
// TODO(jcollins-g): remove the need for an empty list here.
158
167
List <Parameter > get parameters => [];
@@ -264,15 +273,18 @@ class TypeParameterElementType extends DefinedElementType {
264
273
265
274
/// An [ElementType] associated with an [Element] .
266
275
abstract class DefinedElementType extends ElementType {
267
- final ModelElement _element ;
276
+ final ModelElement _modelElement ;
268
277
269
278
DefinedElementType (DartType type, Library library, PackageGraph packageGraph,
270
- this ._element , ElementType returnedFrom)
279
+ this ._modelElement , ElementType returnedFrom)
271
280
: super (type, library, packageGraph, returnedFrom);
272
281
273
- ModelElement get element {
274
- assert (_element != null );
275
- return _element;
282
+ @override
283
+ Element get element => modelElement.element;
284
+
285
+ ModelElement get modelElement {
286
+ assert (_modelElement != null );
287
+ return _modelElement;
276
288
}
277
289
278
290
@override
@@ -285,20 +297,21 @@ abstract class DefinedElementType extends ElementType {
285
297
/// would ordinarily do.
286
298
@override
287
299
bool get isPublic {
288
- Container canonicalClass =
289
- element.packageGraph. findCanonicalModelElementFor (element .element) ??
290
- element ;
291
- return canonicalClass.isPublic;
300
+ Container canonicalClass = modelElement.packageGraph
301
+ . findCanonicalModelElementFor (modelElement .element) ??
302
+ modelElement ;
303
+ return canonicalClass? .isPublic ?? false ;
292
304
}
293
305
294
306
@override
295
- bool get isTypedef => element is Typedef || element is ModelFunctionTypedef ;
307
+ bool get isTypedef =>
308
+ modelElement is Typedef || modelElement is ModelFunctionTypedef ;
296
309
297
310
@override
298
311
List <Parameter > get parameters =>
299
- element .isCallable ? element .parameters : [];
312
+ modelElement .isCallable ? modelElement .parameters : [];
300
313
301
- ModelElement get returnElement => element ;
314
+ ModelElement get returnElement => modelElement ;
302
315
ElementType _returnType;
303
316
ElementType get returnType {
304
317
_returnType ?? = ElementType .from (type, library, packageGraph, this );
@@ -359,14 +372,22 @@ abstract class DefinedElementType extends ElementType {
359
372
}
360
373
return false ;
361
374
}
375
+
376
+ @override
377
+ Map <String , CommentReferable > get referenceChildren =>
378
+ modelElement.referenceChildren;
379
+
380
+ @override
381
+ Iterable <CommentReferable > get referenceParents =>
382
+ modelElement.referenceParents;
362
383
}
363
384
364
385
/// Any callable ElementType will mix-in this class, whether anonymous or not.
365
386
abstract class CallableElementTypeMixin implements ElementType {
366
387
Iterable <ElementType > _typeArguments;
367
388
368
389
ModelElement get returnElement => returnType is DefinedElementType
369
- ? (returnType as DefinedElementType ).element
390
+ ? (returnType as DefinedElementType ).modelElement
370
391
: null ;
371
392
372
393
ElementType _returnType;
0 commit comments