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

Side by Side Diff: packages/analyzer/lib/file_system/memory_file_system.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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
OLDNEW
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 memory_file_system; 5 library 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 } 65 }
66 66
67 @override 67 @override
68 File getFile(String path) => new _MemoryFile(this, path); 68 File getFile(String path) => new _MemoryFile(this, path);
69 69
70 @override 70 @override
71 Folder getFolder(String path) => newFolder(path); 71 Folder getFolder(String path) => newFolder(path);
72 72
73 @override 73 @override
74 Resource getResource(String path) { 74 Resource getResource(String path) {
75 path = posix.normalize(path); 75 path = pathContext.normalize(path);
76 Resource resource = _pathToResource[path]; 76 Resource resource = _pathToResource[path];
77 if (resource == null) { 77 if (resource == null) {
78 resource = new _MemoryFile(this, path); 78 resource = new _MemoryFile(this, path);
79 } 79 }
80 return resource; 80 return resource;
81 } 81 }
82 82
83 @override 83 @override
84 Folder getStateLocation(String pluginId) { 84 Folder getStateLocation(String pluginId) {
85 return newFolder('/user/home/$pluginId'); 85 return newFolder('/user/home/$pluginId');
86 } 86 }
87 87
88 void modifyFile(String path, String content) { 88 void modifyFile(String path, String content) {
89 _checkFileAtPath(path); 89 _checkFileAtPath(path);
90 _pathToContent[path] = content; 90 _pathToContent[path] = content;
91 _pathToTimestamp[path] = nextStamp++; 91 _pathToTimestamp[path] = nextStamp++;
92 _notifyWatchers(path, ChangeType.MODIFY); 92 _notifyWatchers(path, ChangeType.MODIFY);
93 } 93 }
94 94
95 /** 95 /**
96 * Create a resource representing a dummy link (that is, a File object which 96 * Create a resource representing a dummy link (that is, a File object which
97 * appears in its parent directory, but whose `exists` property is false) 97 * appears in its parent directory, but whose `exists` property is false)
98 */ 98 */
99 File newDummyLink(String path) { 99 File newDummyLink(String path) {
100 path = posix.normalize(path); 100 path = pathContext.normalize(path);
101 newFolder(posix.dirname(path)); 101 newFolder(pathContext.dirname(path));
102 _MemoryDummyLink link = new _MemoryDummyLink(this, path); 102 _MemoryDummyLink link = new _MemoryDummyLink(this, path);
103 _pathToResource[path] = link; 103 _pathToResource[path] = link;
104 _pathToTimestamp[path] = nextStamp++; 104 _pathToTimestamp[path] = nextStamp++;
105 _notifyWatchers(path, ChangeType.ADD); 105 _notifyWatchers(path, ChangeType.ADD);
106 return link; 106 return link;
107 } 107 }
108 108
109 File newFile(String path, String content, [int stamp]) { 109 File newFile(String path, String content, [int stamp]) {
110 path = posix.normalize(path); 110 path = pathContext.normalize(path);
111 newFolder(posix.dirname(path)); 111 _MemoryResource folder = _pathToResource[pathContext.dirname(path)];
112 if (folder == null) {
113 newFolder(pathContext.dirname(path));
114 } else if (folder is! Folder) {
115 throw new ArgumentError('Cannot create file ($path) as child of file');
116 }
112 _MemoryFile file = new _MemoryFile(this, path); 117 _MemoryFile file = new _MemoryFile(this, path);
113 _pathToResource[path] = file; 118 _pathToResource[path] = file;
114 _pathToContent[path] = content; 119 _pathToContent[path] = content;
115 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++; 120 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++;
116 _notifyWatchers(path, ChangeType.ADD); 121 _notifyWatchers(path, ChangeType.ADD);
117 return file; 122 return file;
118 } 123 }
119 124
120 Folder newFolder(String path) { 125 Folder newFolder(String path) {
121 path = posix.normalize(path); 126 path = pathContext.normalize(path);
122 if (!path.startsWith('/')) { 127 if (!path.startsWith(pathContext.separator)) {
123 throw new ArgumentError("Path must start with '/'"); 128 throw new ArgumentError(
129 "Path must start with '${pathContext.separator}' : $path");
124 } 130 }
125 _MemoryResource resource = _pathToResource[path]; 131 _MemoryResource resource = _pathToResource[path];
126 if (resource == null) { 132 if (resource == null) {
127 String parentPath = posix.dirname(path); 133 String parentPath = pathContext.dirname(path);
128 if (parentPath != path) { 134 if (parentPath != path) {
129 newFolder(parentPath); 135 newFolder(parentPath);
130 } 136 }
131 _MemoryFolder folder = new _MemoryFolder(this, path); 137 _MemoryFolder folder = new _MemoryFolder(this, path);
132 _pathToResource[path] = folder; 138 _pathToResource[path] = folder;
133 _pathToTimestamp[path] = nextStamp++; 139 _pathToTimestamp[path] = nextStamp++;
140 _notifyWatchers(path, ChangeType.ADD);
134 return folder; 141 return folder;
135 } else if (resource is _MemoryFolder) { 142 } else if (resource is _MemoryFolder) {
143 _notifyWatchers(path, ChangeType.ADD);
136 return resource; 144 return resource;
137 } else { 145 } else {
138 String message = 146 String message =
139 'Folder expected at ' "'$path'" 'but ${resource.runtimeType} found'; 147 'Folder expected at ' "'$path'" 'but ${resource.runtimeType} found';
140 throw new ArgumentError(message); 148 throw new ArgumentError(message);
141 } 149 }
142 } 150 }
143 151
144 File updateFile(String path, String content, [int stamp]) { 152 File updateFile(String path, String content, [int stamp]) {
145 path = posix.normalize(path); 153 path = pathContext.normalize(path);
146 newFolder(posix.dirname(path)); 154 newFolder(pathContext.dirname(path));
147 _MemoryFile file = new _MemoryFile(this, path); 155 _MemoryFile file = new _MemoryFile(this, path);
148 _pathToResource[path] = file; 156 _pathToResource[path] = file;
149 _pathToContent[path] = content; 157 _pathToContent[path] = content;
150 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++; 158 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++;
151 _notifyWatchers(path, ChangeType.MODIFY); 159 _notifyWatchers(path, ChangeType.MODIFY);
152 return file; 160 return file;
153 } 161 }
154 162
155 void _checkFileAtPath(String path) { 163 void _checkFileAtPath(String path) {
156 _MemoryResource resource = _pathToResource[path]; 164 _MemoryResource resource = _pathToResource[path];
157 if (resource is! _MemoryFile) { 165 if (resource is! _MemoryFile) {
158 throw new ArgumentError( 166 throw new ArgumentError(
159 'File expected at "$path" but ${resource.runtimeType} found'); 167 'File expected at "$path" but ${resource.runtimeType} found');
160 } 168 }
161 } 169 }
162 170
163 void _checkFolderAtPath(String path) { 171 void _checkFolderAtPath(String path) {
164 _MemoryResource resource = _pathToResource[path]; 172 _MemoryResource resource = _pathToResource[path];
165 if (resource is! _MemoryFolder) { 173 if (resource is! _MemoryFolder) {
166 throw new ArgumentError( 174 throw new ArgumentError(
167 'Folder expected at "$path" but ${resource.runtimeType} found'); 175 'Folder expected at "$path" but ${resource.runtimeType} found');
168 } 176 }
169 } 177 }
170 178
171 void _notifyWatchers(String path, ChangeType changeType) { 179 void _notifyWatchers(String path, ChangeType changeType) {
172 _pathToWatchers.forEach((String watcherPath, 180 _pathToWatchers.forEach((String watcherPath,
173 List<StreamController<WatchEvent>> streamControllers) { 181 List<StreamController<WatchEvent>> streamControllers) {
174 if (watcherPath == path || posix.isWithin(watcherPath, path)) { 182 if (watcherPath == path || pathContext.isWithin(watcherPath, path)) {
175 for (StreamController<WatchEvent> streamController 183 for (StreamController<WatchEvent> streamController
176 in streamControllers) { 184 in streamControllers) {
177 streamController.add(new WatchEvent(changeType, path)); 185 streamController.add(new WatchEvent(changeType, path));
178 } 186 }
179 } 187 }
180 }); 188 });
181 } 189 }
182 } 190 }
183 191
184 /** 192 /**
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 String content = _provider._pathToContent[path]; 255 String content = _provider._pathToContent[path];
248 if (content == null) { 256 if (content == null) {
249 throw new FileSystemException(path, 'File "$path" does not exist.'); 257 throw new FileSystemException(path, 'File "$path" does not exist.');
250 } 258 }
251 return content; 259 return content;
252 } 260 }
253 261
254 @override 262 @override
255 Source createSource([Uri uri]) { 263 Source createSource([Uri uri]) {
256 if (uri == null) { 264 if (uri == null) {
257 uri = posix.toUri(path); 265 uri = _provider.pathContext.toUri(path);
258 } 266 }
259 return new _MemoryFileSource(this, uri); 267 return new _MemoryFileSource(this, uri);
260 } 268 }
261 269
262 @override 270 @override
263 bool isOrContains(String path) { 271 bool isOrContains(String path) {
264 return path == this.path; 272 return path == this.path;
265 } 273 }
266 274
267 @override 275 @override
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 */ 375 */
368 class _MemoryFolder extends _MemoryResource implements Folder { 376 class _MemoryFolder extends _MemoryResource implements Folder {
369 _MemoryFolder(MemoryResourceProvider provider, String path) 377 _MemoryFolder(MemoryResourceProvider provider, String path)
370 : super(provider, path); 378 : super(provider, path);
371 379
372 @override 380 @override
373 bool get exists => _provider._pathToResource[path] is _MemoryFolder; 381 bool get exists => _provider._pathToResource[path] is _MemoryFolder;
374 382
375 @override 383 @override
376 String canonicalizePath(String relPath) { 384 String canonicalizePath(String relPath) {
377 relPath = posix.normalize(relPath); 385 relPath = _provider.pathContext.normalize(relPath);
378 String childPath = posix.join(path, relPath); 386 String childPath = _provider.pathContext.join(path, relPath);
379 childPath = posix.normalize(childPath); 387 childPath = _provider.pathContext.normalize(childPath);
380 return childPath; 388 return childPath;
381 } 389 }
382 390
383 @override 391 @override
384 bool contains(String path) { 392 bool contains(String path) {
385 return posix.isWithin(this.path, path); 393 return _provider.pathContext.isWithin(this.path, path);
386 } 394 }
387 395
388 @override 396 @override
389 Resource getChild(String relPath) { 397 Resource getChild(String relPath) {
390 String childPath = canonicalizePath(relPath); 398 String childPath = canonicalizePath(relPath);
391 _MemoryResource resource = _provider._pathToResource[childPath]; 399 _MemoryResource resource = _provider._pathToResource[childPath];
392 if (resource == null) { 400 if (resource == null) {
393 resource = new _MemoryFile(_provider, childPath); 401 resource = new _MemoryFile(_provider, childPath);
394 } 402 }
395 return resource; 403 return resource;
396 } 404 }
397 405
398 @override 406 @override
399 _MemoryFolder getChildAssumingFolder(String relPath) { 407 _MemoryFolder getChildAssumingFolder(String relPath) {
400 String childPath = canonicalizePath(relPath); 408 String childPath = canonicalizePath(relPath);
401 _MemoryResource resource = _provider._pathToResource[childPath]; 409 _MemoryResource resource = _provider._pathToResource[childPath];
402 if (resource is _MemoryFolder) { 410 if (resource is _MemoryFolder) {
403 return resource; 411 return resource;
404 } 412 }
405 return new _MemoryFolder(_provider, childPath); 413 return new _MemoryFolder(_provider, childPath);
406 } 414 }
407 415
408 @override 416 @override
409 List<Resource> getChildren() { 417 List<Resource> getChildren() {
410 if (!exists) { 418 if (!exists) {
411 throw new FileSystemException(path, 'Folder does not exist.'); 419 throw new FileSystemException(path, 'Folder does not exist.');
412 } 420 }
413 List<Resource> children = <Resource>[]; 421 List<Resource> children = <Resource>[];
414 _provider._pathToResource.forEach((resourcePath, resource) { 422 _provider._pathToResource.forEach((resourcePath, resource) {
415 if (posix.dirname(resourcePath) == path) { 423 if (_provider.pathContext.dirname(resourcePath) == path) {
416 children.add(resource); 424 children.add(resource);
417 } 425 }
418 }); 426 });
419 return children; 427 return children;
420 } 428 }
421 429
422 @override 430 @override
423 bool isOrContains(String path) { 431 bool isOrContains(String path) {
424 if (path == this.path) { 432 if (path == this.path) {
425 return true; 433 return true;
(...skipping 25 matching lines...) Expand all
451 } 459 }
452 }); 460 });
453 return streamController.stream; 461 return streamController.stream;
454 } 462 }
455 463
456 @override 464 @override
457 get hashCode => path.hashCode; 465 get hashCode => path.hashCode;
458 466
459 @override 467 @override
460 Folder get parent { 468 Folder get parent {
461 String parentPath = posix.dirname(path); 469 String parentPath = _provider.pathContext.dirname(path);
462 if (parentPath == path) { 470 if (parentPath == path) {
463 return null; 471 return null;
464 } 472 }
465 return _provider.getResource(parentPath); 473 return _provider.getResource(parentPath);
466 } 474 }
467 475
468 @override 476 @override
469 String get shortName => posix.basename(path); 477 String get shortName => _provider.pathContext.basename(path);
470 478
471 @override 479 @override
472 bool operator ==(other) { 480 bool operator ==(other) {
473 if (runtimeType != other.runtimeType) { 481 if (runtimeType != other.runtimeType) {
474 return false; 482 return false;
475 } 483 }
476 return path == other.path; 484 return path == other.path;
477 } 485 }
478 486
479 @override 487 @override
480 String toString() => path; 488 String toString() => path;
481 } 489 }
OLDNEW
« no previous file with comments | « packages/analyzer/lib/file_system/file_system.dart ('k') | packages/analyzer/lib/file_system/physical_file_system.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698