[null-safety] remove implicit-dynamic, intl in preparation for null-safety (#160)
- Implicit dynamic is removed, which will make it easier to migrate to null-safety where it is not supported.
- Intl dependency is removed, since this will block null safety despite being used in only a single place.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index da09e33..c6d2ad9 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,5 +1,6 @@
analyzer:
strong-mode:
+ implicit-casts: false
implicit-dynamic: false
errors:
# treat missing required parameters as a warning (not a hint)
@@ -8,10 +9,6 @@
missing_return: warning
# allow having TODOs in the code
todo: ignore
- # Ignore analyzer hints for updating pubspecs when using Future or
- # Stream and not importing dart:async
- # Please see https://github.com/flutter/flutter/pull/24528 for details.
- sdk_version_async_exported_from_core: ignore
linter:
rules:
diff --git a/packages/file/CHANGELOG.md b/packages/file/CHANGELOG.md
index 22c292c..61d3529 100644
--- a/packages/file/CHANGELOG.md
+++ b/packages/file/CHANGELOG.md
@@ -6,6 +6,8 @@
* Fixed more test flakiness.
* Enabled more tests.
* Internal cleanup.
+* Remove implicit dynamic in preparation for null safety.
+* Remove dependency on Intl
#### 5.2.1
diff --git a/packages/file/lib/src/backends/chroot/chroot_directory.dart b/packages/file/lib/src/backends/chroot/chroot_directory.dart
index e2daa90..8fec7b1 100644
--- a/packages/file/lib/src/backends/chroot/chroot_directory.dart
+++ b/packages/file/lib/src/backends/chroot/chroot_directory.dart
@@ -137,7 +137,7 @@
bool recursive = false,
bool followLinks = true,
}) {
- Directory delegate = this.delegate;
+ Directory delegate = this.delegate as Directory;
String dirname = delegate.path;
return delegate
.list(recursive: recursive, followLinks: followLinks)
@@ -149,7 +149,7 @@
bool recursive = false,
bool followLinks = true,
}) {
- Directory delegate = this.delegate;
+ Directory delegate = this.delegate as Directory;
String dirname = delegate.path;
return delegate
.listSync(recursive: recursive, followLinks: followLinks)
diff --git a/packages/file/lib/src/backends/chroot/chroot_file.dart b/packages/file/lib/src/backends/chroot/chroot_file.dart
index 9d6c5ef..60bda56 100644
--- a/packages/file/lib/src/backends/chroot/chroot_file.dart
+++ b/packages/file/lib/src/backends/chroot/chroot_file.dart
@@ -252,7 +252,7 @@
@override
Stream<Uint8List> openRead([int start, int end]) =>
- getDelegate(followLinks: true).openRead(start, end);
+ getDelegate(followLinks: true).openRead(start, end).cast<Uint8List>();
@override
IOSink openWrite({
diff --git a/packages/file/lib/src/backends/chroot/chroot_file_system.dart b/packages/file/lib/src/backends/chroot/chroot_file_system.dart
index 0baec9b..5e383bd 100644
--- a/packages/file/lib/src/backends/chroot/chroot_file_system.dart
+++ b/packages/file/lib/src/backends/chroot/chroot_file_system.dart
@@ -112,9 +112,9 @@
case FileSystemEntityType.directory:
break;
case FileSystemEntityType.notFound:
- throw common.noSuchFileOrDirectory(path);
+ throw common.noSuchFileOrDirectory(path as String);
default:
- throw common.notADirectory(path);
+ throw common.notADirectory(path as String);
}
assert(() {
p.Context ctx = delegate.path;
diff --git a/packages/file/lib/src/backends/chroot/chroot_file_system_entity.dart b/packages/file/lib/src/backends/chroot/chroot_file_system_entity.dart
index f16e67f..8e859ac 100644
--- a/packages/file/lib/src/backends/chroot/chroot_file_system_entity.dart
+++ b/packages/file/lib/src/backends/chroot/chroot_file_system_entity.dart
@@ -52,7 +52,8 @@
@override
Directory wrapDirectory(io.Directory delegate) =>
- _ChrootDirectory.wrapped(fileSystem, delegate, relative: !isAbsolute);
+ _ChrootDirectory.wrapped(fileSystem, delegate as Directory,
+ relative: !isAbsolute);
@override
File wrapFile(io.File delegate) =>
diff --git a/packages/file/lib/src/backends/memory/common.dart b/packages/file/lib/src/backends/memory/common.dart
index 1c8b4fd..d9d8f5c 100644
--- a/packages/file/lib/src/backends/memory/common.dart
+++ b/packages/file/lib/src/backends/memory/common.dart
@@ -10,6 +10,6 @@
/// Throws a `FileSystemException` if [object] is null.
void checkExists(Object object, PathGenerator path) {
if (object == null) {
- throw common.noSuchFileOrDirectory(path());
+ throw common.noSuchFileOrDirectory(path() as String);
}
}
diff --git a/packages/file/lib/src/backends/memory/memory_directory.dart b/packages/file/lib/src/backends/memory/memory_directory.dart
index 4e2bbd3..688e0df 100644
--- a/packages/file/lib/src/backends/memory/memory_directory.dart
+++ b/packages/file/lib/src/backends/memory/memory_directory.dart
@@ -74,7 +74,7 @@
String fullPath = fileSystem.path.join(path, prefix);
String dirname = fileSystem.path.dirname(fullPath);
String basename = fileSystem.path.basename(fullPath);
- DirectoryNode node = fileSystem.findNode(dirname);
+ DirectoryNode node = fileSystem.findNode(dirname) as DirectoryNode;
checkExists(node, () => dirname);
utils.checkIsDir(node, () => dirname);
int _tempCounter = _systemTempCounter[fileSystem] ?? 0;
@@ -99,14 +99,14 @@
throw common.directoryNotEmpty(newPath);
}
},
- );
+ ) as Directory;
@override
Directory get parent =>
(backingOrNull?.isRoot ?? false) ? this : super.parent;
@override
- Directory get absolute => super.absolute;
+ Directory get absolute => super.absolute as Directory;
@override
Stream<FileSystemEntity> list({
@@ -123,7 +123,7 @@
bool recursive = false,
bool followLinks = true,
}) {
- DirectoryNode node = backing;
+ DirectoryNode node = backing as DirectoryNode;
List<FileSystemEntity> listing = <FileSystemEntity>[];
List<_PendingListTask> tasks = <_PendingListTask>[
_PendingListTask(
@@ -139,7 +139,9 @@
task.dir.children.forEach((String name, Node child) {
Set<LinkNode> breadcrumbs = Set<LinkNode>.from(task.breadcrumbs);
String childPath = fileSystem.path.join(task.path, name);
- while (followLinks && utils.isLink(child) && breadcrumbs.add(child)) {
+ while (followLinks &&
+ utils.isLink(child) &&
+ breadcrumbs.add(child as LinkNode)) {
Node referent = (child as LinkNode).referentOrNull;
if (referent != null) {
child = referent;
@@ -148,7 +150,8 @@
if (utils.isDirectory(child)) {
listing.add(MemoryDirectory(fileSystem, childPath));
if (recursive) {
- tasks.add(_PendingListTask(child, childPath, breadcrumbs));
+ tasks.add(_PendingListTask(
+ child as DirectoryNode, childPath, breadcrumbs));
}
} else if (utils.isLink(child)) {
listing.add(MemoryLink(fileSystem, childPath));
diff --git a/packages/file/lib/src/backends/memory/memory_file.dart b/packages/file/lib/src/backends/memory/memory_file.dart
index bda9ae9..3d7b8b3 100644
--- a/packages/file/lib/src/backends/memory/memory_file.dart
+++ b/packages/file/lib/src/backends/memory/memory_file.dart
@@ -29,10 +29,12 @@
if (node == null) {
node = _doCreate();
} else {
- node = utils.isLink(node) ? utils.resolveLinks(node, () => path) : node;
+ node = utils.isLink(node)
+ ? utils.resolveLinks(node as LinkNode, () => path)
+ : node;
utils.checkType(expectedType, node.type, () => path);
}
- return node;
+ return node as FileNode;
}
@override
@@ -87,14 +89,14 @@
: common.isADirectory(path);
}
},
- );
+ ) as File;
@override
Future<File> copy(String newPath) async => copySync(newPath);
@override
File copySync(String newPath) {
- FileNode sourceNode = resolvedBacking;
+ FileNode sourceNode = resolvedBacking as FileNode;
fileSystem.findNode(
newPath,
segmentVisitor: (
@@ -108,7 +110,8 @@
if (child != null) {
if (utils.isLink(child)) {
List<String> ledger = <String>[];
- child = utils.resolveLinks(child, () => newPath, ledger: ledger);
+ child = utils.resolveLinks(child as LinkNode, () => newPath,
+ ledger: ledger);
checkExists(child, () => newPath);
parent = child.parent;
childName = ledger.last;
@@ -134,7 +137,7 @@
int lengthSync() => (resolvedBacking as FileNode).size;
@override
- File get absolute => super.absolute;
+ File get absolute => super.absolute as File;
@override
Future<DateTime> lastAccessed() async => lastAccessedSync();
@@ -148,7 +151,7 @@
@override
void setLastAccessedSync(DateTime time) {
- FileNode node = resolvedBacking;
+ FileNode node = resolvedBacking as FileNode;
node.accessed = time.millisecondsSinceEpoch;
}
@@ -164,7 +167,7 @@
@override
void setLastModifiedSync(DateTime time) {
- FileNode node = resolvedBacking;
+ FileNode node = resolvedBacking as FileNode;
node.modified = time.millisecondsSinceEpoch;
}
@@ -187,7 +190,7 @@
@override
Stream<Uint8List> openRead([int start, int end]) {
try {
- FileNode node = resolvedBacking;
+ FileNode node = resolvedBacking as FileNode;
Uint8List content = node.content;
if (start != null) {
content = end == null
diff --git a/packages/file/lib/src/backends/memory/memory_file_system.dart b/packages/file/lib/src/backends/memory/memory_file_system.dart
index 38f818e..0451326 100644
--- a/packages/file/lib/src/backends/memory/memory_file_system.dart
+++ b/packages/file/lib/src/backends/memory/memory_file_system.dart
@@ -192,7 +192,7 @@
/// Gets the node backing for the current working directory. Note that this
/// can return null if the directory has been deleted or moved from under our
/// feet.
- DirectoryNode get _current => findNode(cwd);
+ DirectoryNode get _current => findNode(cwd) as DirectoryNode;
@override
Node findNode(
@@ -248,10 +248,11 @@
if (segmentVisitor != null) {
child = segmentVisitor(directory, basename, child, i, finalSegment);
}
- child = utils.resolveLinks(child, subpath, ledger: pathWithSymlinks);
+ child = utils.resolveLinks(child as LinkNode, subpath,
+ ledger: pathWithSymlinks);
} else {
child = utils.resolveLinks(
- child,
+ child as LinkNode,
subpath,
ledger: pathWithSymlinks,
tailVisitor: (DirectoryNode parent, String childName, Node child) {
@@ -266,7 +267,7 @@
if (i < finalSegment) {
checkExists(child, subpath);
utils.checkIsDir(child, subpath);
- directory = child;
+ directory = child as DirectoryNode;
}
}
return child;
diff --git a/packages/file/lib/src/backends/memory/memory_file_system_entity.dart b/packages/file/lib/src/backends/memory/memory_file_system_entity.dart
index 32a7e2c..3ff5ba9 100644
--- a/packages/file/lib/src/backends/memory/memory_file_system_entity.dart
+++ b/packages/file/lib/src/backends/memory/memory_file_system_entity.dart
@@ -73,7 +73,9 @@
@protected
Node get resolvedBacking {
Node node = backing;
- node = utils.isLink(node) ? utils.resolveLinks(node, () => path) : node;
+ node = utils.isLink(node)
+ ? utils.resolveLinks(node as LinkNode, () => path)
+ : node;
utils.checkType(expectedType, node.type, () => path);
return node;
}
@@ -262,7 +264,7 @@
utils.checkType(expectedType, child.type, () => newPath);
}
if (validateOverwriteExistingEntity != null) {
- validateOverwriteExistingEntity(child);
+ validateOverwriteExistingEntity(child as T);
}
parent.children.remove(childName);
}
diff --git a/packages/file/lib/src/backends/memory/memory_link.dart b/packages/file/lib/src/backends/memory/memory_link.dart
index f7c7fd2..b22e2fd 100644
--- a/packages/file/lib/src/backends/memory/memory_link.dart
+++ b/packages/file/lib/src/backends/memory/memory_link.dart
@@ -38,7 +38,7 @@
: common.invalidArgument(newPath);
}
},
- );
+ ) as Link;
@override
Future<Link> create(String target, {bool recursive = false}) async {
@@ -99,7 +99,7 @@
}
@override
- Link get absolute => super.absolute;
+ Link get absolute => super.absolute as Link;
@override
@protected
diff --git a/packages/file/lib/src/backends/memory/utils.dart b/packages/file/lib/src/backends/memory/utils.dart
index a3d7786..de1b6ae 100644
--- a/packages/file/lib/src/backends/memory/utils.dart
+++ b/packages/file/lib/src/backends/memory/utils.dart
@@ -25,7 +25,7 @@
/// Throws a [io.FileSystemException] if [node] is not a directory.
void checkIsDir(Node node, PathGenerator path) {
if (!isDirectory(node)) {
- throw common.notADirectory(path());
+ throw common.notADirectory(path() as String);
}
}
@@ -39,12 +39,12 @@
if (expectedType != actualType) {
switch (expectedType) {
case FileSystemEntityType.directory:
- throw common.notADirectory(path());
+ throw common.notADirectory(path() as String);
case FileSystemEntityType.file:
assert(actualType == FileSystemEntityType.directory);
- throw common.isADirectory(path());
+ throw common.isADirectory(path() as String);
case FileSystemEntityType.link:
- throw common.invalidArgument(path());
+ throw common.invalidArgument(path() as String);
default:
// Should not happen
throw AssertionError();
@@ -89,9 +89,9 @@
Node node = link;
while (isLink(node)) {
- link = node;
- if (!breadcrumbs.add(node)) {
- throw common.tooManyLevelsOfSymbolicLinks(path());
+ link = node as LinkNode;
+ if (!breadcrumbs.add(link)) {
+ throw common.tooManyLevelsOfSymbolicLinks(path() as String);
}
if (ledger != null) {
if (link.fs.path.isAbsolute(link.target)) {
diff --git a/packages/file/lib/src/backends/record_replay/codecs.dart b/packages/file/lib/src/backends/record_replay/codecs.dart
index 1febe07..01f4abe 100644
--- a/packages/file/lib/src/backends/record_replay/codecs.dart
+++ b/packages/file/lib/src/backends/record_replay/codecs.dart
@@ -147,7 +147,7 @@
_GenericEncoder generic = const _GenericEncoder();
Map<String, dynamic> encoded = <String, dynamic>{};
for (dynamic key in input.keys) {
- String encodedKey = generic.convert(key);
+ String encodedKey = generic.convert(key) as String;
encoded[encodedKey] = generic.convert(input[key]);
}
return encoded;
@@ -212,11 +212,11 @@
}
/// A [PathContextCodec] serializes and deserializes [path.Context] instances.
-class PathContextCodec extends Codec<path.Context, Map<String, String>> {
+class PathContextCodec extends Codec<path.Context, Map<String, dynamic>> {
/// Creates a new [PathContextCodec].
const PathContextCodec();
- static Map<String, String> _encode(path.Context input) {
+ static Map<String, dynamic> _encode(path.Context input) {
return <String, String>{
'style': input.style.name,
'cwd': input.current,
@@ -230,23 +230,23 @@
'windows': path.Style.windows,
'url': path.Style.url,
}[input['style']],
- current: input['cwd'],
+ current: input['cwd'] as String,
);
}
/// Converter that serializes [path.Context] instances.
- static const Converter<path.Context, Map<String, String>> serialize =
- _ForwardingConverter<path.Context, Map<String, String>>(_encode);
+ static const Converter<path.Context, Map<String, dynamic>> serialize =
+ _ForwardingConverter<path.Context, Map<String, dynamic>>(_encode);
/// Converter that deserializes [path.Context] instances.
static const Converter<Map<String, dynamic>, path.Context> deserialize =
_ForwardingConverter<Map<String, dynamic>, path.Context>(_decode);
@override
- Converter<path.Context, Map<String, String>> get encoder => serialize;
+ Converter<path.Context, Map<String, dynamic>> get encoder => serialize;
@override
- Converter<Map<String, String>, path.Context> get decoder => deserialize;
+ Converter<Map<String, dynamic>, path.Context> get decoder => deserialize;
}
class _ResultEncoder extends Converter<ResultReference<dynamic>, Object> {
@@ -429,13 +429,13 @@
final Map<String, Object> _data;
@override
- int get type => _data['type'];
+ int get type => _data['type'] as int;
@override
- String get path => _data['path'];
+ String get path => _data['path'] as String;
@override
- bool get isDirectory => _data['isDirectory'];
+ bool get isDirectory => _data['isDirectory'] as bool;
}
/// Converts an object into a [Future] that completes with that object.
@@ -617,7 +617,7 @@
@override
dynamic convert(dynamic input) {
if (input is Map) {
- String errorType = input[kManifestErrorTypeKey];
+ String errorType = input[kManifestErrorTypeKey] as String;
if (_decoders.containsKey(errorType)) {
return _decoders[errorType].convert(input);
}
@@ -644,9 +644,9 @@
static FileSystemException _decode(Map<String, Object> input) {
Object osError = input['osError'];
return FileSystemException(
- input['message'],
- input['path'],
- osError == null ? null : const ToError().convert(osError),
+ input['message'] as String,
+ input['path'] as String,
+ osError == null ? null : const ToError().convert(osError) as OSError,
);
}
@@ -678,7 +678,7 @@
}
static OSError _decode(Map<String, Object> input) {
- return OSError(input['message'], input['errorCode']);
+ return OSError(input['message'] as String, input['errorCode'] as int);
}
static const Converter<OSError, Map<String, Object>> serialize =
@@ -711,7 +711,7 @@
static ArgumentError _decode(Map<String, Object> input) {
dynamic message = input['message'];
dynamic invalidValue = input['invalidValue'];
- String name = input['name'];
+ String name = input['name'] as String;
if (invalidValue != null) {
return ArgumentError.value(invalidValue, name, message);
} else if (name != null) {
@@ -748,7 +748,7 @@
}
static NoSuchMethodError _decode(Map<String, Object> input) {
- return _NoSuchMethodError(input['toString']);
+ return _NoSuchMethodError(input['toString'] as String);
}
static const Converter<NoSuchMethodError, Map<String, Object>> serialize =
diff --git a/packages/file/lib/src/backends/record_replay/common.dart b/packages/file/lib/src/backends/record_replay/common.dart
index be610bf..8fb680c 100644
--- a/packages/file/lib/src/backends/record_replay/common.dart
+++ b/packages/file/lib/src/backends/record_replay/common.dart
@@ -135,9 +135,10 @@
if (object1.runtimeType != object2.runtimeType) {
return false;
} else if (object1 is List) {
- return _areListsEqual<dynamic>(object1, object2);
+ return _areListsEqual<dynamic>(object1, object2 as List<dynamic>);
} else if (object1 is Map) {
- return _areMapsEqual<dynamic, dynamic>(object1, object2);
+ return _areMapsEqual<dynamic, dynamic>(
+ object1, object2 as Map<dynamic, dynamic>);
} else {
return object1 == object2;
}
diff --git a/packages/file/lib/src/backends/record_replay/events.dart b/packages/file/lib/src/backends/record_replay/events.dart
index 2a545a6..01e5ff4 100644
--- a/packages/file/lib/src/backends/record_replay/events.dart
+++ b/packages/file/lib/src/backends/record_replay/events.dart
@@ -88,10 +88,10 @@
T get result {
dynamic result = _result;
while (result is ResultReference) {
- ResultReference<dynamic> reference = result;
+ ResultReference<dynamic> reference = result as ResultReference<dynamic>;
result = reference.recordedValue;
}
- return result;
+ return result as T;
}
@override
@@ -115,7 +115,7 @@
Future<void> get done async {
dynamic result = _result;
while (result is ResultReference) {
- ResultReference<dynamic> reference = result;
+ ResultReference<dynamic> reference = result as ResultReference<dynamic>;
await reference.complete;
result = reference.recordedValue;
}
diff --git a/packages/file/lib/src/backends/record_replay/mutable_recording.dart b/packages/file/lib/src/backends/record_replay/mutable_recording.dart
index b6c41f6..ec30905 100644
--- a/packages/file/lib/src/backends/record_replay/mutable_recording.dart
+++ b/packages/file/lib/src/backends/record_replay/mutable_recording.dart
@@ -6,7 +6,6 @@
import 'dart:convert';
import 'package:file/file.dart';
-import 'package:intl/intl.dart';
import 'codecs.dart';
import 'common.dart';
@@ -64,7 +63,7 @@
/// It is up to the caller to create the file - it will not exist in the
/// file system when it is returned from this method.
File newFile(String name) {
- String basename = '${NumberFormat('000').format(newUid())}.$name';
+ String basename = '${newUid()}.$name';
String dirname = destination.path;
String path = destination.fileSystem.path.join(dirname, basename);
return destination.fileSystem.file(path);
diff --git a/packages/file/lib/src/backends/record_replay/recording_directory.dart b/packages/file/lib/src/backends/record_replay/recording_directory.dart
index 4fa15c0..e157327 100644
--- a/packages/file/lib/src/backends/record_replay/recording_directory.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_directory.dart
@@ -16,7 +16,7 @@
implements Directory {
/// Creates a new `RecordingDirectory`.
RecordingDirectory(RecordingFileSystem fileSystem, io.Directory delegate)
- : super(fileSystem, delegate) {
+ : super(fileSystem as RecordingFileSystemImpl, delegate as Directory) {
methods.addAll(<Symbol, Function>{
#create: _create,
#createSync: delegate.createSync,
diff --git a/packages/file/lib/src/backends/record_replay/recording_file.dart b/packages/file/lib/src/backends/record_replay/recording_file.dart
index 3114f1e..cc9b03e 100644
--- a/packages/file/lib/src/backends/record_replay/recording_file.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_file.dart
@@ -36,7 +36,7 @@
class RecordingFile extends RecordingFileSystemEntity<File> implements File {
/// Creates a new `RecordingFile`.
RecordingFile(RecordingFileSystem fileSystem, io.File delegate)
- : super(fileSystem, delegate) {
+ : super(fileSystem as RecordingFileSystemImpl, delegate as File) {
methods.addAll(<Symbol, Function>{
#create: _create,
#createSync: delegate.createSync,
@@ -93,7 +93,7 @@
StreamReference<Uint8List> _openRead([int start, int end]) {
return _BlobStreamReference<Uint8List>(
file: _newRecordingFile(),
- stream: delegate.openRead(start, end),
+ stream: delegate.openRead(start, end).cast<Uint8List>(),
writer: (File file, Uint8List bytes) {
file.writeAsBytesSync(bytes, mode: FileMode.append, flush: true);
},
diff --git a/packages/file/lib/src/backends/record_replay/recording_io_sink.dart b/packages/file/lib/src/backends/record_replay/recording_io_sink.dart
index 28ab6f8..1925018 100644
--- a/packages/file/lib/src/backends/record_replay/recording_io_sink.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_io_sink.dart
@@ -50,7 +50,7 @@
String get identifier => '$runtimeType@$uid';
@override
- MutableRecording get recording => fileSystem.recording;
+ MutableRecording get recording => fileSystem.recording as MutableRecording;
@override
Stopwatch get stopwatch => fileSystem.stopwatch;
diff --git a/packages/file/lib/src/backends/record_replay/recording_link.dart b/packages/file/lib/src/backends/record_replay/recording_link.dart
index 14eac4d..01954b9 100644
--- a/packages/file/lib/src/backends/record_replay/recording_link.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_link.dart
@@ -15,7 +15,7 @@
class RecordingLink extends RecordingFileSystemEntity<Link> implements Link {
/// Creates a new `RecordingLink`.
RecordingLink(RecordingFileSystem fileSystem, io.Link delegate)
- : super(fileSystem, delegate) {
+ : super(fileSystem as RecordingFileSystemImpl, delegate as Link) {
methods.addAll(<Symbol, Function>{
#create: _create,
#createSync: delegate.createSync,
diff --git a/packages/file/lib/src/backends/record_replay/recording_proxy_mixin.dart b/packages/file/lib/src/backends/record_replay/recording_proxy_mixin.dart
index e5bb186..08f92da 100644
--- a/packages/file/lib/src/backends/record_replay/recording_proxy_mixin.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_proxy_mixin.dart
@@ -90,12 +90,6 @@
@protected
Stopwatch get stopwatch;
- // This check is used in noSuchMethod to detect if this code is running in a
- // Dart 1 runtime, or Dart 2.
- // TODO(srawlins): Remove this after the minimum SDK constraint is such that
- // there is no "Dart 1" runtime mode. 2.0.0 or something.
- bool get _runningDart1Runtime => <dynamic>[] is List<String>;
-
/// Handles invocations for which there is no concrete implementation
/// function.
///
@@ -137,7 +131,7 @@
try {
value = Function.apply(method, args, namedArgs);
} catch (error) {
- recording.add(createEvent(error: error));
+ recording.add(createEvent(error: error) as LiveInvocationEvent<dynamic>);
rethrow;
}
@@ -146,45 +140,43 @@
// We have to instantiate the correct type of StreamReference or
// FutureReference, so that types are not lost when we unwrap the references
// afterward.
- if (_runningDart1Runtime && value is Stream<dynamic>) {
- // This one is here for Dart 1 runtime mode.
- value = StreamReference<dynamic>(value);
- } else if (value is Stream<FileSystemEntity>) {
- value = StreamReference<FileSystemEntity>(value);
+ if (value is Stream<FileSystemEntity>) {
+ value =
+ StreamReference<FileSystemEntity>(value as Stream<FileSystemEntity>);
} else if (value is Stream<String>) {
- value = StreamReference<String>(value);
+ value = StreamReference<String>(value as Stream<String>);
} else if (value is Stream) {
throw UnimplementedError(
'Cannot record method with return type ${value.runtimeType}');
- } else if (_runningDart1Runtime && value is Future<dynamic>) {
- // This one is here for Dart 1 runtime mode.
- value = FutureReference<dynamic>(value);
} else if (value is Future<bool>) {
- value = FutureReference<bool>(value);
+ value = FutureReference<bool>(value as Future<bool>);
} else if (value is Future<Directory>) {
- value = FutureReference<Directory>(value);
+ value = FutureReference<Directory>(value as Future<Directory>);
} else if (value is Future<File>) {
- value = FutureReference<File>(value);
+ value = FutureReference<File>(value as Future<File>);
} else if (value is Future<FileNode>) {
- value = FutureReference<FileNode>(value);
+ value = FutureReference<FileNode>(value as Future<FileNode>);
} else if (value is Future<FileStat>) {
- value = FutureReference<FileStat>(value);
+ value = FutureReference<FileStat>(value as Future<FileStat>);
} else if (value is Future<Link>) {
- value = FutureReference<Link>(value);
+ value = FutureReference<Link>(value as Future<Link>);
} else if (value is Future<FileSystemEntity>) {
- value = FutureReference<FileSystemEntity>(value);
+ value =
+ FutureReference<FileSystemEntity>(value as Future<FileSystemEntity>);
} else if (value is Future<FileSystemEntityType>) {
- value = FutureReference<FileSystemEntityType>(value);
+ value = FutureReference<FileSystemEntityType>(
+ value as Future<FileSystemEntityType>);
} else if (value is Future<String>) {
- value = FutureReference<String>(value);
+ value = FutureReference<String>(value as Future<String>);
} else if (value is Future<RandomAccessFile>) {
- value = FutureReference<RandomAccessFile>(value);
+ value =
+ FutureReference<RandomAccessFile>(value as Future<RandomAccessFile>);
} else if (value is Future<void>) {
- value = FutureReference<void>(value);
+ value = FutureReference<void>(value as Future<void>);
}
// Record the invocation event associated with this invocation.
- recording.add(createEvent(result: value));
+ recording.add(createEvent(result: value) as LiveInvocationEvent<dynamic>);
// Unwrap any result references before returning to the caller.
dynamic result = value;
diff --git a/packages/file/lib/src/backends/record_replay/recording_random_access_file.dart b/packages/file/lib/src/backends/record_replay/recording_random_access_file.dart
index f31c5a9..f5ba461 100644
--- a/packages/file/lib/src/backends/record_replay/recording_random_access_file.dart
+++ b/packages/file/lib/src/backends/record_replay/recording_random_access_file.dart
@@ -69,7 +69,7 @@
String get identifier => '$runtimeType@$uid';
@override
- MutableRecording get recording => fileSystem.recording;
+ MutableRecording get recording => fileSystem.recording as MutableRecording;
@override
Stopwatch get stopwatch => fileSystem.stopwatch;
diff --git a/packages/file/lib/src/backends/record_replay/replay_file_stat.dart b/packages/file/lib/src/backends/record_replay/replay_file_stat.dart
index 58d36e5..497d403 100644
--- a/packages/file/lib/src/backends/record_replay/replay_file_stat.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_file_stat.dart
@@ -16,24 +16,27 @@
final Map<String, dynamic> _data;
@override
- DateTime get changed => DateTimeCodec.deserialize.convert(_data['changed']);
+ DateTime get changed =>
+ DateTimeCodec.deserialize.convert(_data['changed'] as int);
@override
- DateTime get modified => DateTimeCodec.deserialize.convert(_data['modified']);
+ DateTime get modified =>
+ DateTimeCodec.deserialize.convert(_data['modified'] as int);
@override
- DateTime get accessed => DateTimeCodec.deserialize.convert(_data['accessed']);
+ DateTime get accessed =>
+ DateTimeCodec.deserialize.convert(_data['accessed'] as int);
@override
FileSystemEntityType get type =>
- EntityTypeCodec.deserialize.convert(_data['type']);
+ EntityTypeCodec.deserialize.convert(_data['type'] as String);
@override
- int get mode => _data['mode'];
+ int get mode => _data['mode'] as int;
@override
- int get size => _data['size'];
+ int get size => _data['size'] as int;
@override
- String modeString() => _data['modeString'];
+ String modeString() => _data['modeString'] as String;
}
diff --git a/packages/file/lib/src/backends/record_replay/replay_file_system.dart b/packages/file/lib/src/backends/record_replay/replay_file_system.dart
index 1560c99..35b12c4 100644
--- a/packages/file/lib/src/backends/record_replay/replay_file_system.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_file_system.dart
@@ -75,8 +75,8 @@
if (!manifestFile.existsSync()) {
throw ArgumentError('Not a valid recording directory: $dirname');
}
- List<Map<String, dynamic>> manifest = const JsonDecoder()
- .convert(manifestFile.readAsStringSync())
+ List<Map<String, dynamic>> manifest = (const JsonDecoder()
+ .convert(manifestFile.readAsStringSync()) as List<dynamic>)
.cast<Map<String, dynamic>>();
return ReplayFileSystemImpl(recording, manifest);
}
diff --git a/packages/file/lib/src/backends/record_replay/replay_io_sink.dart b/packages/file/lib/src/backends/record_replay/replay_io_sink.dart
index f222ae4..4dbbd4d 100644
--- a/packages/file/lib/src/backends/record_replay/replay_io_sink.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_io_sink.dart
@@ -46,8 +46,9 @@
@override
dynamic onResult(Invocation invocation, dynamic result) {
if (invocation.memberName == #addStream) {
- Stream<List<int>> stream = invocation.positionalArguments.first;
- Future<dynamic> future = result;
+ Stream<List<int>> stream =
+ invocation.positionalArguments.first as Stream<List<int>>;
+ Future<dynamic> future = result as Future<dynamic>;
return future.then<void>(stream.drain);
}
return result;
diff --git a/packages/file/lib/src/backends/record_replay/replay_proxy_mixin.dart b/packages/file/lib/src/backends/record_replay/replay_proxy_mixin.dart
index 70bd44e..d501ab3 100644
--- a/packages/file/lib/src/backends/record_replay/replay_proxy_mixin.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_proxy_mixin.dart
@@ -146,8 +146,10 @@
_InvocationMatcher _getMatcher(Invocation invocation) {
String name = getSymbolName(invocation.memberName);
- List<dynamic> args = encode(invocation.positionalArguments);
- Map<String, dynamic> namedArgs = encode(invocation.namedArguments);
+ List<dynamic> args =
+ encode(invocation.positionalArguments) as List<dynamic>;
+ Map<String, dynamic> namedArgs =
+ encode(invocation.namedArguments) as Map<String, dynamic>;
if (invocation.isGetter) {
return (Map<String, dynamic> entry) =>
@@ -165,7 +167,9 @@
return entry[kManifestTypeKey] == kInvokeType &&
entry[kManifestMethodKey] == name &&
deeplyEqual(entry[kManifestPositionalArgumentsKey], args) &&
- deeplyEqual(_asNamedArgsType(entry[kManifestNamedArgumentsKey]),
+ deeplyEqual(
+ _asNamedArgsType(
+ entry[kManifestNamedArgumentsKey] as Map<String, dynamic>),
namedArgs) &&
entry[kManifestObjectKey] == identifier;
};
diff --git a/packages/file/lib/src/forwarding/forwarding_directory.dart b/packages/file/lib/src/forwarding/forwarding_directory.dart
index 235b1fd..062e02b 100644
--- a/packages/file/lib/src/forwarding/forwarding_directory.dart
+++ b/packages/file/lib/src/forwarding/forwarding_directory.dart
@@ -11,7 +11,7 @@
abstract class ForwardingDirectory<T extends Directory>
implements ForwardingFileSystemEntity<T, io.Directory>, Directory {
@override
- T wrap(io.Directory delegate) => wrapDirectory(delegate);
+ T wrap(io.Directory delegate) => wrapDirectory(delegate) as T;
@override
Future<Directory> create({bool recursive = false}) async =>
diff --git a/packages/file/lib/src/forwarding/forwarding_file.dart b/packages/file/lib/src/forwarding/forwarding_file.dart
index e0d52a0..8f98b50 100644
--- a/packages/file/lib/src/forwarding/forwarding_file.dart
+++ b/packages/file/lib/src/forwarding/forwarding_file.dart
@@ -13,7 +13,7 @@
abstract class ForwardingFile
implements ForwardingFileSystemEntity<File, io.File>, File {
@override
- ForwardingFile wrap(io.File delegate) => wrapFile(delegate);
+ ForwardingFile wrap(io.File delegate) => wrapFile(delegate) as ForwardingFile;
@override
Future<File> create({bool recursive = false}) async =>
diff --git a/packages/file/lib/src/forwarding/forwarding_link.dart b/packages/file/lib/src/forwarding/forwarding_link.dart
index 25a37d2..6dd0403 100644
--- a/packages/file/lib/src/forwarding/forwarding_link.dart
+++ b/packages/file/lib/src/forwarding/forwarding_link.dart
@@ -11,7 +11,7 @@
abstract class ForwardingLink
implements ForwardingFileSystemEntity<Link, io.Link>, Link {
@override
- ForwardingLink wrap(io.Link delegate) => wrapLink(delegate);
+ ForwardingLink wrap(io.Link delegate) => wrapLink(delegate) as ForwardingLink;
@override
Future<Link> create(String target, {bool recursive = false}) async =>
diff --git a/packages/file/pubspec.yaml b/packages/file/pubspec.yaml
index 6058e05..9b065eb 100644
--- a/packages/file/pubspec.yaml
+++ b/packages/file/pubspec.yaml
@@ -13,7 +13,6 @@
homepage: https://github.com/google/file.dart
dependencies:
- intl: '>=0.14.0 <1.0.0'
meta: ^1.1.2
path: ^1.5.1
diff --git a/packages/file/test/chroot_test.dart b/packages/file/test/chroot_test.dart
index 997411c..4d811a0 100644
--- a/packages/file/test/chroot_test.dart
+++ b/packages/file/test/chroot_test.dart
@@ -67,7 +67,7 @@
setUp(() {
fs = createMemoryBackedChrootFileSystem();
- mem = fs.delegate;
+ mem = fs.delegate as MemoryFileSystem;
});
group('FileSystem', () {
diff --git a/packages/file/test/common_tests.dart b/packages/file/test/common_tests.dart
index 702a441..bf10efc 100644
--- a/packages/file/test/common_tests.dart
+++ b/packages/file/test/common_tests.dart
@@ -144,7 +144,7 @@
setUp(() async {
root = rootfn != null ? rootfn() : '/';
- fs = await createFs();
+ fs = await createFs() as FileSystem;
assert(fs.path.isAbsolute(root));
assert(!root.endsWith(fs.path.separator) ||
fs.path.rootPrefix(root) == root);
diff --git a/packages/file/test/record_replay_matchers.dart b/packages/file/test/record_replay_matchers.dart
index 15932e6..6187242 100644
--- a/packages/file/test/record_replay_matchers.dart
+++ b/packages/file/test/record_replay_matchers.dart
@@ -72,7 +72,7 @@
/// Returns this matcher for chaining.
T on(dynamic object) {
_fieldMatchers.add(_Target(object));
- return this;
+ return this as T;
}
/// Limits the scope of the match to invocations that produced the specified
@@ -90,7 +90,7 @@
/// Returns this matcher for chaining.
T withResult(dynamic result) {
_fieldMatchers.add(_Result(result));
- return this;
+ return this as T;
}
/// Limits the scope of the match to invocations that were recorded with the
@@ -102,7 +102,7 @@
/// Returns this matcher for chaining.
T withTimestamp(dynamic timestamp) {
_fieldMatchers.add(_Timestamp(timestamp));
- return this;
+ return this as T;
}
/// @nodoc
@@ -129,8 +129,9 @@
Map<dynamic, dynamic> matchState,
bool verbose,
) {
- Matcher matcher = matchState['matcher'];
- matcher.describeMismatch(item, description, matchState['state'], verbose);
+ Matcher matcher = matchState['matcher'] as Matcher;
+ matcher.describeMismatch(item, description,
+ matchState['state'] as Map<String, dynamic>, verbose);
return description;
}
@@ -369,7 +370,7 @@
@override
bool matches(dynamic item, Map<dynamic, dynamic> matchState) =>
- _matcher.matches(getSymbolName(item.method), matchState);
+ _matcher.matches(getSymbolName(item.method as Symbol), matchState);
@override
Description describeMismatch(
@@ -378,7 +379,7 @@
Map<dynamic, dynamic> matchState,
bool verbose,
) {
- String methodName = getSymbolName(item.method);
+ String methodName = getSymbolName(item.method as Symbol);
description.add('invoked method: \'$methodName\'');
Description matcherDesc = StringDescription();
_matcher.describeMismatch(methodName, matcherDesc, matchState, verbose);
@@ -482,7 +483,7 @@
@override
bool matches(dynamic item, Map<dynamic, dynamic> matchState) =>
- _matcher.matches(getSymbolName(item.property), matchState);
+ _matcher.matches(getSymbolName(item.property as Symbol), matchState);
@override
Description describeMismatch(
@@ -491,7 +492,7 @@
Map<dynamic, dynamic> matchState,
bool verbose,
) {
- String propertyName = getSymbolName(item.property);
+ String propertyName = getSymbolName(item.property as Symbol);
description.add('got property: \'$propertyName\'');
Description matcherDesc = StringDescription();
_matcher.describeMismatch(propertyName, matcherDesc, matchState, verbose);
@@ -515,7 +516,7 @@
/// Strips the trailing `=` off the symbol name to get the property name.
String _getPropertyName(dynamic item) {
- String symbolName = getSymbolName(item.property);
+ String symbolName = getSymbolName(item.property as Symbol);
return symbolName.substring(0, symbolName.length - 1);
}
diff --git a/packages/file/test/recording_test.dart b/packages/file/test/recording_test.dart
index ed61f18..968dad1 100644
--- a/packages/file/test/recording_test.dart
+++ b/packages/file/test/recording_test.dart
@@ -4,6 +4,7 @@
import 'dart:async';
import 'dart:convert';
+import 'dart:io';
import 'package:file/file.dart';
import 'package:file/memory.dart';
@@ -197,7 +198,8 @@
await rc.futureMethod('qux', namedArg: 'quz');
await rc.streamMethod('quux', namedArg: 'quuz').drain<void>();
List<Map<String, dynamic>> manifest =
- await encode(recording.events).cast<Map<String, dynamic>>();
+ (await encode(recording.events) as List<dynamic>)
+ .cast<Map<String, dynamic>>();
expect(manifest[0], <String, dynamic>{
'type': 'set',
'property': 'basicProperty=',
@@ -435,7 +437,7 @@
List<InvocationEvent<dynamic>> events = recording.events;
expect(events.length, greaterThanOrEqualTo(2));
expect(events[0], invokesMethod().withResult(isDirectory));
- Directory directory = events[0].result;
+ Directory directory = events[0].result as Directory;
expect(
events,
contains(setsProperty('currentDirectory')
@@ -624,7 +626,8 @@
containsPair('namedArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -654,7 +657,8 @@
containsPair('namedArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -682,7 +686,8 @@
containsPair('namedArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -717,7 +722,8 @@
containsPair('encoding', 'iso-8859-1'),
)),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -752,7 +758,8 @@
containsPair('encoding', 'iso-8859-1'),
)),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -783,7 +790,8 @@
containsPair(
'namedArguments', <String, String>{'encoding': 'utf-8'}),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -814,7 +822,8 @@
containsPair(
'namedArguments', <String, String>{'encoding': 'utf-8'}),
));
- File file = _getRecordingFile(recording, manifest[1]['result']);
+ File file =
+ _getRecordingFile(recording, manifest[1]['result'] as String);
expect(file, exists);
expect(await file.readAsString(), content);
});
@@ -836,9 +845,9 @@
List<Map<String, dynamic>> _loadManifest(LiveRecording recording) {
List<FileSystemEntity> files = recording.destination.listSync();
File manifestFile = files.singleWhere(
- (FileSystemEntity entity) => entity.basename == kManifestName);
- return const JsonDecoder()
- .convert(manifestFile.readAsStringSync())
+ (FileSystemEntity entity) => entity.basename == kManifestName) as File;
+ return (const JsonDecoder().convert(manifestFile.readAsStringSync())
+ as List<dynamic>)
.cast<Map<String, dynamic>>();
}