Return ErrorHandlingFileSystem backed objects in ErrorHandlingFileSystem file/directory APIs (#112673)
diff --git a/packages/flutter_tools/lib/src/base/error_handling_io.dart b/packages/flutter_tools/lib/src/base/error_handling_io.dart
index 733bcd7..8660864 100644
--- a/packages/flutter_tools/lib/src/base/error_handling_io.dart
+++ b/packages/flutter_tools/lib/src/base/error_handling_io.dart
@@ -119,21 +119,21 @@
@override
File file(dynamic path) => ErrorHandlingFile(
platform: _platform,
- fileSystem: delegate,
+ fileSystem: this,
delegate: delegate.file(path),
);
@override
Directory directory(dynamic path) => ErrorHandlingDirectory(
platform: _platform,
- fileSystem: delegate,
+ fileSystem: this,
delegate: delegate.directory(path),
);
@override
Link link(dynamic path) => ErrorHandlingLink(
platform: _platform,
- fileSystem: delegate,
+ fileSystem: this,
delegate: delegate.link(path),
);
@@ -173,7 +173,7 @@
final io.File delegate;
@override
- final FileSystem fileSystem;
+ final ErrorHandlingFileSystem fileSystem;
final Platform _platform;
@@ -388,7 +388,7 @@
final io.Directory delegate;
@override
- final FileSystem fileSystem;
+ final ErrorHandlingFileSystem fileSystem;
final Platform _platform;
@@ -413,20 +413,20 @@
delegate: delegate,
);
- // For the childEntity methods, we first obtain an instance of the entity
- // from the underlying file system, then invoke childEntity() on it, then
- // wrap in the ErrorHandling version.
@override
- Directory childDirectory(String basename) =>
- wrapDirectory(fileSystem.directory(delegate).childDirectory(basename));
+ Directory childDirectory(String basename) {
+ return fileSystem.directory(fileSystem.path.join(path, basename));
+ }
@override
- File childFile(String basename) =>
- wrapFile(fileSystem.directory(delegate).childFile(basename));
+ File childFile(String basename) {
+ return fileSystem.file(fileSystem.path.join(path, basename));
+ }
@override
- Link childLink(String basename) =>
- wrapLink(fileSystem.directory(delegate).childLink(basename));
+ Link childLink(String basename) {
+ return fileSystem.link(fileSystem.path.join(path, basename));
+ }
@override
void createSync({bool recursive = false}) {
@@ -527,7 +527,7 @@
final io.Link delegate;
@override
- final FileSystem fileSystem;
+ final ErrorHandlingFileSystem fileSystem;
final Platform _platform;
diff --git a/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart b/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart
index ee0b23c..fd2bf9b 100644
--- a/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart
@@ -1167,7 +1167,7 @@
);
const String expectedMessage =
- 'Flutter failed to copy source to dest due to destination location error.\n'
+ 'Flutter failed to create file at "dest".\n'
'Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user.';
expect(() => fileSystem.file('source').copySync('dest'), throwsToolExit(message: expectedMessage));
});
diff --git a/packages/flutter_tools/test/general.shard/config_test.dart b/packages/flutter_tools/test/general.shard/config_test.dart
index 006f0b0..c506680 100644
--- a/packages/flutter_tools/test/general.shard/config_test.dart
+++ b/packages/flutter_tools/test/general.shard/config_test.dart
@@ -117,9 +117,10 @@
testWithoutContext('Config does not error on a normally fatal file system exception', () {
final BufferLogger bufferLogger = BufferLogger.test();
+ final Platform platform = FakePlatform();
final File file = ErrorHandlingFile(
- platform: FakePlatform(),
- fileSystem: MemoryFileSystem.test(),
+ platform: platform,
+ fileSystem: ErrorHandlingFileSystem(delegate: MemoryFileSystem.test(), platform: platform),
delegate: FakeFile('testfile'),
);