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

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

Issue 941883002: cache pub list results (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 5 years, 10 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 | Annotate | Revision Log
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 9
10 import 'package:analyzer/src/generated/engine.dart' show TimestampedData; 10 import 'package:analyzer/src/generated/engine.dart' show TimestampedData;
(...skipping 13 matching lines...) Expand all
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 @override 31 @override
32 Context get pathContext => posix; 32 Context get pathContext => posix;
33 33
34 /**
35 * Delete the file with the given path.
36 */
34 void deleteFile(String path) { 37 void deleteFile(String path) {
35 _checkFileAtPath(path); 38 _checkFileAtPath(path);
36 _pathToResource.remove(path); 39 _pathToResource.remove(path);
37 _pathToContent.remove(path); 40 _pathToContent.remove(path);
38 _pathToTimestamp.remove(path); 41 _pathToTimestamp.remove(path);
39 _notifyWatchers(path, ChangeType.REMOVE); 42 _notifyWatchers(path, ChangeType.REMOVE);
40 } 43 }
41 44
45 /**
46 * Delete the folder with the given path
47 * and recurively delete nested files and folders.
48 */
49 void deleteFolder(String path) {
50 _checkFolderAtPath(path);
51 _MemoryFolder folder = _pathToResource[path];
52 for (Resource child in folder.getChildren()) {
53 if (child is File) {
54 deleteFile(child.path);
55 } else if (child is Folder) {
56 deleteFolder(child.path);
57 } else {
58 throw 'failed to delete resource: $child';
59 }
60 }
61 _pathToResource.remove(path);
62 _pathToContent.remove(path);
63 _pathToTimestamp.remove(path);
64 _notifyWatchers(path, ChangeType.REMOVE);
65 }
66
42 @override 67 @override
43 Resource getResource(String path) { 68 Resource getResource(String path) {
44 path = posix.normalize(path); 69 path = posix.normalize(path);
45 Resource resource = _pathToResource[path]; 70 Resource resource = _pathToResource[path];
46 if (resource == null) { 71 if (resource == null) {
47 resource = new _MemoryFile(this, path); 72 resource = new _MemoryFile(this, path);
48 } 73 }
49 return resource; 74 return resource;
50 } 75 }
51 76
(...skipping 16 matching lines...) Expand all
68 File newDummyLink(String path) { 93 File newDummyLink(String path) {
69 path = posix.normalize(path); 94 path = posix.normalize(path);
70 newFolder(posix.dirname(path)); 95 newFolder(posix.dirname(path));
71 _MemoryDummyLink link = new _MemoryDummyLink(this, path); 96 _MemoryDummyLink link = new _MemoryDummyLink(this, path);
72 _pathToResource[path] = link; 97 _pathToResource[path] = link;
73 _pathToTimestamp[path] = nextStamp++; 98 _pathToTimestamp[path] = nextStamp++;
74 _notifyWatchers(path, ChangeType.ADD); 99 _notifyWatchers(path, ChangeType.ADD);
75 return link; 100 return link;
76 } 101 }
77 102
78 File newFile(String path, String content) { 103 File newFile(String path, String content, [int stamp]) {
79 path = posix.normalize(path); 104 path = posix.normalize(path);
80 newFolder(posix.dirname(path)); 105 newFolder(posix.dirname(path));
81 _MemoryFile file = new _MemoryFile(this, path); 106 _MemoryFile file = new _MemoryFile(this, path);
82 _pathToResource[path] = file; 107 _pathToResource[path] = file;
83 _pathToContent[path] = content; 108 _pathToContent[path] = content;
84 _pathToTimestamp[path] = nextStamp++; 109 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++;
85 _notifyWatchers(path, ChangeType.ADD); 110 _notifyWatchers(path, ChangeType.ADD);
86 return file; 111 return file;
87 } 112 }
88 113
89 Folder newFolder(String path) { 114 Folder newFolder(String path) {
90 path = posix.normalize(path); 115 path = posix.normalize(path);
91 if (!path.startsWith('/')) { 116 if (!path.startsWith('/')) {
92 throw new ArgumentError("Path must start with '/'"); 117 throw new ArgumentError("Path must start with '/'");
93 } 118 }
94 _MemoryResource resource = _pathToResource[path]; 119 _MemoryResource resource = _pathToResource[path];
(...skipping 16 matching lines...) Expand all
111 } 136 }
112 137
113 void _checkFileAtPath(String path) { 138 void _checkFileAtPath(String path) {
114 _MemoryResource resource = _pathToResource[path]; 139 _MemoryResource resource = _pathToResource[path];
115 if (resource is! _MemoryFile) { 140 if (resource is! _MemoryFile) {
116 throw new ArgumentError( 141 throw new ArgumentError(
117 'File expected at "$path" but ${resource.runtimeType} found'); 142 'File expected at "$path" but ${resource.runtimeType} found');
118 } 143 }
119 } 144 }
120 145
146 void _checkFolderAtPath(String path) {
147 _MemoryResource resource = _pathToResource[path];
148 if (resource is! _MemoryFolder) {
149 throw new ArgumentError(
150 'Folder expected at "$path" but ${resource.runtimeType} found');
151 }
152 }
153
121 void _notifyWatchers(String path, ChangeType changeType) { 154 void _notifyWatchers(String path, ChangeType changeType) {
122 _pathToWatchers.forEach( 155 _pathToWatchers.forEach(
123 (String watcherPath, List<StreamController<WatchEvent>> streamController s) { 156 (String watcherPath, List<StreamController<WatchEvent>> streamController s) {
124 if (posix.isWithin(watcherPath, path)) { 157 if (posix.isWithin(watcherPath, path)) {
125 for (StreamController<WatchEvent> streamController in streamControllers) 158 for (StreamController<WatchEvent> streamController in streamControllers)
126 { 159 {
127 streamController.add(new WatchEvent(changeType, path)); 160 streamController.add(new WatchEvent(changeType, path));
128 } 161 }
129 } 162 }
130 }); 163 });
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 bool operator ==(other) { 411 bool operator ==(other) {
379 if (runtimeType != other.runtimeType) { 412 if (runtimeType != other.runtimeType) {
380 return false; 413 return false;
381 } 414 }
382 return path == other.path; 415 return path == other.path;
383 } 416 }
384 417
385 @override 418 @override
386 String toString() => path; 419 String toString() => path;
387 } 420 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/test/test_all.dart ('k') | pkg/analyzer/lib/source/pub_package_map_provider.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698