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 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 @override | 153 @override |
154 bool get exists => false; | 154 bool get exists => false; |
155 | 155 |
156 String get _content { | 156 String get _content { |
157 throw new MemoryResourceException(path, "File '$path' could not be read"); | 157 throw new MemoryResourceException(path, "File '$path' could not be read"); |
158 } | 158 } |
159 | 159 |
160 int get _timestamp => _provider._pathToTimestamp[path]; | 160 int get _timestamp => _provider._pathToTimestamp[path]; |
161 | 161 |
162 @override | 162 @override |
163 Source createSource(UriKind uriKind) { | 163 Source createSource([Uri uri]) { |
164 throw new MemoryResourceException(path, "File '$path' could not be read"); | 164 throw new MemoryResourceException(path, "File '$path' could not be read"); |
165 } | 165 } |
166 } | 166 } |
167 | 167 |
168 | 168 |
169 /** | 169 /** |
170 * An in-memory implementation of [File]. | 170 * An in-memory implementation of [File]. |
171 */ | 171 */ |
172 class _MemoryFile extends _MemoryResource implements File { | 172 class _MemoryFile extends _MemoryResource implements File { |
173 _MemoryFile(MemoryResourceProvider provider, String path) : | 173 _MemoryFile(MemoryResourceProvider provider, String path) : |
174 super(provider, path); | 174 super(provider, path); |
175 | 175 |
176 String get _content { | 176 String get _content { |
177 String content = _provider._pathToContent[path]; | 177 String content = _provider._pathToContent[path]; |
178 if (content == null) { | 178 if (content == null) { |
179 throw new MemoryResourceException(path, "File '$path' does not exist"); | 179 throw new MemoryResourceException(path, "File '$path' does not exist"); |
180 } | 180 } |
181 return content; | 181 return content; |
182 } | 182 } |
183 | 183 |
184 int get _timestamp => _provider._pathToTimestamp[path]; | 184 int get _timestamp => _provider._pathToTimestamp[path]; |
185 | 185 |
186 @override | 186 @override |
187 Source createSource(UriKind uriKind) { | 187 Source createSource([Uri uri]) { |
188 return new _MemoryFileSource(this, uriKind); | 188 if (uri == null) { |
| 189 uri = toUri(path); |
| 190 } |
| 191 return new _MemoryFileSource(this, uri); |
189 } | 192 } |
190 } | 193 } |
191 | 194 |
192 | 195 |
193 /** | 196 /** |
194 * An in-memory implementation of [Source]. | 197 * An in-memory implementation of [Source]. |
195 */ | 198 */ |
196 class _MemoryFileSource implements Source { | 199 class _MemoryFileSource implements Source { |
197 final _MemoryFile _file; | 200 final _MemoryFile _file; |
198 | 201 |
199 final UriKind uriKind; | 202 final Uri uri; |
200 | 203 |
201 _MemoryFileSource(this._file, this.uriKind); | 204 _MemoryFileSource(this._file, this.uri); |
202 | 205 |
203 @override | 206 @override |
204 TimestampedData<String> get contents { | 207 TimestampedData<String> get contents { |
205 return new TimestampedData<String>(modificationStamp, _file._content); | 208 return new TimestampedData<String>(modificationStamp, _file._content); |
206 } | 209 } |
207 | 210 |
208 @override | 211 @override |
209 String get encoding { | 212 String get encoding { |
210 return '${new String.fromCharCode(uriKind.encoding)}${_file.path}'; | 213 return uri.toString(); |
211 } | 214 } |
212 | 215 |
213 @override | 216 @override |
214 String get fullName => _file.path; | 217 String get fullName => _file.path; |
215 | 218 |
216 @override | 219 @override |
217 int get hashCode => _file.hashCode; | 220 int get hashCode => _file.hashCode; |
218 | 221 |
219 @override | 222 @override |
220 bool get isInSystemLibrary => uriKind == UriKind.DART_URI; | 223 bool get isInSystemLibrary => uriKind == UriKind.DART_URI; |
221 | 224 |
222 @override | 225 @override |
223 int get modificationStamp => _file._timestamp; | 226 int get modificationStamp => _file._timestamp; |
224 | 227 |
225 @override | 228 @override |
226 String get shortName => _file.shortName; | 229 String get shortName => _file.shortName; |
227 | 230 |
228 @override | 231 @override |
| 232 UriKind get uriKind { |
| 233 String scheme = uri.scheme; |
| 234 if (scheme == PackageUriResolver.PACKAGE_SCHEME) { |
| 235 return UriKind.PACKAGE_URI; |
| 236 } else if (scheme == DartUriResolver.DART_SCHEME) { |
| 237 return UriKind.DART_URI; |
| 238 } else if (scheme == FileUriResolver.FILE_SCHEME) { |
| 239 return UriKind.FILE_URI; |
| 240 } |
| 241 return UriKind.FILE_URI; |
| 242 } |
| 243 |
| 244 @override |
229 bool operator ==(other) { | 245 bool operator ==(other) { |
230 if (other is _MemoryFileSource) { | 246 if (other is _MemoryFileSource) { |
231 return other._file == _file; | 247 return other._file == _file; |
232 } | 248 } |
233 return false; | 249 return false; |
234 } | 250 } |
235 | 251 |
236 @override | 252 @override |
237 bool exists() => _file.exists; | 253 bool exists() => _file.exists; |
238 | 254 |
239 @override | 255 @override |
240 Source resolveRelative(Uri relativeUri) { | 256 Uri resolveRelativeUri(Uri relativeUri) { |
241 String relativePath = posix.fromUri(relativeUri); | 257 return uri.resolveUri(relativeUri); |
242 String folderPath = posix.dirname(_file.path); | |
243 String path = posix.join(folderPath, relativePath); | |
244 path = posix.normalize(path); | |
245 _MemoryFile file = new _MemoryFile(_file._provider, path); | |
246 return new _MemoryFileSource(file, uriKind); | |
247 } | 258 } |
248 } | 259 } |
249 | 260 |
250 | 261 |
251 /** | 262 /** |
252 * An in-memory implementation of [Folder]. | 263 * An in-memory implementation of [Folder]. |
253 */ | 264 */ |
254 class _MemoryFolder extends _MemoryResource implements Folder { | 265 class _MemoryFolder extends _MemoryResource implements Folder { |
255 _MemoryFolder(MemoryResourceProvider provider, String path) : | 266 _MemoryFolder(MemoryResourceProvider provider, String path) : |
256 super(provider, path); | 267 super(provider, path); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 bool operator ==(other) { | 343 bool operator ==(other) { |
333 if (runtimeType != other.runtimeType) { | 344 if (runtimeType != other.runtimeType) { |
334 return false; | 345 return false; |
335 } | 346 } |
336 return path == other.path; | 347 return path == other.path; |
337 } | 348 } |
338 | 349 |
339 @override | 350 @override |
340 String toString() => path; | 351 String toString() => path; |
341 } | 352 } |
OLD | NEW |