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:convert'; | 9 import 'dart:convert'; |
10 import 'dart:core'; | 10 import 'dart:core'; |
11 | 11 |
12 import 'package:analyzer/file_system/file_system.dart'; | 12 import 'package:analyzer/file_system/file_system.dart'; |
13 import 'package:analyzer/src/generated/source_io.dart'; | 13 import 'package:analyzer/src/generated/source_io.dart'; |
14 import 'package:analyzer/src/source/source_resource.dart'; | 14 import 'package:analyzer/src/source/source_resource.dart'; |
15 import 'package:analyzer/src/util/absolute_path.dart'; | 15 import 'package:analyzer/src/util/absolute_path.dart'; |
16 import 'package:path/path.dart'; | 16 import 'package:path/path.dart' as pathos; |
17 import 'package:watcher/watcher.dart'; | 17 import 'package:watcher/watcher.dart'; |
18 | 18 |
19 /** | 19 /** |
20 * An in-memory implementation of [ResourceProvider]. | 20 * An in-memory implementation of [ResourceProvider]. |
21 * Use `/` as a path separator. | 21 * Use `/` as a path separator. |
22 */ | 22 */ |
23 class MemoryResourceProvider implements ResourceProvider { | 23 class MemoryResourceProvider implements ResourceProvider { |
24 final Map<String, _MemoryResource> _pathToResource = | 24 final Map<String, _MemoryResource> _pathToResource = |
25 new HashMap<String, _MemoryResource>(); | 25 new HashMap<String, _MemoryResource>(); |
26 final Map<String, List<int>> _pathToBytes = new HashMap<String, List<int>>(); | 26 final Map<String, List<int>> _pathToBytes = new HashMap<String, List<int>>(); |
27 final Map<String, int> _pathToTimestamp = new HashMap<String, int>(); | 27 final Map<String, int> _pathToTimestamp = new HashMap<String, int>(); |
28 final Map<String, List<StreamController<WatchEvent>>> _pathToWatchers = | 28 final Map<String, List<StreamController<WatchEvent>>> _pathToWatchers = |
29 new HashMap<String, List<StreamController<WatchEvent>>>(); | 29 new HashMap<String, List<StreamController<WatchEvent>>>(); |
30 int nextStamp = 0; | 30 int nextStamp = 0; |
31 | 31 |
32 final Context _pathContext; | 32 final pathos.Context _pathContext; |
33 | 33 |
34 @override | 34 @override |
35 final AbsolutePathContext absolutePathContext; | 35 final AbsolutePathContext absolutePathContext; |
36 | 36 |
37 MemoryResourceProvider({bool isWindows: false}) | 37 MemoryResourceProvider({pathos.Context context}) |
38 : _pathContext = isWindows ? windows : posix, | 38 : _pathContext = context ?? pathos.context, |
39 absolutePathContext = new AbsolutePathContext(isWindows); | 39 absolutePathContext = new AbsolutePathContext( |
| 40 pathos.Style.platform == pathos.Style.windows); |
40 | 41 |
41 @override | 42 @override |
42 Context get pathContext => _pathContext; | 43 pathos.Context get pathContext => _pathContext; |
43 | 44 |
44 /** | 45 /** |
45 * Delete the file with the given path. | 46 * Delete the file with the given path. |
46 */ | 47 */ |
47 void deleteFile(String path) { | 48 void deleteFile(String path) { |
48 _checkFileAtPath(path); | 49 _checkFileAtPath(path); |
49 _pathToResource.remove(path); | 50 _pathToResource.remove(path); |
50 _pathToBytes.remove(path); | 51 _pathToBytes.remove(path); |
51 _pathToTimestamp.remove(path); | 52 _pathToTimestamp.remove(path); |
52 _notifyWatchers(path, ChangeType.REMOVE); | 53 _notifyWatchers(path, ChangeType.REMOVE); |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 File renameSync(String newPath) { | 318 File renameSync(String newPath) { |
318 throw new FileSystemException(path, 'File could not be renamed'); | 319 throw new FileSystemException(path, 'File could not be renamed'); |
319 } | 320 } |
320 | 321 |
321 @override | 322 @override |
322 File resolveSymbolicLinksSync() { | 323 File resolveSymbolicLinksSync() { |
323 return throw new FileSystemException(path, "File does not exist"); | 324 return throw new FileSystemException(path, "File does not exist"); |
324 } | 325 } |
325 | 326 |
326 @override | 327 @override |
327 Uri toUri() => new Uri.file(path, windows: _provider.pathContext == windows); | 328 Uri toUri() => |
| 329 new Uri.file(path, windows: _provider.pathContext == pathos.windows); |
328 | 330 |
329 @override | 331 @override |
330 void writeAsBytesSync(List<int> bytes) { | 332 void writeAsBytesSync(List<int> bytes) { |
331 throw new FileSystemException(path, 'File could not be written'); | 333 throw new FileSystemException(path, 'File could not be written'); |
332 } | 334 } |
333 | 335 |
334 @override | 336 @override |
335 void writeAsStringSync(String content) { | 337 void writeAsStringSync(String content) { |
336 throw new FileSystemException(path, 'File could not be written'); | 338 throw new FileSystemException(path, 'File could not be written'); |
337 } | 339 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 | 394 |
393 @override | 395 @override |
394 File renameSync(String newPath) { | 396 File renameSync(String newPath) { |
395 return _provider.renameFileSync(this, newPath); | 397 return _provider.renameFileSync(this, newPath); |
396 } | 398 } |
397 | 399 |
398 @override | 400 @override |
399 File resolveSymbolicLinksSync() => this; | 401 File resolveSymbolicLinksSync() => this; |
400 | 402 |
401 @override | 403 @override |
402 Uri toUri() => new Uri.file(path, windows: _provider.pathContext == windows); | 404 Uri toUri() => |
| 405 new Uri.file(path, windows: _provider.pathContext == pathos.windows); |
403 | 406 |
404 @override | 407 @override |
405 void writeAsBytesSync(List<int> bytes) { | 408 void writeAsBytesSync(List<int> bytes) { |
406 _provider._setFileContent(this, bytes); | 409 _provider._setFileContent(this, bytes); |
407 } | 410 } |
408 | 411 |
409 @override | 412 @override |
410 void writeAsStringSync(String content) { | 413 void writeAsStringSync(String content) { |
411 _provider._setFileContent(this, UTF8.encode(content)); | 414 _provider._setFileContent(this, UTF8.encode(content)); |
412 } | 415 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 return true; | 493 return true; |
491 } | 494 } |
492 return contains(path); | 495 return contains(path); |
493 } | 496 } |
494 | 497 |
495 @override | 498 @override |
496 Folder resolveSymbolicLinksSync() => this; | 499 Folder resolveSymbolicLinksSync() => this; |
497 | 500 |
498 @override | 501 @override |
499 Uri toUri() => | 502 Uri toUri() => |
500 new Uri.directory(path, windows: _provider.pathContext == windows); | 503 new Uri.directory(path, windows: _provider.pathContext == pathos.windows); |
501 } | 504 } |
502 | 505 |
503 /** | 506 /** |
504 * An in-memory implementation of [Resource]. | 507 * An in-memory implementation of [Resource]. |
505 */ | 508 */ |
506 abstract class _MemoryResource implements Resource { | 509 abstract class _MemoryResource implements Resource { |
507 final MemoryResourceProvider _provider; | 510 final MemoryResourceProvider _provider; |
508 @override | 511 @override |
509 final String path; | 512 final String path; |
510 | 513 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 bool operator ==(other) { | 548 bool operator ==(other) { |
546 if (runtimeType != other.runtimeType) { | 549 if (runtimeType != other.runtimeType) { |
547 return false; | 550 return false; |
548 } | 551 } |
549 return path == other.path; | 552 return path == other.path; |
550 } | 553 } |
551 | 554 |
552 @override | 555 @override |
553 String toString() => path; | 556 String toString() => path; |
554 } | 557 } |
OLD | NEW |