Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(655)

Unified Diff: runtime/bin/directory_impl.dart

Issue 10173024: Change the error handling in dart:io (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/directory.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/directory_impl.dart
diff --git a/runtime/bin/directory_impl.dart b/runtime/bin/directory_impl.dart
index 479b035b4264770d4a76da3f0b1894ef33ca1996..b5329350664d5be433b47b42d569ceb0ac884dec 100644
--- a/runtime/bin/directory_impl.dart
+++ b/runtime/bin/directory_impl.dart
@@ -31,7 +31,7 @@ class _Directory implements Directory {
request[1] = _path;
_directoryService.call(request).then((response) {
if (_isErrorResponse(response)) {
- _reportError(response, "Exists failed");
+ _handleErrorResponse(response, "Exists failed");
} else {
callback(response == 1);
}
@@ -56,7 +56,7 @@ class _Directory implements Directory {
request[1] = _path;
_directoryService.call(request).then((response) {
if (_isErrorResponse(response)) {
- _reportError(response, "Creation failed");
+ _handleErrorResponse(response, "Creation failed");
} else {
callback();
}
@@ -80,7 +80,7 @@ class _Directory implements Directory {
request[1] = _path;
_directoryService.call(request).then((response) {
if (_isErrorResponse(response)) {
- _reportError(response, "Creation of temporary directory failed");
+ _handleErrorResponse(response, "Creation of temporary directory failed");
} else {
_path = response;
callback();
@@ -109,7 +109,7 @@ class _Directory implements Directory {
request[2] = recursive;
_directoryService.call(request).then((response) {
if (_isErrorResponse(response)) {
- _reportError(response, errorMsg);
+ _handleErrorResponse(response, errorMsg);
} else {
callback();
}
@@ -166,9 +166,7 @@ class _Directory implements Directory {
responsePort.receive((message, replyTo) {
if (message is !List || message[kResponseType] is !int) {
responsePort.close();
- if (_onError != null) {
- _onError(new DirectoryIOException("Internal error"));
- }
+ _reportError(new DirectoryIOException("Internal error"));
return;
}
switch (message[kResponseType]) {
@@ -179,21 +177,19 @@ class _Directory implements Directory {
if (_onFile != null) _onFile(message[kResponsePath]);
break;
case kListError:
- if (_onError != null) {
- var errorType =
- message[kResponseError][_FileUtils.kErrorResponseErrorType];
- if (errorType == _FileUtils.kIllegalArgumentResponse) {
- _onError(new IllegalArgumentException());
- } else if (errorType == _FileUtils.kOSErrorResponse) {
- var err = new OSError(
- message[kResponseError][_FileUtils.kOSErrorResponseMessage],
- message[kResponseError][_FileUtils.kOSErrorResponseErrorCode]);
- _onError(new DirectoryIOException("Directory listing failed",
- message[kResponsePath],
- err));
- } else {
- _onError(new DirectoryIOException("Internal error"));
- }
+ var errorType =
+ message[kResponseError][_FileUtils.kErrorResponseErrorType];
+ if (errorType == _FileUtils.kIllegalArgumentResponse) {
+ _reportError(new IllegalArgumentException());
+ } else if (errorType == _FileUtils.kOSErrorResponse) {
+ var err = new OSError(
+ message[kResponseError][_FileUtils.kOSErrorResponseMessage],
+ message[kResponseError][_FileUtils.kOSErrorResponseErrorCode]);
+ _reportError(new DirectoryIOException("Directory listing failed",
+ message[kResponsePath],
+ err));
+ } else {
+ _reportError(new DirectoryIOException("Internal error"));
}
break;
case kListDone:
@@ -216,7 +212,7 @@ class _Directory implements Directory {
_onDone = onDone;
}
- void set onError(void onError(Exception e)) {
+ void set onError(void onError(e)) {
_onError = onError;
}
@@ -228,26 +224,32 @@ class _Directory implements Directory {
}
}
+ void _reportError(e) {
+ if (_onError != null) {
+ _onError(e);
+ } else {
+ throw e;
+ }
+ }
+
bool _isErrorResponse(response) {
return response is List && response[0] != _FileUtils.kSuccessResponse;
}
- bool _reportError(response, String message) {
+ void _handleErrorResponse(response, String message) {
assert(_isErrorResponse(response));
- if (_onError != null) {
- switch (response[_FileUtils.kErrorResponseErrorType]) {
- case _FileUtils.kIllegalArgumentResponse:
- _onError(new IllegalArgumentException());
- break;
- case _FileUtils.kOSErrorResponse:
- var err = new OSError(response[_FileUtils.kOSErrorResponseMessage],
- response[_FileUtils.kOSErrorResponseErrorCode]);
- _onError(new DirectoryIOException(message, _path, err));
- break;
- default:
- _onError(new Exception("Unknown error"));
- break;
- }
+ switch (response[_FileUtils.kErrorResponseErrorType]) {
+ case _FileUtils.kIllegalArgumentResponse:
+ _reportError(new IllegalArgumentException());
+ break;
+ case _FileUtils.kOSErrorResponse:
+ var err = new OSError(response[_FileUtils.kOSErrorResponseMessage],
+ response[_FileUtils.kOSErrorResponseErrorCode]);
+ _reportError(new DirectoryIOException(message, _path, err));
+ break;
+ default:
+ _reportError(new Exception("Unknown error"));
+ break;
}
}
« no previous file with comments | « runtime/bin/directory.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698