Reland implicit-casts: false (#47431)
diff --git a/analysis_options.yaml b/analysis_options.yaml
index d51b2bf..91d7df8 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -20,6 +20,7 @@
analyzer:
strong-mode:
+ implicit-casts: false
implicit-dynamic: false
errors:
# treat missing required parameters as a warning (not a hint)
diff --git a/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart b/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart
index b3e2c9e..7cc7cd2 100644
--- a/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart
+++ b/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart
@@ -20,7 +20,7 @@
);
@override
- AndroidDevice get device => super.device;
+ AndroidDevice get device => super.device as AndroidDevice;
@override
int get iterationCount => 5;
diff --git a/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart
index 93b2063..a08c862 100644
--- a/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart
+++ b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart
@@ -4,10 +4,11 @@
import 'dart:async';
import 'dart:io' show File;
+
+import 'package:flutter/foundation.dart';
+import 'package:flutter_driver/flutter_driver.dart';
import 'package:meta/meta.dart';
import 'package:path/path.dart' as path;
-import 'package:flutter_driver/flutter_driver.dart';
-import 'package:collection/collection.dart';
const String _kPathParent = 'test_driver/goldens/';
@@ -43,8 +44,7 @@
Future<bool> compareScreenshots(List<int> screenshot) async {
final File file = File(_getImageFilePath());
final List<int> matcher = await file.readAsBytes();
- final Function listEquals = const ListEquality<int>().equals;
- return listEquals(screenshot, matcher);
+ return listEquals<int>(screenshot, matcher);
}
/// Returns a bytes representation of a screenshot on the current screen.
diff --git a/dev/tools/localization/bin/gen_l10n.dart b/dev/tools/localization/bin/gen_l10n.dart
index 06a46db..31fb572 100644
--- a/dev/tools/localization/bin/gen_l10n.dart
+++ b/dev/tools/localization/bin/gen_l10n.dart
@@ -53,10 +53,10 @@
exit(0);
}
- final String arbPathString = results['arb-dir'];
- final String outputFileString = results['output-localization-file'];
- final String templateArbFileName = results['template-arb-file'];
- final String classNameString = results['output-class'];
+ final String arbPathString = results['arb-dir'] as String;
+ final String outputFileString = results['output-localization-file'] as String;
+ final String templateArbFileName = results['template-arb-file'] as String;
+ final String classNameString = results['output-class'] as String;
const local.LocalFileSystem fs = local.LocalFileSystem();
final LocalizationsGenerator localizationsGenerator = LocalizationsGenerator(fs);
diff --git a/dev/tools/localization/gen_l10n.dart b/dev/tools/localization/gen_l10n.dart
index 3bab7be..7c6944f 100644
--- a/dev/tools/localization/gen_l10n.dart
+++ b/dev/tools/localization/gen_l10n.dart
@@ -214,10 +214,7 @@
's',
};
-bool _isDateParameter(dynamic placeholderValue) {
- return placeholderValue is Map<String, dynamic> &&
- placeholderValue['type'] == 'DateTime';
-}
+bool _isDateParameter(Map<String, dynamic> placeholderValue) => placeholderValue['type'] == 'DateTime';
bool _dateParameterIsValid(Map<String, dynamic> placeholderValue, String placeholder) {
if (allowableDateFormats.contains(placeholderValue['format']))
@@ -260,6 +257,7 @@
for (String placeholder in placeholders.keys) {
final dynamic value = placeholders[placeholder];
if (
+ value is Map<String, dynamic> &&
_isDateParameter(value) &&
_containsFormatKey(value, placeholder) &&
_dateParameterIsValid(value, placeholder)
@@ -291,6 +289,7 @@
for (String placeholder in placeholders.keys) {
final dynamic value = placeholders[placeholder];
if (
+ value is Map<String, dynamic> &&
_isDateParameter(value) &&
_containsFormatKey(value, placeholder) &&
_dateParameterIsValid(value, placeholder)
@@ -315,7 +314,7 @@
final Map<String, dynamic> placeholders = attributesMap['placeholders'] as Map<String, dynamic>;
for (String placeholder in placeholders.keys) {
final dynamic value = placeholders[placeholder];
- if (_isDateParameter(value)) {
+ if (value is Map<String, dynamic> && _isDateParameter(value)) {
message = message.replaceAll('{$placeholder}', '\$${placeholder}String');
} else {
message = message.replaceAll('{$placeholder}', '\$$placeholder');
@@ -599,8 +598,8 @@
for (File file in fileSystemEntityList) {
final String filePath = file.path;
if (arbFilenameRE.hasMatch(filePath)) {
- final Map<String, dynamic> arbContents = json.decode(file.readAsStringSync());
- String localeString = arbContents['@@locale'];
+ final Map<String, dynamic> arbContents = json.decode(file.readAsStringSync()) as Map<String, dynamic>;
+ String localeString = arbContents['@@locale'] as String;
if (localeString == null) {
final RegExpMatch arbFileMatch = arbFilenameLocaleRE.firstMatch(filePath);
if (arbFileMatch == null) {
@@ -653,7 +652,7 @@
void generateClassMethods() {
Map<String, dynamic> bundle;
try {
- bundle = json.decode(templateArbFile.readAsStringSync());
+ bundle = json.decode(templateArbFile.readAsStringSync()) as Map<String, dynamic>;
} on FileSystemException catch (e) {
throw FileSystemException('Unable to read input arb file: $e');
} on FormatException catch (e) {
@@ -669,7 +668,7 @@
'Invalid key format: $key \n It has to be in camel case, cannot start '
'with a number, and cannot contain non-alphanumeric characters.'
);
- if (pluralValueRE.hasMatch(bundle[key]))
+ if (pluralValueRE.hasMatch(bundle[key] as String))
classMethods.add(genPluralMethod(bundle, key));
else
classMethods.add(genSimpleMethod(bundle, key));
diff --git a/packages/flutter/lib/src/gestures/mouse_tracking.dart b/packages/flutter/lib/src/gestures/mouse_tracking.dart
index ba309bf..563b12b 100644
--- a/packages/flutter/lib/src/gestures/mouse_tracking.dart
+++ b/packages/flutter/lib/src/gestures/mouse_tracking.dart
@@ -314,7 +314,7 @@
final int device = state.device;
return (_mouseStates.containsKey(device) && _trackedAnnotations.isNotEmpty)
? LinkedHashSet<MouseTrackerAnnotation>.from(annotationFinder(globalPosition))
- : <MouseTrackerAnnotation>{};
+ : <MouseTrackerAnnotation>{} as LinkedHashSet<MouseTrackerAnnotation>;
}
static bool get _duringBuildPhase {
diff --git a/packages/flutter/lib/src/material/reorderable_list.dart b/packages/flutter/lib/src/material/reorderable_list.dart
index 8dba05b..6b261cf 100644
--- a/packages/flutter/lib/src/material/reorderable_list.dart
+++ b/packages/flutter/lib/src/material/reorderable_list.dart
@@ -530,7 +530,7 @@
return _dragging == toAccept && toAccept != toWrap.key;
},
onAccept: (Key accepted) { },
- onLeave: (Key leaving) { },
+ onLeave: (Object leaving) { },
);
});
}
diff --git a/packages/flutter/lib/src/painting/edge_insets.dart b/packages/flutter/lib/src/painting/edge_insets.dart
index 4c2b61a..63504c8 100644
--- a/packages/flutter/lib/src/painting/edge_insets.dart
+++ b/packages/flutter/lib/src/painting/edge_insets.dart
@@ -162,12 +162,12 @@
/// or equal to `min`, and less than or equal to `max`.
EdgeInsetsGeometry clamp(EdgeInsetsGeometry min, EdgeInsetsGeometry max) {
return _MixedEdgeInsets.fromLRSETB(
- _left.clamp(min._left, max._left),
- _right.clamp(min._right, max._right),
- _start.clamp(min._start, max._start),
- _end.clamp(min._end, max._end),
- _top.clamp(min._top, max._top),
- _bottom.clamp(min._bottom, max._bottom),
+ _left.clamp(min._left, max._left) as double,
+ _right.clamp(min._right, max._right) as double,
+ _start.clamp(min._start, max._start) as double,
+ _end.clamp(min._end, max._end) as double,
+ _top.clamp(min._top, max._top) as double,
+ _bottom.clamp(min._bottom, max._bottom) as double,
);
}
diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart
index a9bde83..0a7cba2 100644
--- a/packages/flutter/lib/src/rendering/layer.dart
+++ b/packages/flutter/lib/src/rendering/layer.dart
@@ -672,9 +672,9 @@
if (hoverAnnotation == null || !rect.contains(localPosition)) {
return false;
}
- if (MouseTrackerAnnotation == S) {
+ if (S == MouseTrackerAnnotation) {
final Object untypedValue = hoverAnnotation;
- final S typedValue = untypedValue;
+ final S typedValue = untypedValue as S;
result.add(AnnotationEntry<S>(
annotation: typedValue,
localPosition: localPosition,
diff --git a/packages/flutter/lib/src/rendering/proxy_sliver.dart b/packages/flutter/lib/src/rendering/proxy_sliver.dart
index ad1f7a1..4c1ac24 100644
--- a/packages/flutter/lib/src/rendering/proxy_sliver.dart
+++ b/packages/flutter/lib/src/rendering/proxy_sliver.dart
@@ -7,6 +7,7 @@
import 'package:flutter/foundation.dart';
import 'package:vector_math/vector_math_64.dart';
+import 'layer.dart';
import 'object.dart';
import 'sliver.dart';
@@ -71,7 +72,7 @@
@override
void applyPaintTransform(RenderObject child, Matrix4 transform) {
assert(child != null);
- final SliverPhysicalParentData childParentData = child.parentData;
+ final SliverPhysicalParentData childParentData = child.parentData as SliverPhysicalParentData;
childParentData.applyPaintTransform(transform);
}
}
@@ -169,7 +170,7 @@
offset,
_alpha,
_paintWithOpacity,
- oldLayer: layer,
+ oldLayer: layer as OpacityLayer,
);
}
}
diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart
index 4965249..1fba2f5 100644
--- a/packages/flutter/lib/src/widgets/binding.dart
+++ b/packages/flutter/lib/src/widgets/binding.dart
@@ -332,7 +332,7 @@
registerServiceExtension(
name: 'fastReassemble',
callback: (Map<String, Object> params) async {
- final String className = params['class'];
+ final String className = params['class'] as String;
void markElementsDirty(Element element) {
if (element == null) {
return;
diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart
index f504e9b..1365be2 100644
--- a/packages/flutter/lib/src/widgets/drag_target.dart
+++ b/packages/flutter/lib/src/widgets/drag_target.dart
@@ -48,7 +48,7 @@
/// Signature for when a [Draggable] leaves a [DragTarget].
///
/// Used by [DragTarget.onLeave].
-typedef DragTargetLeave<T> = void Function(T data);
+typedef DragTargetLeave = void Function(Object data);
/// Where the [Draggable] should be anchored during a drag.
enum DragAnchor {
@@ -502,7 +502,7 @@
/// Called when a given piece of data being dragged over this target leaves
/// the target.
- final DragTargetLeave<T> onLeave;
+ final DragTargetLeave onLeave;
@override
_DragTargetState<T> createState() => _DragTargetState<T>();
@@ -514,13 +514,12 @@
class _DragTargetState<T> extends State<DragTarget<T>> {
final List<_DragAvatar<T>> _candidateAvatars = <_DragAvatar<T>>[];
- final List<_DragAvatar<dynamic>> _rejectedAvatars = <_DragAvatar<dynamic>>[];
+ final List<_DragAvatar<Object>> _rejectedAvatars = <_DragAvatar<Object>>[];
- bool didEnter(_DragAvatar<dynamic> avatar) {
+ bool didEnter(_DragAvatar<Object> avatar) {
assert(!_candidateAvatars.contains(avatar));
assert(!_rejectedAvatars.contains(avatar));
- final dynamic data = avatar.data;
- if (data is T && (widget.onWillAccept == null || widget.onWillAccept(data))) {
+ if (avatar is _DragAvatar<T> && (widget.onWillAccept == null || widget.onWillAccept(avatar.data))) {
setState(() {
_candidateAvatars.add(avatar);
});
@@ -533,7 +532,7 @@
}
}
- void didLeave(_DragAvatar<dynamic> avatar) {
+ void didLeave(_DragAvatar<Object> avatar) {
assert(_candidateAvatars.contains(avatar) || _rejectedAvatars.contains(avatar));
if (!mounted)
return;
@@ -545,7 +544,7 @@
widget.onLeave(avatar.data);
}
- void didDrop(_DragAvatar<dynamic> avatar) {
+ void didDrop(_DragAvatar<Object> avatar) {
assert(_candidateAvatars.contains(avatar));
if (!mounted)
return;
@@ -553,7 +552,7 @@
_candidateAvatars.remove(avatar);
});
if (widget.onAccept != null)
- widget.onAccept(avatar.data);
+ widget.onAccept(avatar.data as T);
}
@override
@@ -562,7 +561,7 @@
return MetaData(
metaData: this,
behavior: HitTestBehavior.translucent,
- child: widget.builder(context, _mapAvatarsToData<T>(_candidateAvatars), _mapAvatarsToData<dynamic>(_rejectedAvatars)),
+ child: widget.builder(context, _mapAvatarsToData<T>(_candidateAvatars), _mapAvatarsToData<Object>(_rejectedAvatars)),
);
}
}
diff --git a/packages/flutter/test/widgets/draggable_test.dart b/packages/flutter/test/widgets/draggable_test.dart
index 2c00324..3a9023a 100644
--- a/packages/flutter/test/widgets/draggable_test.dart
+++ b/packages/flutter/test/widgets/draggable_test.dart
@@ -90,13 +90,21 @@
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return Container(height: 100.0, child: const Text('Target 1'));
},
- onLeave: (int data) => leftBehind['Target 1'] = leftBehind['Target 1'] + data,
+ onLeave: (Object data) {
+ if (data is int) {
+ leftBehind['Target 1'] = leftBehind['Target 1'] + data;
+ }
+ },
),
DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return Container(height: 100.0, child: const Text('Target 2'));
},
- onLeave: (int data) => leftBehind['Target 2'] = leftBehind['Target 2'] + data,
+ onLeave: (Object data) {
+ if (data is int) {
+ leftBehind['Target 2'] = leftBehind['Target 2'] + data;
+ }
+ },
),
],
),
diff --git a/packages/flutter_driver/analysis_options.yaml b/packages/flutter_driver/analysis_options.yaml
deleted file mode 100644
index a08bda2..0000000
--- a/packages/flutter_driver/analysis_options.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Override the parent analysis_options until all the repo has implicit-casts: false
-
-include: ../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
diff --git a/packages/flutter_goldens/analysis_options.yaml b/packages/flutter_goldens/analysis_options.yaml
index b9d57a9..b8591ca 100644
--- a/packages/flutter_goldens/analysis_options.yaml
+++ b/packages/flutter_goldens/analysis_options.yaml
@@ -2,8 +2,3 @@
# the ones from above, which include the `public_member_api_docs` rule).
include: ../../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
diff --git a/packages/flutter_goldens_client/analysis_options.yaml b/packages/flutter_goldens_client/analysis_options.yaml
index b9d57a9..b8591ca 100644
--- a/packages/flutter_goldens_client/analysis_options.yaml
+++ b/packages/flutter_goldens_client/analysis_options.yaml
@@ -2,8 +2,3 @@
# the ones from above, which include the `public_member_api_docs` rule).
include: ../../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
diff --git a/packages/flutter_localizations/analysis_options.yaml b/packages/flutter_localizations/analysis_options.yaml
deleted file mode 100644
index 2344f5a..0000000
--- a/packages/flutter_localizations/analysis_options.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Override the parent analysis_options until all the repo has implicit-casts: false
-
-include: ../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
-
-linter:
- rules:
- avoid_as: false
diff --git a/packages/flutter_test/analysis_options.yaml b/packages/flutter_test/analysis_options.yaml
deleted file mode 100644
index 3de2cb2..0000000
--- a/packages/flutter_test/analysis_options.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-include: ../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
diff --git a/packages/flutter_tools/analysis_options.yaml b/packages/flutter_tools/analysis_options.yaml
index 9d30761..525929f 100644
--- a/packages/flutter_tools/analysis_options.yaml
+++ b/packages/flutter_tools/analysis_options.yaml
@@ -3,11 +3,6 @@
include: ../../analysis_options.yaml
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
-
linter:
rules:
unawaited_futures: true
diff --git a/packages/flutter_web_plugins/analysis_options.yaml b/packages/flutter_web_plugins/analysis_options.yaml
deleted file mode 100644
index a08bda2..0000000
--- a/packages/flutter_web_plugins/analysis_options.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Override the parent analysis_options until all the repo has implicit-casts: false
-
-include: ../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
diff --git a/packages/fuchsia_remote_debug_protocol/analysis_options.yaml b/packages/fuchsia_remote_debug_protocol/analysis_options.yaml
deleted file mode 100644
index a08bda2..0000000
--- a/packages/fuchsia_remote_debug_protocol/analysis_options.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Override the parent analysis_options until all the repo has implicit-casts: false
-
-include: ../analysis_options.yaml
-
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false