OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 analyzer.file_system.memory_file_system; | 5 library analyzer.file_system.memory_file_system; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 import 'dart:core' hide Resource; | 9 import 'dart:core' hide Resource; |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 class MemoryResourceProvider implements ResourceProvider { | 22 class MemoryResourceProvider implements ResourceProvider { |
23 final Map<String, _MemoryResource> _pathToResource = | 23 final Map<String, _MemoryResource> _pathToResource = |
24 new HashMap<String, _MemoryResource>(); | 24 new HashMap<String, _MemoryResource>(); |
25 final Map<String, String> _pathToContent = new HashMap<String, String>(); | 25 final Map<String, String> _pathToContent = new HashMap<String, String>(); |
26 final Map<String, int> _pathToTimestamp = new HashMap<String, int>(); | 26 final Map<String, int> _pathToTimestamp = new HashMap<String, int>(); |
27 final Map<String, List<StreamController<WatchEvent>>> _pathToWatchers = | 27 final Map<String, List<StreamController<WatchEvent>>> _pathToWatchers = |
28 new HashMap<String, List<StreamController<WatchEvent>>>(); | 28 new HashMap<String, List<StreamController<WatchEvent>>>(); |
29 int nextStamp = 0; | 29 int nextStamp = 0; |
30 | 30 |
31 final Context _pathContext; | 31 final Context _pathContext; |
| 32 @override |
32 final AbsolutePathContext absolutePathContext; | 33 final AbsolutePathContext absolutePathContext; |
33 | 34 |
34 MemoryResourceProvider({bool isWindows: false}) | 35 MemoryResourceProvider({bool isWindows: false}) |
35 : _pathContext = isWindows ? windows : posix, | 36 : _pathContext = isWindows ? windows : posix, |
36 absolutePathContext = new AbsolutePathContext(isWindows); | 37 absolutePathContext = new AbsolutePathContext(isWindows); |
37 | 38 |
38 @override | 39 @override |
39 Context get pathContext => _pathContext; | 40 Context get pathContext => _pathContext; |
40 | 41 |
41 /** | 42 /** |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 : super(provider, path); | 205 : super(provider, path); |
205 | 206 |
206 @override | 207 @override |
207 Stream<WatchEvent> get changes { | 208 Stream<WatchEvent> get changes { |
208 throw new FileSystemException(path, "File does not exist"); | 209 throw new FileSystemException(path, "File does not exist"); |
209 } | 210 } |
210 | 211 |
211 @override | 212 @override |
212 bool get exists => false; | 213 bool get exists => false; |
213 | 214 |
| 215 @override |
214 int get modificationStamp { | 216 int get modificationStamp { |
215 int stamp = _provider._pathToTimestamp[path]; | 217 int stamp = _provider._pathToTimestamp[path]; |
216 if (stamp == null) { | 218 if (stamp == null) { |
217 throw new FileSystemException(path, "File does not exist"); | 219 throw new FileSystemException(path, "File does not exist"); |
218 } | 220 } |
219 return stamp; | 221 return stamp; |
220 } | 222 } |
221 | 223 |
222 String get _content { | 224 String get _content { |
223 throw new FileSystemException(path, 'File could not be read'); | 225 throw new FileSystemException(path, 'File could not be read'); |
(...skipping 18 matching lines...) Expand all Loading... |
242 /** | 244 /** |
243 * An in-memory implementation of [File]. | 245 * An in-memory implementation of [File]. |
244 */ | 246 */ |
245 class _MemoryFile extends _MemoryResource implements File { | 247 class _MemoryFile extends _MemoryResource implements File { |
246 _MemoryFile(MemoryResourceProvider provider, String path) | 248 _MemoryFile(MemoryResourceProvider provider, String path) |
247 : super(provider, path); | 249 : super(provider, path); |
248 | 250 |
249 @override | 251 @override |
250 bool get exists => _provider._pathToResource[path] is _MemoryFile; | 252 bool get exists => _provider._pathToResource[path] is _MemoryFile; |
251 | 253 |
| 254 @override |
252 int get modificationStamp { | 255 int get modificationStamp { |
253 int stamp = _provider._pathToTimestamp[path]; | 256 int stamp = _provider._pathToTimestamp[path]; |
254 if (stamp == null) { | 257 if (stamp == null) { |
255 throw new FileSystemException(path, 'File "$path" does not exist.'); | 258 throw new FileSystemException(path, 'File "$path" does not exist.'); |
256 } | 259 } |
257 return stamp; | 260 return stamp; |
258 } | 261 } |
259 | 262 |
260 String get _content { | 263 String get _content { |
261 String content = _provider._pathToContent[path]; | 264 String content = _provider._pathToContent[path]; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 * Map from encoded URI/filepath pair to a unique integer identifier. This | 299 * Map from encoded URI/filepath pair to a unique integer identifier. This |
297 * identifier is used for equality tests and hash codes. | 300 * identifier is used for equality tests and hash codes. |
298 * | 301 * |
299 * The URI and filepath are joined into a pair by separating them with an '@' | 302 * The URI and filepath are joined into a pair by separating them with an '@' |
300 * character. | 303 * character. |
301 */ | 304 */ |
302 static final Map<String, int> _idTable = new HashMap<String, int>(); | 305 static final Map<String, int> _idTable = new HashMap<String, int>(); |
303 | 306 |
304 final _MemoryFile file; | 307 final _MemoryFile file; |
305 | 308 |
| 309 @override |
306 final Uri uri; | 310 final Uri uri; |
307 | 311 |
308 /** | 312 /** |
309 * The unique ID associated with this [_MemoryFileSource]. | 313 * The unique ID associated with this [_MemoryFileSource]. |
310 */ | 314 */ |
311 final int id; | 315 final int id; |
312 | 316 |
313 _MemoryFileSource(_MemoryFile file, Uri uri) | 317 _MemoryFileSource(_MemoryFile file, Uri uri) |
314 : uri = uri, | 318 : uri = uri, |
315 file = file, | 319 file = file, |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 } | 450 } |
447 return contains(path); | 451 return contains(path); |
448 } | 452 } |
449 } | 453 } |
450 | 454 |
451 /** | 455 /** |
452 * An in-memory implementation of [Resource]. | 456 * An in-memory implementation of [Resource]. |
453 */ | 457 */ |
454 abstract class _MemoryResource implements Resource { | 458 abstract class _MemoryResource implements Resource { |
455 final MemoryResourceProvider _provider; | 459 final MemoryResourceProvider _provider; |
| 460 @override |
456 final String path; | 461 final String path; |
457 | 462 |
458 _MemoryResource(this._provider, this.path); | 463 _MemoryResource(this._provider, this.path); |
459 | 464 |
460 Stream<WatchEvent> get changes { | 465 Stream<WatchEvent> get changes { |
461 StreamController<WatchEvent> streamController = | 466 StreamController<WatchEvent> streamController = |
462 new StreamController<WatchEvent>(); | 467 new StreamController<WatchEvent>(); |
463 if (!_provider._pathToWatchers.containsKey(path)) { | 468 if (!_provider._pathToWatchers.containsKey(path)) { |
464 _provider._pathToWatchers[path] = <StreamController<WatchEvent>>[]; | 469 _provider._pathToWatchers[path] = <StreamController<WatchEvent>>[]; |
465 } | 470 } |
(...skipping 26 matching lines...) Expand all Loading... |
492 bool operator ==(other) { | 497 bool operator ==(other) { |
493 if (runtimeType != other.runtimeType) { | 498 if (runtimeType != other.runtimeType) { |
494 return false; | 499 return false; |
495 } | 500 } |
496 return path == other.path; | 501 return path == other.path; |
497 } | 502 } |
498 | 503 |
499 @override | 504 @override |
500 String toString() => path; | 505 String toString() => path; |
501 } | 506 } |
OLD | NEW |