@@ -584,19 +584,20 @@ abstract class FunctionTypeImpl extends TypeImpl implements FunctionType {
584584
585585 @override
586586 String get displayName {
587- String name = this .name;
588-
589- // Function types have an empty name when they are defined implicitly by
590- // either a closure or as part of a parameter declaration.
591587 if (name == null || name.isEmpty) {
588+ // Function types have an empty name when they are defined implicitly by
589+ // either a closure or as part of a parameter declaration.
592590 StringBuffer buffer = new StringBuffer ();
593591 appendTo (buffer, new Set .identity ());
592+ if (nullabilitySuffix == NullabilitySuffix .question) {
593+ buffer.write ('?' );
594+ }
594595 return buffer.toString ();
595596 }
596597
597598 List <DartType > typeArguments = this .typeArguments;
598599
599- bool areAllTypeArgumentsDynamic () {
600+ bool allTypeArgumentsAreDynamic () {
600601 for (DartType type in typeArguments) {
601602 if (type != null && ! type.isDynamic) {
602603 return false ;
@@ -605,10 +606,10 @@ abstract class FunctionTypeImpl extends TypeImpl implements FunctionType {
605606 return true ;
606607 }
607608
609+ StringBuffer buffer = new StringBuffer ();
610+ buffer.write (name);
608611 // If there is at least one non-dynamic type, then list them out.
609- if (! areAllTypeArgumentsDynamic ()) {
610- StringBuffer buffer = new StringBuffer ();
611- buffer.write (name);
612+ if (! allTypeArgumentsAreDynamic ()) {
612613 buffer.write ("<" );
613614 for (int i = 0 ; i < typeArguments.length; i++ ) {
614615 if (i != 0 ) {
@@ -618,10 +619,11 @@ abstract class FunctionTypeImpl extends TypeImpl implements FunctionType {
618619 buffer.write (typeArg.displayName);
619620 }
620621 buffer.write (">" );
621- name = buffer.toString ();
622622 }
623-
624- return name;
623+ if (nullabilitySuffix == NullabilitySuffix .question) {
624+ buffer.write ('?' );
625+ }
626+ return buffer.toString ();
625627 }
626628
627629 @override
@@ -1403,11 +1405,9 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
14031405
14041406 @override
14051407 String get displayName {
1406- String name = this .name;
1407-
14081408 List <DartType > typeArguments = this .typeArguments;
14091409
1410- bool areAllTypeArgumentsDynamic () {
1410+ bool allTypeArgumentsAreDynamic () {
14111411 for (DartType type in typeArguments) {
14121412 if (type != null && ! type.isDynamic) {
14131413 return false ;
@@ -1416,10 +1416,10 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
14161416 return true ;
14171417 }
14181418
1419+ StringBuffer buffer = new StringBuffer ();
1420+ buffer.write (name);
14191421 // If there is at least one non-dynamic type, then list them out.
1420- if (! areAllTypeArgumentsDynamic ()) {
1421- StringBuffer buffer = new StringBuffer ();
1422- buffer.write (name);
1422+ if (! allTypeArgumentsAreDynamic ()) {
14231423 buffer.write ("<" );
14241424 for (int i = 0 ; i < typeArguments.length; i++ ) {
14251425 if (i != 0 ) {
@@ -1429,9 +1429,11 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
14291429 buffer.write (typeArg.displayName);
14301430 }
14311431 buffer.write (">" );
1432- name = buffer.toString ();
14331432 }
1434- return name;
1433+ if (nullabilitySuffix == NullabilitySuffix .question) {
1434+ buffer.write ('?' );
1435+ }
1436+ return buffer.toString ();
14351437 }
14361438
14371439 @override
0 commit comments