Skip to content

Commit 865b502

Browse files
authored
Fix several problems with anonymous functions and type parameters (#1651)
* Have failure example now * Fix a number of anonymous function bugs. * dartfmt * Working * rebuild package docs * tweak style slightly for complicatedReturn * fix crash
1 parent b1c2a5d commit 865b502

File tree

316 files changed

+1502
-747
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

316 files changed

+1502
-747
lines changed

lib/resources/styles.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,15 @@ dl dt.callable .name {
359359
white-space: nowrap;
360360
}
361361

362+
.type-parameter {
363+
white-space: nowrap;
364+
}
365+
366+
.multi-line-signature .type-parameter .parameter {
367+
margin-left: 0px;
368+
display: unset;
369+
}
370+
362371
.signature {
363372
color: #727272;
364373
}

lib/src/element_type.dart

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,14 @@ abstract class ElementType extends Privacy {
2929
assert(f is ParameterizedType || f is TypeParameterType);
3030
bool isGenericTypeAlias =
3131
f.element.enclosingElement is GenericTypeAliasElement;
32-
// can happen if element is dynamic
33-
assert(f.element.library != null);
3432
if (f is FunctionType) {
3533
assert(f is ParameterizedType);
3634
if (isGenericTypeAlias) {
3735
assert(element is! ModelFunctionAnonymous);
3836
return new CallableGenericTypeAliasElementType(
3937
f, packageGraph, element, returnedFrom);
4038
} else {
41-
if ((f.name ?? f.element.name) == '' ||
42-
(f.name ?? f.element.name) == null) {
43-
assert(element is ModelFunctionAnonymous);
39+
if (element is ModelFunctionAnonymous) {
4440
return new CallableAnonymousElementType(
4541
f, packageGraph, element, returnedFrom);
4642
} else {
@@ -129,9 +125,10 @@ class ParameterizedElementType extends DefinedElementType {
129125
if (!typeArguments.every((t) => t.name == 'dynamic') &&
130126
typeArguments.isNotEmpty) {
131127
buf.write('<span class="signature">');
132-
buf.write('&lt;');
133-
buf.writeAll(typeArguments.map((t) => t.linkedName), ', ');
134-
buf.write('&gt;');
128+
buf.write('&lt;<wbr><span class="type-parameter">');
129+
buf.writeAll(typeArguments.map((t) => t.linkedName),
130+
'</span>, <span class="type-parameter">');
131+
buf.write('</span>&gt;');
135132
buf.write('</span>');
136133
}
137134

@@ -150,9 +147,10 @@ class ParameterizedElementType extends DefinedElementType {
150147

151148
if (!typeArguments.every((t) => t.name == 'dynamic') &&
152149
typeArguments.isNotEmpty) {
153-
buf.write('&lt;');
154-
buf.writeAll(typeArguments.map((t) => t.nameWithGenerics), ', ');
155-
buf.write('&gt;');
150+
buf.write('&lt;<wbr><span class="type-parameter">');
151+
buf.writeAll(typeArguments.map((t) => t.nameWithGenerics),
152+
'</span>, <span class="type-parameter">');
153+
buf.write('</span>&gt;');
156154
}
157155
_nameWithGenerics = buf.toString();
158156
}
@@ -286,6 +284,12 @@ class CallableElementType extends ParameterizedElementType
286284
CallableElementType(FunctionType t, PackageGraph packageGraph,
287285
ModelElement element, ElementType returnedFrom)
288286
: super(t, packageGraph, element, returnedFrom);
287+
288+
@override
289+
String get linkedName {
290+
if (name != null && name.isNotEmpty) return super.linkedName;
291+
return '${nameWithGenerics}(${element.linkedParams(showNames: false).trim()}) → ${returnType.linkedName}';
292+
}
289293
}
290294

291295
/// This is an anonymous function using the generic function syntax (declared
@@ -301,7 +305,7 @@ class CallableAnonymousElementType extends CallableElementType {
301305
String get linkedName {
302306
if (_linkedName == null) {
303307
_linkedName =
304-
'${super.linkedName}<span class="signature">(${element.linkedParams()})</span>';
308+
'${returnType.linkedName} ${super.linkedName}<span class="signature">(${element.linkedParams()})</span>';
305309
}
306310
return _linkedName;
307311
}

lib/src/markdown_processor.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,8 @@ ModelElement _findRefElementInLibrary(String codeRef, Warnable element,
565565
}
566566

567567
if (results.length > 1) {
568-
if (results.any((r) => r.library.packageName == library.packageName)) {
569-
results.removeWhere((r) => r.library.packageName != library.packageName);
568+
if (results.any((r) => r.library?.packageName == library.packageName)) {
569+
results.removeWhere((r) => r.library?.packageName != library.packageName);
570570
}
571571
}
572572

0 commit comments

Comments
 (0)