| Index: pkg/path/lib/path.dart
|
| diff --git a/pkg/path/lib/path.dart b/pkg/path/lib/path.dart
|
| index f27d558790a198fee5916fb15f14db2a90c1bf68..cf59a6513927936ae164346519840e3cb03f6203 100644
|
| --- a/pkg/path/lib/path.dart
|
| +++ b/pkg/path/lib/path.dart
|
| @@ -163,6 +163,29 @@ String relative(String path, {String from}) =>
|
| /// withoutExtension('path/to/foo.dart'); // -> 'path/to/foo'
|
| String withoutExtension(String path) => _builder.withoutExtension(path);
|
|
|
| +/// Validates that there are no non-null arguments following a null one and
|
| +/// throws an appropriate [ArgumentError] on failure.
|
| +_validateArgList(String method, List<String> args) {
|
| + for (var i = 1; i < args.length; i++) {
|
| + // Ignore nulls hanging off the end.
|
| + if (args[i] == null || args[i - 1] != null) continue;
|
| +
|
| + var numArgs;
|
| + for (numArgs = args.length; numArgs >= 1; numArgs--) {
|
| + if (args[numArgs - 1] != null) break;
|
| + }
|
| +
|
| + // Show the arguments.
|
| + var message = new StringBuffer();
|
| + message.add("$method(");
|
| + message.add(args.take(numArgs)
|
| + .mappedBy((arg) => arg == null ? "null" : '"$arg"')
|
| + .join(", "));
|
| + message.add("): part ${i - 1} was null, but part $i was not.");
|
| + throw new ArgumentError(message.toString());
|
| + }
|
| +}
|
| +
|
| /// An instantiable class for manipulating paths. Unlike the top-level
|
| /// functions, this lets you explicitly select what platform the paths will use.
|
| class Builder {
|
| @@ -302,12 +325,7 @@ class Builder {
|
| var needsSeparator = false;
|
|
|
| var parts = [part1, part2, part3, part4, part5, part6, part7, part8];
|
| - for (var i = 1; i < parts.length; i++) {
|
| - if (parts[i] != null && parts[i - 1] == null) {
|
| - throw new ArgumentError("join(): part ${i - 1} was null, but part $i "
|
| - "was not.");
|
| - }
|
| - }
|
| + _validateArgList("join", parts);
|
|
|
| for (var part in parts) {
|
| if (part == null) continue;
|
| @@ -380,12 +398,6 @@ class Builder {
|
| /// builder.resolve('path', 'to', 'foo'); // -> 'root/path/to/foo'
|
| String resolve(String part1, [String part2, String part3, String part4,
|
| String part5, String part6, String part7]) {
|
| - if (!?part2) return join(root, part1);
|
| - if (!?part3) return join(root, part1, part2);
|
| - if (!?part4) return join(root, part1, part2, part3);
|
| - if (!?part5) return join(root, part1, part2, part3, part4);
|
| - if (!?part6) return join(root, part1, part2, part3, part4, part5);
|
| - if (!?part7) return join(root, part1, part2, part3, part4, part5, part6);
|
| return join(root, part1, part2, part3, part4, part5, part6, part7);
|
| }
|
|
|
|
|