Index: sdk/lib/io/http_headers.dart |
diff --git a/sdk/lib/io/http_headers.dart b/sdk/lib/io/http_headers.dart |
index 5dd5c55fd064e50f44e9c3e7d43047a2c3dc0518..587910647ff75b068daa602e067346fe9b821291 100644 |
--- a/sdk/lib/io/http_headers.dart |
+++ b/sdk/lib/io/http_headers.dart |
@@ -523,12 +523,12 @@ class _HttpHeaders implements HttpHeaders { |
class _HeaderValue implements HeaderValue { |
String _value; |
- _UnmodifiableMap<String, String> _parameters; |
+ Map<String, String> _parameters; |
+ Map<String, String> _unmodifiableParameters; |
_HeaderValue([String this._value = "", Map<String, String> parameters]) { |
if (parameters != null) { |
- _parameters = |
- new _UnmodifiableMap(new HashMap<String, String>.from(parameters)); |
+ _parameters = new HashMap<String, String>.from(parameters); |
} |
} |
@@ -545,13 +545,16 @@ class _HeaderValue implements HeaderValue { |
void _ensureParameters() { |
if (_parameters == null) { |
- _parameters = new _UnmodifiableMap(new HashMap<String, String>()); |
+ _parameters = new HashMap<String, String>(); |
} |
} |
Map<String, String> get parameters { |
_ensureParameters(); |
- return _parameters; |
+ if (_unmodifiableParameters == null) { |
+ _unmodifiableParameters = new UnmodifiableMapView(_parameters); |
+ } |
+ return _unmodifiableParameters; |
} |
String toString() { |
@@ -601,7 +604,7 @@ class _HeaderValue implements HeaderValue { |
void parseParameters() { |
var parameters = new HashMap<String, String>(); |
- _parameters = new _UnmodifiableMap(parameters); |
+ _parameters = new UnmodifiableMapView(parameters); |
String parseParameterName() { |
int start = index; |
@@ -680,12 +683,12 @@ class _ContentType extends _HeaderValue implements ContentType { |
if (parameters != null) { |
_ensureParameters(); |
parameters.forEach((String key, String value) { |
- this._parameters._map[key.toLowerCase()] = value.toLowerCase(); |
+ this._parameters[key.toLowerCase()] = value.toLowerCase(); |
}); |
} |
if (charset != null) { |
_ensureParameters(); |
- this._parameters._map["charset"] = charset.toLowerCase(); |
+ this._parameters["charset"] = charset.toLowerCase(); |
} |
} |
@@ -868,34 +871,3 @@ class _Cookie implements Cookie { |
} |
} |
} |
- |
- |
-class _UnmodifiableMap<K, V> implements Map<K, V> { |
- final Map _map; |
- const _UnmodifiableMap(this._map); |
- |
- bool containsValue(Object value) => _map.containsValue(value); |
- bool containsKey(Object key) => _map.containsKey(key); |
- V operator [](Object key) => _map[key]; |
- void operator []=(K key, V value) { |
- throw new UnsupportedError("Cannot modify an unmodifiable map"); |
- } |
- V putIfAbsent(K key, V ifAbsent()) { |
- throw new UnsupportedError("Cannot modify an unmodifiable map"); |
- } |
- addAll(Map other) { |
- throw new UnsupportedError("Cannot modify an unmodifiable map"); |
- } |
- V remove(Object key) { |
- throw new UnsupportedError("Cannot modify an unmodifiable map"); |
- } |
- void clear() { |
- throw new UnsupportedError("Cannot modify an unmodifiable map"); |
- } |
- void forEach(void f(K key, V value)) => _map.forEach(f); |
- Iterable<K> get keys => _map.keys; |
- Iterable<V> get values => _map.values; |
- int get length => _map.length; |
- bool get isEmpty => _map.isEmpty; |
- bool get isNotEmpty => _map.isNotEmpty; |
-} |