@@ -693,16 +693,10 @@ class _HttpHeaders implements HttpHeaders {
693693
694694class _HeaderValue implements HeaderValue {
695695 String _value;
696- Map <String , String ?>? _parameters;
696+ final Map <String , String ?> _parameters;
697697 Map <String , String ?>? _unmodifiableParameters;
698698
699- _HeaderValue ([this ._value = "" , Map <String , String ?> parameters = const {}]) {
700- // TODO(40614): Remove once non-nullability is sound.
701- Map <String , String ?>? nullableParameters = parameters;
702- if (nullableParameters != null && nullableParameters.isNotEmpty) {
703- _parameters = HashMap <String , String ?>.from (nullableParameters);
704- }
705- }
699+ _HeaderValue ([this ._value = "" , this ._parameters = const {}]);
706700
707701 static _HeaderValue parse (
708702 String value, {
@@ -711,18 +705,15 @@ class _HeaderValue implements HeaderValue {
711705 bool preserveBackslash = false ,
712706 }) {
713707 // Parse the string.
714- var result = _HeaderValue ();
708+ var result = _HeaderValue ('' , {} );
715709 result._parse (value, parameterSeparator, valueSeparator, preserveBackslash);
716710 return result;
717711 }
718712
719713 String get value => _value;
720714
721- Map <String , String ?> _ensureParameters () =>
722- _parameters ?? = < String , String ? > {};
723-
724715 Map <String , String ?> get parameters =>
725- _unmodifiableParameters ?? = UnmodifiableMapView (_ensureParameters () );
716+ _unmodifiableParameters ?? = UnmodifiableMapView (_parameters );
726717
727718 static bool _isToken (String token) {
728719 if (token.isEmpty) {
@@ -741,36 +732,33 @@ class _HeaderValue implements HeaderValue {
741732 String toString () {
742733 StringBuffer sb = StringBuffer ();
743734 sb.write (_value);
744- var parameters = _parameters;
745- if (parameters != null && parameters.isNotEmpty) {
746- parameters.forEach ((String name, String ? value) {
747- sb
748- ..write ("; " )
749- ..write (name);
750- if (value != null ) {
751- sb.write ("=" );
752- if (_isToken (value)) {
753- sb.write (value);
754- } else {
755- sb.write ('"' );
756- int start = 0 ;
757- for (int i = 0 ; i < value.length; i++ ) {
758- // Can use codeUnitAt here instead.
759- int codeUnit = value.codeUnitAt (i);
760- if (codeUnit == 92 /* backslash */ ||
761- codeUnit == 34 /* double quote */ ) {
762- sb.write (value.substring (start, i));
763- sb.write (r'\' );
764- start = i;
765- }
735+ _parameters.forEach ((String name, String ? value) {
736+ sb
737+ ..write ("; " )
738+ ..write (name);
739+ if (value != null ) {
740+ sb.write ("=" );
741+ if (_isToken (value)) {
742+ sb.write (value);
743+ } else {
744+ sb.write ('"' );
745+ int start = 0 ;
746+ for (int i = 0 ; i < value.length; i++ ) {
747+ // Can use codeUnitAt here instead.
748+ int codeUnit = value.codeUnitAt (i);
749+ if (codeUnit == 92 /* backslash */ ||
750+ codeUnit == 34 /* double quote */ ) {
751+ sb.write (value.substring (start, i));
752+ sb.write (r'\' );
753+ start = i;
766754 }
767- sb
768- ..write (value.substring (start))
769- ..write ('"' );
770755 }
756+ sb
757+ ..write (value.substring (start))
758+ ..write ('"' );
771759 }
772- });
773- }
760+ }
761+ });
774762 return sb.toString ();
775763 }
776764
@@ -821,8 +809,6 @@ class _HeaderValue implements HeaderValue {
821809 }
822810
823811 void parseParameters () {
824- var parameters = _ensureParameters ();
825-
826812 String parseParameterName () {
827813 int start = index;
828814 while (! done ()) {
@@ -880,10 +866,10 @@ class _HeaderValue implements HeaderValue {
880866 // Charset parameter of ContentTypes are always lower-case.
881867 value = value.toLowerCase ();
882868 }
883- parameters [name] = value;
869+ _parameters [name] = value;
884870 skipWS ();
885871 } else if (name.isNotEmpty) {
886- parameters [name] = null ;
872+ _parameters [name] = null ;
887873 }
888874 if (done ()) return ;
889875 // TODO: Implement support for multi-valued parameters.
@@ -907,36 +893,32 @@ class _ContentType extends _HeaderValue implements ContentType {
907893 String _subType = "" ;
908894
909895 _ContentType (
910- String primaryType ,
911- String subType ,
896+ this ._primaryType ,
897+ this ._subType ,
912898 String ? charset,
913899 Map <String , String ?> parameters,
914- ) : _primaryType = primaryType,
915- _subType = subType,
916- super ("" ) {
917- // TODO(40614): Remove once non-nullability is sound.
918- String emptyIfNull (String ? string) => string ?? "" ;
919- _primaryType = emptyIfNull (_primaryType);
920- _subType = emptyIfNull (_subType);
921- _value = "$_primaryType /$_subType " ;
922- // TODO(40614): Remove once non-nullability is sound.
923- Map <String , String ?>? nullableParameters = parameters;
924- if (nullableParameters != null ) {
925- var parameterMap = _ensureParameters ();
926- nullableParameters.forEach ((String key, String ? value) {
927- String lowerCaseKey = key.toLowerCase ();
928- if (lowerCaseKey == "charset" ) {
929- value = value? .toLowerCase ();
930- }
931- parameterMap[lowerCaseKey] = value;
932- });
933- }
900+ ) : super ("$_primaryType /$_subType " , _createParams (parameters, charset));
901+
902+ static Map <String , String ?> _createParams (
903+ Map <String , String ?> parameters,
904+ String ? charset,
905+ ) {
906+ var result = < String , String ? > {};
907+ parameters.forEach ((String key, String ? value) {
908+ String lowerCaseKey = key.toLowerCase ();
909+ if (lowerCaseKey == "charset" ) {
910+ value = value? .toLowerCase ();
911+ }
912+ result[lowerCaseKey] = value;
913+ });
934914 if (charset != null ) {
935- _ensureParameters () ["charset" ] = charset.toLowerCase ();
915+ result ["charset" ] = charset.toLowerCase ();
936916 }
917+
918+ return result;
937919 }
938920
939- _ContentType ._();
921+ _ContentType ._() : super ( '' , {}) ;
940922
941923 static _ContentType parse (String value) {
942924 var result = _ContentType ._();
@@ -1145,7 +1127,6 @@ class _Cookie implements Cookie {
11451127 "{" ,
11461128 "}" ,
11471129 ];
1148- if (newName == null ) throw ArgumentError .notNull ("name" );
11491130 for (int i = 0 ; i < newName.length; i++ ) {
11501131 int codeUnit = newName.codeUnitAt (i);
11511132 if (codeUnit <= 32 ||
@@ -1162,7 +1143,6 @@ class _Cookie implements Cookie {
11621143 }
11631144
11641145 static String _validateValue (String newValue) {
1165- if (newValue == null ) throw ArgumentError .notNull ("value" );
11661146 // Per RFC 6265, consider surrounding "" as part of the value, but otherwise
11671147 // double quotes are not allowed.
11681148 int start = 0 ;
0 commit comments