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

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

Issue 2994643002: Add createDirectory() to MemoryFileSystemEntity. (Closed)
Patch Set: Created 3 years, 4 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 | « no previous file | pkg/front_end/test/memory_file_system_test.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
11 import 'file_system.dart'; 11 import 'file_system.dart';
12 12
13 /// Concrete implementation of [FileSystem] which performs its operations on an 13 /// Concrete implementation of [FileSystem] which performs its operations on an
14 /// in-memory virtual file system. 14 /// in-memory virtual file system.
15 /// 15 ///
16 /// Not intended to be implemented or extended by clients. 16 /// Not intended to be implemented or extended by clients.
17 class MemoryFileSystem implements FileSystem { 17 class MemoryFileSystem implements FileSystem {
18 final Map<Uri, Uint8List> _files = {}; 18 final Map<Uri, Uint8List> _files = {};
19 final Set<Uri> _directories = new Set<Uri>();
19 20
20 /// The "current directory" in the in-memory virtual file system. 21 /// The "current directory" in the in-memory virtual file system.
21 /// 22 ///
22 /// This is used to convert relative URIs to absolute URIs. 23 /// This is used to convert relative URIs to absolute URIs.
23 /// 24 ///
24 /// Always ends in a trailing '/'. 25 /// Always ends in a trailing '/'.
25 Uri currentDirectory; 26 Uri currentDirectory;
26 27
27 MemoryFileSystem(Uri currentDirectory) 28 MemoryFileSystem(Uri currentDirectory)
28 : currentDirectory = _addTrailingSlash(currentDirectory); 29 : currentDirectory = _addTrailingSlash(currentDirectory);
(...skipping 24 matching lines...) Expand all
53 54
54 @override 55 @override
55 int get hashCode => uri.hashCode; 56 int get hashCode => uri.hashCode;
56 57
57 @override 58 @override
58 bool operator ==(Object other) => 59 bool operator ==(Object other) =>
59 other is MemoryFileSystemEntity && 60 other is MemoryFileSystemEntity &&
60 other.uri == uri && 61 other.uri == uri &&
61 identical(other._fileSystem, _fileSystem); 62 identical(other._fileSystem, _fileSystem);
62 63
64 /// Create a directory for this file system entry.
65 ///
66 /// If the entry already exists, either as a file, or as a directory,
67 /// this is an error.
68 void createDirectory() {
69 if (_fileSystem._files[uri] != null) {
70 throw new FileSystemException(uri, 'Entry $uri is a file.');
71 }
72 if (_fileSystem._directories.contains(uri)) {
73 throw new FileSystemException(uri, 'Directory $uri already exists.');
74 }
75 _fileSystem._directories.add(uri);
76 }
77
63 @override 78 @override
64 Future<bool> exists() async => _fileSystem._files[uri] != null; 79 Future<bool> exists() async {
80 return _fileSystem._files[uri] != null ||
81 _fileSystem._directories.contains(uri);
82 }
65 83
66 @override 84 @override
67 Future<List<int>> readAsBytes() async { 85 Future<List<int>> readAsBytes() async {
68 List<int> contents = _fileSystem._files[uri]; 86 List<int> contents = _fileSystem._files[uri];
69 if (contents == null) { 87 if (contents == null) {
70 throw new FileSystemException(uri, 'File $uri does not exist.'); 88 throw new FileSystemException(uri, 'File $uri does not exist.');
71 } 89 }
72 return contents.toList(); 90 return contents.toList();
73 } 91 }
74 92
(...skipping 22 matching lines...) Expand all
97 /// If no file exists, one is created. If a file exists already, it is 115 /// If no file exists, one is created. If a file exists already, it is
98 /// overwritten. 116 /// overwritten.
99 void writeAsStringSync(String s) { 117 void writeAsStringSync(String s) {
100 // Note: the return type of UTF8.encode is List<int>, but in practice it 118 // Note: the return type of UTF8.encode is List<int>, but in practice it
101 // always returns Uint8List. We rely on that for efficiency, so that we 119 // always returns Uint8List. We rely on that for efficiency, so that we
102 // don't have to make an extra copy. 120 // don't have to make an extra copy.
103 _update(uri, UTF8.encode(s) as Uint8List); 121 _update(uri, UTF8.encode(s) as Uint8List);
104 } 122 }
105 123
106 void _update(Uri uri, Uint8List data) { 124 void _update(Uri uri, Uint8List data) {
125 if (_fileSystem._directories.contains(uri)) {
126 throw new FileSystemException(uri, 'Entry $uri is a directory.');
127 }
107 _fileSystem._files[uri] = data; 128 _fileSystem._files[uri] = data;
108 } 129 }
109 } 130 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/test/memory_file_system_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698