Chromium Code Reviews| 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 resource; | 5 library resource; |
| 6 | 6 |
| 7 import 'dart:io' as io; | 7 import 'dart:io' as io; |
| 8 | 8 |
| 9 import 'package:analyzer/src/generated/engine.dart' show TimestampedData; | 9 import 'package:analyzer/src/generated/engine.dart' show TimestampedData; |
| 10 import 'package:analyzer/src/generated/java_io.dart'; | 10 import 'package:analyzer/src/generated/java_io.dart'; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 93 @override | 93 @override |
| 94 bool get exists => _provider._pathToResource.containsKey(_path); | 94 bool get exists => _provider._pathToResource.containsKey(_path); |
| 95 | 95 |
| 96 @override | 96 @override |
| 97 String get fullName => _path; | 97 String get fullName => _path; |
| 98 | 98 |
| 99 @override | 99 @override |
| 100 get hashCode => _path.hashCode; | 100 get hashCode => _path.hashCode; |
| 101 | 101 |
| 102 @override | 102 @override |
| 103 String get shortName => basename(_path); | 103 String get shortName => (posix as Context).basename(_path); |
|
karlklose
2014/05/27 07:57:20
Consider adding a getter
Context get context =>
| |
| 104 | 104 |
| 105 @override | 105 @override |
| 106 String toString() => fullName; | 106 String toString() => fullName; |
| 107 } | 107 } |
| 108 | 108 |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * An in-memory implementation of [File]. | 111 * An in-memory implementation of [File]. |
| 112 */ | 112 */ |
| 113 class _MemoryFile extends _MemoryResource implements File { | 113 class _MemoryFile extends _MemoryResource implements File { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 174 String get fullName => _file.fullName; | 174 String get fullName => _file.fullName; |
| 175 | 175 |
| 176 @override | 176 @override |
| 177 bool get isInSystemLibrary => false; | 177 bool get isInSystemLibrary => false; |
| 178 | 178 |
| 179 @override | 179 @override |
| 180 int get modificationStamp => _file._timestamp; | 180 int get modificationStamp => _file._timestamp; |
| 181 | 181 |
| 182 @override | 182 @override |
| 183 Source resolveRelative(Uri relativeUri) { | 183 Source resolveRelative(Uri relativeUri) { |
| 184 String relativePath = fromUri(relativeUri); | 184 String relativePath = (posix as Context).fromUri(relativeUri); |
| 185 String folderPath = dirname(_file._path); | 185 String folderPath = (posix as Context).dirname(_file._path); |
| 186 String path = join(folderPath, relativePath); | 186 String path = (posix as Context).join(folderPath, relativePath); |
| 187 path = normalize(path); | 187 path = (posix as Context).normalize(path); |
| 188 _MemoryFile file = new _MemoryFile(_file._provider, path); | 188 _MemoryFile file = new _MemoryFile(_file._provider, path); |
| 189 return new _MemoryFileSource(file, uriKind); | 189 return new _MemoryFileSource(file, uriKind); |
| 190 } | 190 } |
| 191 | 191 |
| 192 @override | 192 @override |
| 193 String get shortName => _file.shortName; | 193 String get shortName => _file.shortName; |
| 194 } | 194 } |
| 195 | 195 |
| 196 | 196 |
| 197 /** | 197 /** |
| 198 * An in-memory implementation of [Folder]. | 198 * An in-memory implementation of [Folder]. |
| 199 */ | 199 */ |
| 200 class _MemoryFolder extends _MemoryResource implements Folder { | 200 class _MemoryFolder extends _MemoryResource implements Folder { |
| 201 _MemoryFolder(MemoryResourceProvider provider, String path) : | 201 _MemoryFolder(MemoryResourceProvider provider, String path) : |
| 202 super(provider, path); | 202 super(provider, path); |
| 203 @override | 203 @override |
| 204 Resource getChild(String relPath) { | 204 Resource getChild(String relPath) { |
| 205 relPath = normalize(relPath); | 205 relPath = (posix as Context).normalize(relPath); |
| 206 String childPath = join(_path, relPath); | 206 String childPath = (posix as Context).join(_path, relPath); |
| 207 childPath = normalize(childPath); | 207 childPath = (posix as Context).normalize(childPath); |
| 208 _MemoryResource resource = _provider._pathToResource[childPath]; | 208 _MemoryResource resource = _provider._pathToResource[childPath]; |
| 209 if (resource == null) { | 209 if (resource == null) { |
| 210 resource = new _MemoryFile(_provider, childPath); | 210 resource = new _MemoryFile(_provider, childPath); |
| 211 } | 211 } |
| 212 return resource; | 212 return resource; |
| 213 } | 213 } |
| 214 | 214 |
| 215 @override | 215 @override |
| 216 List<Resource> getChildren() { | 216 List<Resource> getChildren() { |
| 217 List<Resource> children = <Resource>[]; | 217 List<Resource> children = <Resource>[]; |
| 218 _provider._pathToResource.forEach((path, resource) { | 218 _provider._pathToResource.forEach((path, resource) { |
| 219 if (dirname(path) == _path) { | 219 if ((posix as Context).dirname(path) == _path) { |
| 220 children.add(resource); | 220 children.add(resource); |
| 221 } | 221 } |
| 222 }); | 222 }); |
| 223 return children; | 223 return children; |
| 224 } | 224 } |
| 225 } | 225 } |
| 226 | 226 |
| 227 | 227 |
| 228 /** | 228 /** |
| 229 * An in-memory implementation of [ResourceProvider]. | 229 * An in-memory implementation of [ResourceProvider]. |
| 230 * Use `/` as a path separator. | 230 * Use `/` as a path separator. |
| 231 */ | 231 */ |
| 232 class MemoryResourceProvider implements ResourceProvider { | 232 class MemoryResourceProvider implements ResourceProvider { |
| 233 final Map<String, _MemoryResource> _pathToResource = <String, _MemoryResource> {}; | 233 final Map<String, _MemoryResource> _pathToResource = <String, _MemoryResource> {}; |
| 234 final Map<String, String> _pathToContent = <String, String>{}; | 234 final Map<String, String> _pathToContent = <String, String>{}; |
| 235 final Map<String, int> _pathToTimestamp = <String, int>{}; | 235 final Map<String, int> _pathToTimestamp = <String, int>{}; |
| 236 int nextStamp = 0; | 236 int nextStamp = 0; |
| 237 | 237 |
| 238 @override | 238 @override |
| 239 Resource getResource(String path) { | 239 Resource getResource(String path) { |
| 240 path = normalize(path); | 240 path = (posix as Context).normalize(path); |
| 241 Resource resource = _pathToResource[path]; | 241 Resource resource = _pathToResource[path]; |
| 242 if (resource == null) { | 242 if (resource == null) { |
| 243 resource = new _MemoryFile(this, path); | 243 resource = new _MemoryFile(this, path); |
| 244 } | 244 } |
| 245 return resource; | 245 return resource; |
| 246 } | 246 } |
| 247 | 247 |
| 248 Folder newFolder(String path) { | 248 Folder newFolder(String path) { |
| 249 path = normalize(path); | 249 path = (posix as Context).normalize(path); |
| 250 if (path.isEmpty) { | 250 if (path.isEmpty) { |
| 251 throw new ArgumentError('Empty paths are not supported'); | 251 throw new ArgumentError('Empty paths are not supported'); |
| 252 } | 252 } |
| 253 if (!path.startsWith('/')) { | 253 if (!path.startsWith('/')) { |
| 254 throw new ArgumentError("Path must start with '/'"); | 254 throw new ArgumentError("Path must start with '/'"); |
| 255 } | 255 } |
| 256 _MemoryFolder folder = null; | 256 _MemoryFolder folder = null; |
| 257 String partialPath = ""; | 257 String partialPath = ""; |
| 258 for (String pathPart in path.split('/')) { | 258 for (String pathPart in path.split('/')) { |
| 259 if (pathPart.isEmpty) { | 259 if (pathPart.isEmpty) { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 271 String message = 'Folder expected at ' | 271 String message = 'Folder expected at ' |
| 272 "'$partialPath'" | 272 "'$partialPath'" |
| 273 'but ${resource.runtimeType} found'; | 273 'but ${resource.runtimeType} found'; |
| 274 throw new ArgumentError(message); | 274 throw new ArgumentError(message); |
| 275 } | 275 } |
| 276 } | 276 } |
| 277 return folder; | 277 return folder; |
| 278 } | 278 } |
| 279 | 279 |
| 280 File newFile(String path, String content) { | 280 File newFile(String path, String content) { |
| 281 path = normalize(path); | 281 path = (posix as Context).normalize(path); |
| 282 newFolder(dirname(path)); | 282 newFolder((posix as Context).dirname(path)); |
| 283 _MemoryFile file = new _MemoryFile(this, path); | 283 _MemoryFile file = new _MemoryFile(this, path); |
| 284 _pathToResource[path] = file; | 284 _pathToResource[path] = file; |
| 285 _pathToContent[path] = content; | 285 _pathToContent[path] = content; |
| 286 _pathToTimestamp[path] = nextStamp++; | 286 _pathToTimestamp[path] = nextStamp++; |
| 287 return file; | 287 return file; |
| 288 } | 288 } |
| 289 } | 289 } |
| 290 | 290 |
| 291 | 291 |
| 292 /** | 292 /** |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 372 Resource getResource(String path) { | 372 Resource getResource(String path) { |
| 373 if (io.FileSystemEntity.isDirectorySync(path)) { | 373 if (io.FileSystemEntity.isDirectorySync(path)) { |
| 374 io.Directory directory = new io.Directory(path); | 374 io.Directory directory = new io.Directory(path); |
| 375 return new _PhysicalFolder(directory); | 375 return new _PhysicalFolder(directory); |
| 376 } else { | 376 } else { |
| 377 io.File file = new io.File(path); | 377 io.File file = new io.File(path); |
| 378 return new _PhysicalFile(file); | 378 return new _PhysicalFile(file); |
| 379 } | 379 } |
| 380 } | 380 } |
| 381 } | 381 } |
| OLD | NEW |