Index: sdk/lib/core/uri.dart |
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart |
index c8277e7fc6b4b035ad7624e195049d0817a80740..4f371394ee3bc1bcdce517394dea1f911cb65301 100644 |
--- a/sdk/lib/core/uri.dart |
+++ b/sdk/lib/core/uri.dart |
@@ -81,6 +81,9 @@ class Uri { |
*/ |
final String fragment; |
+ List<String> _pathSegments; |
Lasse Reichstein Nielsen
2013/05/30 11:57:50
Dartdoc saying that this caches the computed retur
Søren Gjesse
2013/05/30 13:38:25
Done.
|
+ Map<String, String> _queryParameters; |
Lasse Reichstein Nielsen
2013/05/30 11:57:50
Similar.
Søren Gjesse
2013/05/30 13:38:25
Done.
|
+ |
/** |
* Creates a new URI object by parsing a URI string. |
*/ |
@@ -167,10 +170,19 @@ class Uri { |
* Returns the URI path split into its segments. Each of the |
* segments in the returned list have been decoded. If the path is |
* empty the empty list will be returned. |
+ * |
+ * The returned list should not be modified as the same object will |
+ * be returned for each call. |
Lasse Reichstein Nielsen
2013/05/30 11:57:50
"should not" isn't very safe. Could you make it un
Søren Gjesse
2013/05/30 13:38:25
Created an immutable list wrapper.
|
*/ |
List<String> get pathSegments { |
- if (path == "") return const<String>[]; |
- return path.split("/").map(Uri.decodeComponent).toList(growable: false); |
+ if (_pathSegments == null) { |
+ _pathSegments = |
+ path == "" ? const<String>[] |
+ : path.split("/") |
+ .map(Uri.decodeComponent) |
+ .toList(growable: false); |
+ } |
+ return _pathSegments; |
} |
/* |
@@ -178,9 +190,13 @@ class Uri { |
* specified for FORM post in the HTML 4.01 specification. Each key |
* and value in the returned map have been decoded. If there is no |
* query the empty map will be returned. |
+ * |
+ * The returned map should not be modified as the same object will |
+ * be returned for each call. |
*/ |
Map<String, String> get queryParameters { |
- return query.split("&").fold({}, (map, element) { |
+ if (_queryParameters == null) { |
+ _queryParameters = query.split("&").fold({}, (map, element) { |
int index = element.indexOf("="); |
if (index == -1) { |
if (!element.isEmpty) map[element] = ""; |
@@ -190,7 +206,9 @@ class Uri { |
map[Uri.decodeQueryComponent(key)] = decodeQueryComponent(value); |
} |
return map; |
- }); |
+ }); |
+ } |
+ return _queryParameters; |
} |
static String _makeScheme(String scheme) { |