Index: pkg/analyzer/lib/src/dart/element/type.dart |
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart |
index 1cfdbf8d15b30aee62cbbe56cb56e53a8437e83d..adb40bd96769adb4c784052628953aa5cf79bde9 100644 |
--- a/pkg/analyzer/lib/src/dart/element/type.dart |
+++ b/pkg/analyzer/lib/src/dart/element/type.dart |
@@ -454,13 +454,41 @@ class FunctionTypeImpl extends TypeImpl implements FunctionType { |
@override |
String get displayName { |
String name = this.name; |
+ |
+ // Function types have an empty name when they are defined implicitly by |
+ // either a closure or as part of a parameter declaration. |
if (name == null || name.length == 0) { |
- // Function types have an empty name when they are defined implicitly by |
- // either a closure or as part of a parameter declaration. |
StringBuffer buffer = new StringBuffer(); |
appendTo(buffer, new Set.identity()); |
+ return buffer.toString(); |
+ } |
+ |
+ List<DartType> typeArguments = this.typeArguments; |
+ |
+ bool allDynamic = true; |
Brian Wilkerson
2017/03/20 20:13:47
Just an idea: this block of code would make a nice
|
+ for (DartType type in typeArguments) { |
+ if (type != null && !type.isDynamic) { |
+ allDynamic = false; |
+ break; |
+ } |
+ } |
+ |
+ // If there is at least one non-dynamic type, then list them out. |
+ if (!allDynamic) { |
+ StringBuffer buffer = new StringBuffer(); |
+ buffer.write(name); |
+ buffer.write("<"); |
+ for (int i = 0; i < typeArguments.length; i++) { |
+ if (i != 0) { |
+ buffer.write(", "); |
+ } |
+ DartType typeArg = typeArguments[i]; |
+ buffer.write(typeArg.displayName); |
+ } |
+ buffer.write(">"); |
name = buffer.toString(); |
} |
+ |
return name; |
} |