| Index: sdk/lib/io/file_impl.dart
|
| diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
|
| index a6344006056ff6ee623a8a4334ecc4fe2f746f0d..c1d8dc336f209461644076891ecc8264edf1222c 100644
|
| --- a/sdk/lib/io/file_impl.dart
|
| +++ b/sdk/lib/io/file_impl.dart
|
| @@ -11,11 +11,10 @@ class _FileInputStream extends _BaseDataInputStream implements InputStream {
|
| _filePosition = 0 {
|
| var file = new File(name);
|
| var future = file.open(FileMode.READ);
|
| - future.handleException((e) {
|
| - _reportError(e);
|
| - return true;
|
| - });
|
| - future.then(_setupOpenedFile);
|
| + future.then(_setupOpenedFile)
|
| + .catchError((e) {
|
| + _reportError(e.error);
|
| + });
|
| }
|
|
|
| _FileInputStream.fromStdio(int fd)
|
| @@ -35,14 +34,14 @@ class _FileInputStream extends _BaseDataInputStream implements InputStream {
|
| return;
|
| }
|
| var futureOpen = _openedFile.length();
|
| - futureOpen.then((len) {
|
| - _fileLength = len;
|
| - _fillBuffer();
|
| - });
|
| - futureOpen.handleException((e) {
|
| - _reportError(e);
|
| - return true;
|
| - });
|
| + futureOpen
|
| + .then((len) {
|
| + _fileLength = len;
|
| + _fillBuffer();
|
| + })
|
| + .catchError((e) {
|
| + _reportError(e.error);
|
| + });
|
| }
|
|
|
| void _closeFile() {
|
| @@ -82,11 +81,9 @@ class _FileInputStream extends _BaseDataInputStream implements InputStream {
|
| _closeFile();
|
| }
|
| _checkScheduleCallbacks();
|
| - });
|
| - future.handleException((e) {
|
| + }).catchError((e) {
|
| _activeFillBufferCall = false;
|
| - _reportError(e);
|
| - return true;
|
| + _reportError(e.error);
|
| });
|
| }
|
|
|
| @@ -162,10 +159,8 @@ class _FileOutputStream extends _BaseOutputStream implements OutputStream {
|
| openFuture.then((openedFile) {
|
| _file = openedFile;
|
| _processPendingOperations();
|
| - });
|
| - openFuture.handleException((e) {
|
| - _reportError(e);
|
| - return true;
|
| + }).catchError((e) {
|
| + _reportError(e.error);
|
| });
|
| }
|
|
|
| @@ -267,11 +262,9 @@ class _FileOutputStream extends _BaseOutputStream implements OutputStream {
|
| _onNoPendingWrites != null) {
|
| _onNoPendingWrites();
|
| }
|
| - });
|
| - writeListFuture.handleException((e) {
|
| + }).catchError((e) {
|
| outstandingWrites--;
|
| - _reportError(e);
|
| - return true;
|
| + _reportError(e.error);
|
| });
|
| }
|
|
|
| @@ -363,10 +356,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<bool> exists() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _EXISTS_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot open file '$_name'");
|
| }
|
| @@ -384,10 +377,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<File> create() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _CREATE_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot create file '$_name'");
|
| }
|
| @@ -404,10 +397,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<File> delete() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _DELETE_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot delete file '$_name'");
|
| }
|
| @@ -424,10 +417,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<Directory> directory() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _DIRECTORY_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "Cannot retrieve directory for "
|
| @@ -452,15 +445,15 @@ class _File extends _FileBase implements File {
|
| mode != FileMode.WRITE &&
|
| mode != FileMode.APPEND) {
|
| new Timer(0, (t) {
|
| - completer.completeException(new ArgumentError());
|
| + completer.completeError(new ArgumentError());
|
| });
|
| return completer.future;
|
| }
|
| - List request = new List(3);
|
| + List request = new List.fixedLength(3);
|
| request[0] = _OPEN_REQUEST;
|
| request[1] = _name;
|
| request[2] = mode._mode; // Direct int value for serialization.
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot open file '$_name'");
|
| }
|
| @@ -470,10 +463,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<int> length() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _LENGTH_FROM_NAME_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "Cannot retrieve length of "
|
| @@ -494,10 +487,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<Date> lastModified() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _LAST_MODIFIED_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "Cannot retrieve modification time "
|
| @@ -541,10 +534,10 @@ class _File extends _FileBase implements File {
|
|
|
| Future<String> fullPath() {
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _FULL_PATH_REQUEST;
|
| request[1] = _name;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "Cannot retrieve full path"
|
| @@ -589,7 +582,9 @@ class _File extends _FileBase implements File {
|
| var chunk = stream.read();
|
| chunks.add(chunk);
|
| };
|
| - stream.onError = completer.completeException;
|
| + stream.onError = (e) {
|
| + completer.completeError(e);
|
| + };
|
| return completer.future;
|
| }
|
|
|
| @@ -607,7 +602,7 @@ class _File extends _FileBase implements File {
|
|
|
| Future<String> readAsString([Encoding encoding = Encoding.UTF_8]) {
|
| _ensureFileService();
|
| - return readAsBytes().transform((bytes) {
|
| + return readAsBytes().then((bytes) {
|
| if (bytes.length == 0) return "";
|
| var decoder = _StringDecoders.decoder(encoding);
|
| decoder.write(bytes);
|
| @@ -642,7 +637,7 @@ class _File extends _FileBase implements File {
|
| Future<List<String>> readAsLines([Encoding encoding = Encoding.UTF_8]) {
|
| _ensureFileService();
|
| Completer<List<String>> completer = new Completer<List<String>>();
|
| - return readAsBytes().transform((bytes) {
|
| + return readAsBytes().then((bytes) {
|
| var decoder = _StringDecoders.decoder(encoding);
|
| decoder.write(bytes);
|
| return _getDecodedLines(decoder);
|
| @@ -731,13 +726,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
|
| if (closed) return _completeWithClosedException(completer);
|
| _ensureFileService();
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _CLOSE_REQUEST;
|
| request[1] = _id;
|
| // Set the id_ to 0 (NULL) to ensure the no more async requests
|
| // can be issued for this file.
|
| _id = 0;
|
| - return _fileService.call(request).transform((result) {
|
| + return _fileService.call(request).then((result) {
|
| if (result != -1) {
|
| _id = result;
|
| return this;
|
| @@ -762,10 +757,10 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<int> completer = new Completer<int>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _READ_BYTE_REQUEST;
|
| request[1] = _id;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "readByte failed for file '$_name'");
|
| @@ -803,7 +798,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| request[0] = _READ_REQUEST;
|
| request[1] = _id;
|
| request[2] = bytes;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "read failed for file '$_name'");
|
| @@ -830,17 +825,17 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| // handlers without getting exceptions when registering the
|
| // then handler.
|
| new Timer(0, (t) {
|
| - completer.completeException(new FileIOException(
|
| + completer.completeError(new FileIOException(
|
| "Invalid arguments to readList for file '$_name'"));
|
| });
|
| return completer.future;
|
| };
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(3);
|
| + List request = new List.fixedLength(3);
|
| request[0] = _READ_LIST_REQUEST;
|
| request[1] = _id;
|
| request[2] = bytes;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "readList failed for file '$_name'");
|
| @@ -886,17 +881,17 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| // handlers without getting exceptions when registering the
|
| // then handler.
|
| new Timer(0, (t) {
|
| - completer.completeException(new FileIOException(
|
| + completer.completeError(new FileIOException(
|
| "Invalid argument to writeByte for file '$_name'"));
|
| });
|
| return completer.future;
|
| }
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(3);
|
| + List request = new List.fixedLength(3);
|
| request[0] = _WRITE_BYTE_REQUEST;
|
| request[1] = _id;
|
| request[2] = value;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "writeByte failed for file '$_name'");
|
| @@ -929,7 +924,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| // handlers without getting exceptions when registering the
|
| // then handler.
|
| new Timer(0, (t) {
|
| - completer.completeException(new FileIOException(
|
| + completer.completeError(new FileIOException(
|
| "Invalid arguments to writeList for file '$_name'"));
|
| });
|
| return completer.future;
|
| @@ -943,17 +938,17 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| // Complete asynchronously so the user has a chance to setup
|
| // handlers without getting exceptions when registering the
|
| // then handler.
|
| - new Timer(0, (t) => completer.completeException(e));
|
| + new Timer(0, (t) => completer.completeError(e));
|
| return completer.future;
|
| }
|
|
|
| - List request = new List(5);
|
| + List request = new List.fixedLength(5);
|
| request[0] = _WRITE_LIST_REQUEST;
|
| request[1] = _id;
|
| request[2] = result.buffer;
|
| request[3] = result.offset;
|
| request[4] = bytes;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "writeList failed for file '$_name'");
|
| @@ -987,7 +982,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| if (encoding is! Encoding) {
|
| var completer = new Completer();
|
| new Timer(0, (t) {
|
| - completer.completeException(new FileIOException(
|
| + completer.completeError(new FileIOException(
|
| "Invalid encoding in writeString: $encoding"));
|
| });
|
| return completer.future;
|
| @@ -1009,10 +1004,10 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<int> completer = new Completer<int>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _POSITION_REQUEST;
|
| request[1] = _id;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "position failed for file '$_name'");
|
| @@ -1036,11 +1031,11 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(3);
|
| + List request = new List.fixedLength(3);
|
| request[0] = _SET_POSITION_REQUEST;
|
| request[1] = _id;
|
| request[2] = position;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "setPosition failed for file '$_name'");
|
| @@ -1063,11 +1058,11 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(3);
|
| + List request = new List.fixedLength(3);
|
| request[0] = _TRUNCATE_REQUEST;
|
| request[1] = _id;
|
| request[2] = length;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "truncate failed for file '$_name'");
|
| @@ -1090,10 +1085,10 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<int> completer = new Completer<int>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _LENGTH_REQUEST;
|
| request[1] = _id;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "length failed for file '$_name'");
|
| @@ -1117,10 +1112,10 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
| _ensureFileService();
|
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
|
| if (closed) return _completeWithClosedException(completer);
|
| - List request = new List(2);
|
| + List request = new List.fixedLength(2);
|
| request[0] = _FLUSH_REQUEST;
|
| request[1] = _id;
|
| - return _fileService.call(request).transform((response) {
|
| + return _fileService.call(request).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response,
|
| "flush failed for file '$_name'");
|
| @@ -1157,7 +1152,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
|
|
|
| Future _completeWithClosedException(Completer completer) {
|
| new Timer(0, (t) {
|
| - completer.completeException(
|
| + completer.completeError(
|
| new FileIOException("File closed '$_name'"));
|
| });
|
| return completer.future;
|
|
|