@@ -62,10 +62,6 @@ abstract class ElementType extends Privacy {
6262
6363 bool get canHaveParameters => false ;
6464
65- // TODO(jcollins-g): change clients of ElementType to use subtypes more consistently
66- // and eliminate createLinkedReturnTypeName (instead, using returnType.linkedName);
67- String createLinkedReturnTypeName () => linkedName;
68-
6965 bool get isTypedef => false ;
7066
7167 String get linkedName;
@@ -90,7 +86,7 @@ abstract class ElementType extends Privacy {
9086 }
9187
9288 /// An unmodifiable list of this element type's parameters.
93- List <Parameter > get parameters => const < Parameter > [] ;
89+ List <Parameter > get parameters;
9490
9591 DartType get instantiatedType;
9692
@@ -149,22 +145,25 @@ class UndefinedElementType extends ElementType {
149145
150146 @override
151147 String get linkedName => name;
148+
149+ @override
150+ // TODO(jcollins-g): remove the need for an empty list here.
151+ List <Parameter > get parameters => [];
152152}
153153
154154/// A FunctionType that does not have an underpinning Element.
155- class FunctionTypeElementType extends UndefinedElementType {
155+ class FunctionTypeElementType extends UndefinedElementType
156+ with CallableElementTypeMixin {
156157 FunctionTypeElementType (DartType f, Library library,
157158 PackageGraph packageGraph, ElementType returnedFrom)
158159 : super (f, library, packageGraph, returnedFrom);
159160
160- @override
161- FunctionType get type => super .type;
162-
163161 @override
164162 List <Parameter > get parameters => type.parameters
165163 .map ((p) => ModelElement .from (p, library, packageGraph) as Parameter )
166164 .toList (growable: false );
167165
166+ @override
168167 ElementType get returnType =>
169168 ElementType .from (type.returnType, library, packageGraph, this );
170169
@@ -174,11 +173,7 @@ class FunctionTypeElementType extends UndefinedElementType {
174173 return _linkedName;
175174 }
176175
177- @override
178- String createLinkedReturnTypeName () => returnType.linkedName;
179-
180176 String _nameWithGenerics;
181-
182177 @override
183178 String get nameWithGenerics {
184179 _nameWithGenerics ?? = _renderer.renderNameWithGenerics (this );
@@ -216,7 +211,7 @@ class ParameterizedElementType extends DefinedElementType {
216211 return _nameWithGenerics;
217212 }
218213
219- ElementTypeRenderer <ParameterizedElementType > get _renderer =>
214+ ElementTypeRenderer <ElementType > get _renderer =>
220215 packageGraph.rendererFactory.parameterizedElementTypeRenderer;
221216}
222217
@@ -281,9 +276,6 @@ abstract class DefinedElementType extends ElementType {
281276 return _returnType;
282277 }
283278
284- @override
285- String createLinkedReturnTypeName () => returnType.linkedName;
286-
287279 Iterable <ElementType > _typeArguments;
288280
289281 /// An unmodifiable list of this element type's parameters.
@@ -341,13 +333,14 @@ abstract class DefinedElementType extends ElementType {
341333}
342334
343335/// Any callable ElementType will mix-in this class, whether anonymous or not.
344- abstract class CallableElementTypeMixin implements ParameterizedElementType {
345- @override
336+ abstract class CallableElementTypeMixin implements ElementType {
337+ Iterable <ElementType > _typeArguments;
338+
346339 ModelElement get returnElement => returnType is DefinedElementType
347340 ? (returnType as DefinedElementType ).element
348341 : null ;
349342
350- @override
343+ ElementType _returnType;
351344 ElementType get returnType {
352345 _returnType ?? =
353346 ElementType .from (type.returnType, library, packageGraph, this );
@@ -357,7 +350,6 @@ abstract class CallableElementTypeMixin implements ParameterizedElementType {
357350 @override
358351 FunctionType get type => _type;
359352
360- @override
361353 // TODO(jcollins-g): Rewrite this and improve object model so this doesn't
362354 // require type checking everywhere.
363355 Iterable <ElementType > get typeArguments {
@@ -414,12 +406,16 @@ class CallableElementType extends ParameterizedElementType
414406
415407 @override
416408 String get linkedName {
417- _linkedName ?? = _renderer.renderLinkedName (this );
409+ if (_linkedName == null ) {
410+ if (name != null && name.isNotEmpty) {
411+ _linkedName = super .linkedName;
412+ } else {
413+ _linkedName = _renderer.renderLinkedName (this );
414+ }
415+ }
418416 return _linkedName;
419417 }
420418
421- String get superLinkedName => super .linkedName;
422-
423419 @override
424420 ElementTypeRenderer <CallableElementType > get _renderer =>
425421 packageGraph.rendererFactory.callableElementTypeRenderer;
0 commit comments