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

Side by Side Diff: pkg/front_end/lib/memory_file_system.dart

Issue 2864183002: Throw FileSystemException from FileSystemEntity methods. (Closed)
Patch Set: Use OS error message if available. Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « pkg/front_end/lib/file_system.dart ('k') | pkg/front_end/lib/physical_file_system.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library front_end.memory_file_system; 5 library front_end.memory_file_system;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:typed_data'; 9 import 'dart:typed_data';
10 10
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 @override 60 @override
61 int get hashCode => uri.hashCode; 61 int get hashCode => uri.hashCode;
62 62
63 @override 63 @override
64 bool operator ==(Object other) => 64 bool operator ==(Object other) =>
65 other is MemoryFileSystemEntity && 65 other is MemoryFileSystemEntity &&
66 other.uri == uri && 66 other.uri == uri &&
67 identical(other._fileSystem, _fileSystem); 67 identical(other._fileSystem, _fileSystem);
68 68
69 @override 69 @override
70 Future<List<int>> readAsBytes() async {
71 List<int> contents = _fileSystem._files[uri];
72 if (contents != null) {
73 return contents.toList();
74 }
75 throw new Exception('File does not exist');
76 }
77
78 @override
79 Future<String> readAsString() async {
80 List<int> contents = await readAsBytes();
81 return UTF8.decode(contents);
82 }
83
84 @override
85 Future<bool> exists() async => _fileSystem._files[uri] != null; 70 Future<bool> exists() async => _fileSystem._files[uri] != null;
86 71
87 @override 72 @override
88 Future<DateTime> lastModified() async { 73 Future<DateTime> lastModified() async {
89 var lastModified = _fileSystem._lastModified[uri]; 74 var lastModified = _fileSystem._lastModified[uri];
90 if (lastModified == null) { 75 if (lastModified == null) {
91 throw new Exception('File does not exist'); 76 throw new FileSystemException(uri, 'File $uri does not exist.');
92 } 77 }
93 return lastModified; 78 return lastModified;
94 } 79 }
95 80
81 @override
82 Future<List<int>> readAsBytes() async {
83 List<int> contents = _fileSystem._files[uri];
84 if (contents == null) {
85 throw new FileSystemException(uri, 'File $uri does not exist.');
86 }
87 return contents.toList();
88 }
89
90 @override
91 Future<String> readAsString() async {
92 List<int> bytes = await readAsBytes();
93 try {
94 return UTF8.decode(bytes);
95 } on FormatException catch (e) {
96 throw new FileSystemException(uri, e.message);
97 }
98 }
99
96 /// Writes the given raw bytes to this file system entity. 100 /// Writes the given raw bytes to this file system entity.
97 /// 101 ///
98 /// If no file exists, one is created. If a file exists already, it is 102 /// If no file exists, one is created. If a file exists already, it is
99 /// overwritten. 103 /// overwritten.
100 void writeAsBytesSync(List<int> bytes) { 104 void writeAsBytesSync(List<int> bytes) {
101 _update(uri, new Uint8List.fromList(bytes)); 105 _update(uri, new Uint8List.fromList(bytes));
102 } 106 }
103 107
104 /// Writes the given string to this file system entity. 108 /// Writes the given string to this file system entity.
105 /// 109 ///
106 /// The string is encoded as UTF-8. 110 /// The string is encoded as UTF-8.
107 /// 111 ///
108 /// If no file exists, one is created. If a file exists already, it is 112 /// If no file exists, one is created. If a file exists already, it is
109 /// overwritten. 113 /// overwritten.
110 void writeAsStringSync(String s) { 114 void writeAsStringSync(String s) {
111 // Note: the return type of UTF8.encode is List<int>, but in practice it 115 // Note: the return type of UTF8.encode is List<int>, but in practice it
112 // always returns Uint8List. We rely on that for efficiency, so that we 116 // always returns Uint8List. We rely on that for efficiency, so that we
113 // don't have to make an extra copy. 117 // don't have to make an extra copy.
114 _update(uri, UTF8.encode(s) as Uint8List); 118 _update(uri, UTF8.encode(s) as Uint8List);
115 } 119 }
116 120
117 void _update(Uri uri, Uint8List data) { 121 void _update(Uri uri, Uint8List data) {
118 _fileSystem._files[uri] = data; 122 _fileSystem._files[uri] = data;
119 _fileSystem._lastModified[uri] = 123 _fileSystem._lastModified[uri] =
120 new DateTime.fromMicrosecondsSinceEpoch(++_fileSystem._lastUpdate); 124 new DateTime.fromMicrosecondsSinceEpoch(++_fileSystem._lastUpdate);
121 } 125 }
122 } 126 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/file_system.dart ('k') | pkg/front_end/lib/physical_file_system.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698