Version 2.14.0-145.0.dev

Merge commit '538e47a1fc83687a0f5d15080807a6c41599cce7' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_returned_value.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_returned_value.dart
new file mode 100644
index 0000000..cf69624
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_returned_value.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class RemoveReturnedValue extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_RETURNED_VALUE;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_RETURNED_VALUE_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final node = this.node;
+    if (node is ReturnStatement) {
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addDeletion(range.endStart(node.returnKeyword, node.semicolon));
+      });
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static RemoveReturnedValue newInstance() => RemoveReturnedValue();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 661861a..f76a542 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -621,6 +621,12 @@
       'dart.fix.remove.questionMark.multi',
       DartFixKindPriority.IN_FILE,
       'Remove unnecessary question marks in file');
+  static const REMOVE_RETURNED_VALUE = FixKind('dart.fix.remove.returnedValue',
+      DartFixKindPriority.DEFAULT, 'Remove invalid returned value');
+  static const REMOVE_RETURNED_VALUE_MULTI = FixKind(
+      'dart.fix.remove.returnedValue.multi',
+      DartFixKindPriority.IN_FILE,
+      'Remove invalid returned values in file');
   static const REMOVE_THIS_EXPRESSION = FixKind(
       'dart.fix.remove.thisExpression',
       DartFixKindPriority.DEFAULT,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 6359410..4ebbaad 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -109,6 +109,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_parameters_in_getter_declaration.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_parentheses_in_getter_invocation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_question_mark.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_returned_value.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_this_expression.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_type_arguments.dart';
@@ -458,6 +459,15 @@
         ],
       )
     ],
+    LintNames.avoid_returning_null_for_void: [
+      FixInfo(
+        canBeAppliedToFile: true,
+        canBeBulkApplied: true,
+        generators: [
+          RemoveReturnedValue.newInstance,
+        ],
+      )
+    ],
     LintNames.avoid_single_cascade_in_expression_statements: [
       FixInfo(
         canBeAppliedToFile: true,
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index 4f9fd95..15a8e7a 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -25,6 +25,8 @@
       'avoid_return_types_on_setters';
   static const String avoid_returning_null_for_future =
       'avoid_returning_null_for_future';
+  static const String avoid_returning_null_for_void =
+      'avoid_returning_null_for_void';
   static const String avoid_single_cascade_in_expression_statements =
       'avoid_single_cascade_in_expression_statements';
   static const String avoid_types_as_parameter_names =
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_returned_value_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_returned_value_test.dart
new file mode 100644
index 0000000..41d65eb
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_returned_value_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'bulk/bulk_fix_processor.dart';
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RemoveReturnedValueBulkTest);
+    defineReflectiveTests(RemoveReturnedValueTest);
+  });
+}
+
+@reflectiveTest
+class RemoveReturnedValueBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.avoid_returning_null_for_void;
+
+  Future<void> test_simple() async {
+    await resolveTestCode('''
+void f(bool b) {
+  if (b) {
+    return null;
+  } else {
+    return null;
+  }
+}
+''');
+    await assertHasFix('''
+void f(bool b) {
+  if (b) {
+    return;
+  } else {
+    return;
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveReturnedValueTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_RETURNED_VALUE;
+
+  @override
+  String get lintCode => LintNames.avoid_returning_null_for_void;
+
+  Future<void> test_simple() async {
+    await resolveTestCode('''
+void f() {
+  return null;
+}
+''');
+    await assertHasFix('''
+void f() {
+  return;
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
index acc1caf..fe58f4e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
@@ -126,6 +126,7 @@
 import 'remove_parentheses_in_getter_invocation_test.dart'
     as remove_parentheses_in_getter_invocation;
 import 'remove_question_mark_test.dart' as remove_question_mark;
+import 'remove_returned_value_test.dart' as remove_returned_value;
 import 'remove_this_expression_test.dart' as remove_this_expression;
 import 'remove_type_annotation_test.dart' as remove_type_annotation;
 import 'remove_type_arguments_test.dart' as remove_type_arguments;
@@ -290,6 +291,7 @@
     remove_parameters_in_getter_declaration.main();
     remove_parentheses_in_getter_invocation.main();
     remove_question_mark.main();
+    remove_returned_value.main();
     remove_this_expression.main();
     remove_type_annotation.main();
     remove_type_arguments.main();
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index b4e210f..d78d0d5 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -82,39 +82,6 @@
     }
   }
 
-  /// Add top-level declaration of the library units to the local scope.
-  void addLocalDeclarations() {
-    for (var linkingUnit in context.units) {
-      for (var node in linkingUnit.unit.declarations) {
-        if (node is ast.ClassDeclaration) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.ClassTypeAlias) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.EnumDeclarationImpl) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.ExtensionDeclarationImpl) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.FunctionDeclarationImpl) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.FunctionTypeAlias) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.GenericTypeAlias) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.MixinDeclarationImpl) {
-          // Handled in ElementBuilder.
-        } else if (node is ast.TopLevelVariableDeclaration) {
-          // Handled in ElementBuilder.
-        } else {
-          throw UnimplementedError('${node.runtimeType}');
-        }
-      }
-    }
-    if ('$uri' == 'dart:core') {
-      localScope.declare('dynamic', reference.getChild('dynamic'));
-      localScope.declare('Never', reference.getChild('Never'));
-    }
-  }
-
   /// Return `true` if the export scope was modified.
   bool addToExportScope(String name, Reference reference) {
     if (name.startsWith('_')) return false;
@@ -135,6 +102,8 @@
         as LibraryElementImpl;
   }
 
+  /// Build elements for declarations in the library units, add top-level
+  /// declarations to the local scope, for combining into export scopes.
   void buildElements() {
     for (var unitContext in context.units) {
       var elementBuilder = ElementBuilder(
@@ -147,6 +116,10 @@
       }
       elementBuilder.buildDeclarationElements(unitContext.unit);
     }
+    if ('$uri' == 'dart:core') {
+      localScope.declare('dynamic', reference.getChild('dynamic'));
+      localScope.declare('Never', reference.getChild('Never'));
+    }
   }
 
   void buildEnumChildren() {
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index a6ee88f..d3408d6 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -119,7 +119,6 @@
     }
 
     for (var library in builders.values) {
-      library.addLocalDeclarations();
       library.buildElements();
     }
 
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_dynamic_field_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_field_test.dart
new file mode 100644
index 0000000..fd002a6
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_field_test.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImplicitDynamicFieldTest);
+    defineReflectiveTests(ImplicitDynamicFieldWithoutNullSafetyTest);
+  });
+}
+
+@reflectiveTest
+class ImplicitDynamicFieldTest extends PubPackageResolutionTest
+    with ImplicitDynamicFieldTestCases {}
+
+mixin ImplicitDynamicFieldTestCases on PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(implicitDynamic: false),
+    );
+  }
+
+  test_instance_explicitDynamic_initialized() async {
+    await assertNoErrorsInCode('''
+class C {
+  dynamic f = (<dynamic>[])[0];
+}
+''');
+  }
+
+  test_instance_explicitDynamic_uninitialized() async {
+    await assertNoErrorsInCode('''
+class C {
+  dynamic f;
+}
+''');
+  }
+
+  test_instance_final_initialized() async {
+    await assertErrorsInCode('''
+class C {
+  final f = (<dynamic>[])[0];
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 18, 20),
+    ]);
+  }
+
+  test_instance_final_uninitialized() async {
+    await assertErrorsInCode('''
+class C {
+  final f;
+  C(this.f);
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 18, 1),
+    ]);
+  }
+
+  test_instance_var_initialized() async {
+    await assertErrorsInCode('''
+class C {
+  var f = (<dynamic>[])[0];
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 16, 20),
+    ]);
+  }
+
+  test_instance_var_initialized_inference() async {
+    await assertNoErrorsInCode('''
+class C {
+  var f = 0;
+}
+''');
+  }
+
+  test_instance_var_uninitialized() async {
+    await assertErrorsInCode('''
+class C {
+  var f;
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 16, 1),
+    ]);
+  }
+
+  test_instance_var_uninitialized_multiple() async {
+    await assertErrorsInCode('''
+class C {
+  var f, g = 42, h;
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 16, 1),
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 27, 1),
+    ]);
+  }
+
+  test_static_var_initialized() async {
+    await assertErrorsInCode('''
+class C {
+  static var f = (<dynamic>[])[0];
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 23, 20),
+    ]);
+  }
+}
+
+@reflectiveTest
+class ImplicitDynamicFieldWithoutNullSafetyTest extends PubPackageResolutionTest
+    with ImplicitDynamicFieldTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_dynamic_function_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_function_test.dart
new file mode 100644
index 0000000..1ec587d
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_function_test.dart
@@ -0,0 +1,142 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImplicitDynamicFunctionTest);
+    defineReflectiveTests(ImplicitDynamicFunctionWithoutNullSafetyTest);
+  });
+}
+
+@reflectiveTest
+class ImplicitDynamicFunctionTest extends PubPackageResolutionTest
+    with ImplicitDynamicFunctionTestCases {}
+
+mixin ImplicitDynamicFunctionTestCases on PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(implicitDynamic: false),
+    );
+  }
+
+  test_local_downwardInferenceGivesInt() async {
+    await assertNoErrorsInCode('''
+void f(int d) {
+  T g<T>() => throw 'x';
+  d = g();
+}
+''');
+  }
+
+  test_local_noDownwardsInference() async {
+    await assertErrorsInCode('''
+void f(dynamic d) {
+  T a<T>() => throw 'x';
+  d = a();
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 51, 1),
+    ]);
+  }
+
+  test_local_noInference() async {
+    await assertErrorsInCode('''
+void f(dynamic d) {
+  void a<T>() {};
+  a();
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 40, 1),
+    ]);
+  }
+
+  test_local_upwardsInferenceGivesDynamic() async {
+    await assertErrorsInCode('''
+void f(dynamic d) {
+  void a<T>(T t) {};
+  a(d);
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 43, 1),
+    ]);
+  }
+
+  test_local_upwardsInferenceGivesInt() async {
+    await assertNoErrorsInCode('''
+void f() {
+  void a<T>(T t) {};
+  a(42);
+}
+''');
+  }
+
+  test_topLevel_downwardInferenceGivesDynamic() async {
+    await assertErrorsInCode('''
+external T a<T>();
+
+void f(dynamic d) {
+  d = a();
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 46, 1),
+    ]);
+  }
+
+  test_topLevel_downwardInferenceGivesInt() async {
+    await assertNoErrorsInCode('''
+external T a<T>();
+
+void f(int d) {
+  d = a();
+}
+''');
+  }
+
+  test_topLevel_dynamicAssignmentToTypeVariable() async {
+    await assertErrorsInCode('''
+T a<T>(T t) => t;
+
+void f(dynamic d) {
+  a(d);
+  a(42);
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 41, 1),
+    ]);
+  }
+
+  test_topLevel_intAssignmentToTypeVariable() async {
+    await assertNoErrorsInCode('''
+T a<T>(T t) => t;
+
+void f() {
+  a(42);
+}
+''');
+  }
+
+  test_topLevel_noInference() async {
+    await assertErrorsInCode('''
+void a<T>() {}
+
+void f() {
+  a();
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 29, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class ImplicitDynamicFunctionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ImplicitDynamicFunctionTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_dynamic_list_literal_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_list_literal_test.dart
new file mode 100644
index 0000000..85f8b79
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_list_literal_test.dart
@@ -0,0 +1,92 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImplicitDynamicListLiteralTest);
+    defineReflectiveTests(ImplicitDynamicListLiteralWithoutNullSafetyTest);
+  });
+}
+
+@reflectiveTest
+class ImplicitDynamicListLiteralTest extends PubPackageResolutionTest
+    with ImplicitDynamicListLiteralTestCases {}
+
+mixin ImplicitDynamicListLiteralTestCases on PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(implicitDynamic: false),
+    );
+  }
+
+  test_assignedToListWithExplicitTypeArgument_dynamic() async {
+    await assertErrorsInCode('''
+List<dynamic> a = [];
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 18, 2),
+    ]);
+  }
+
+  test_assignedToListWithExplicitTypeArgument_int() async {
+    await assertNoErrorsInCode('''
+List<int> a = [];
+''');
+  }
+
+  test_assignedToRawList() async {
+    await assertErrorsInCode('''
+List a = [];
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 9, 2),
+    ]);
+  }
+
+  test_assignedToVar_empty() async {
+    await assertErrorsInCode('''
+var a = [];
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 8, 2),
+    ]);
+  }
+
+  test_assignedToVar_nonDynamicElements() async {
+    await assertNoErrorsInCode('''
+var a = [42];
+''');
+  }
+
+  test_dynamicElements() async {
+    await assertErrorsInCode('''
+void f(dynamic d) {
+  [d, d];
+}
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 22, 6),
+    ]);
+  }
+
+  test_explicitTypeArgument_dynamic() async {
+    await assertNoErrorsInCode('''
+var a = <dynamic>[];
+''');
+  }
+
+  test_explicitTypeArgument_int() async {
+    await assertNoErrorsInCode('''
+var a = <int>[];
+''');
+  }
+}
+
+@reflectiveTest
+class ImplicitDynamicListLiteralWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ImplicitDynamicListLiteralTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_dynamic_map_literal_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_map_literal_test.dart
new file mode 100644
index 0000000..b9941ca
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/implicit_dynamic_map_literal_test.dart
@@ -0,0 +1,100 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImplicitDynamicMapLiteralTest);
+    defineReflectiveTests(ImplicitDynamicMapLiteralWithoutNullSafetyTest);
+  });
+}
+
+@reflectiveTest
+class ImplicitDynamicMapLiteralTest extends PubPackageResolutionTest
+    with ImplicitDynamicMapLiteralTestCases {}
+
+mixin ImplicitDynamicMapLiteralTestCases on PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(implicitDynamic: false),
+    );
+  }
+
+  test_assignedToMapWithExplicitTypeArguments_dynamic() async {
+    await assertErrorsInCode('''
+Map<dynamic, dynamic> a = {};
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 26, 2),
+    ]);
+  }
+
+  test_assignedToMapWithExplicitTypeArguments_int() async {
+    await assertNoErrorsInCode('''
+Map<int, int> a = {};
+''');
+  }
+
+  test_assignedToRawMap() async {
+    await assertErrorsInCode('''
+Map a = {};
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 8, 2),
+    ]);
+  }
+
+  test_assignedToVar_empty() async {
+    await assertErrorsInCode('''
+var a = {};
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 8, 2),
+    ]);
+  }
+
+  test_assignedToVar_nonDynamicElements() async {
+    await assertNoErrorsInCode('''
+var a = {0: 1};
+''');
+  }
+
+  test_dynamicKey() async {
+    await assertErrorsInCode('''
+dynamic d = 1;
+var a = {d: 'x'};
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 23, 8),
+    ]);
+  }
+
+  test_dynamicValue() async {
+    await assertErrorsInCode('''
+dynamic d = 1;
+var a = {'x': d};
+''', [
+      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 23, 8),
+    ]);
+  }
+
+  test_explicitTypeArguments_dynamic() async {
+    await assertNoErrorsInCode('''
+var a = <dynamic, dynamic>{};
+''');
+  }
+
+  test_explicitTypeArguments_int() async {
+    await assertNoErrorsInCode('''
+var a = <int, int>{};
+''');
+  }
+}
+
+@reflectiveTest
+class ImplicitDynamicMapLiteralWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ImplicitDynamicMapLiteralTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 66018e3..78fe8d7 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -240,6 +240,11 @@
 import 'implements_super_class_test.dart' as implements_super_class;
 import 'implements_type_alias_expands_to_type_parameter_test.dart'
     as implements_type_alias_expands_to_type_parameter;
+import 'implicit_dynamic_field_test.dart' as implicit_dynamic_field;
+import 'implicit_dynamic_function_test.dart' as implicit_dynamic_function;
+import 'implicit_dynamic_list_literal_test.dart'
+    as implicit_dynamic_list_literal;
+import 'implicit_dynamic_map_literal_test.dart' as implicit_dynamic_map_literal;
 import 'implicit_this_reference_in_initializer_test.dart'
     as implicit_this_reference_in_initializer;
 import 'import_deferred_library_with_load_function_test.dart'
@@ -851,6 +856,10 @@
     implements_repeated.main();
     implements_super_class.main();
     implements_type_alias_expands_to_type_parameter.main();
+    implicit_dynamic_field.main();
+    implicit_dynamic_function.main();
+    implicit_dynamic_list_literal.main();
+    implicit_dynamic_map_literal.main();
     implicit_this_reference_in_initializer.main();
     import_deferred_library_with_load_function.main();
     import_internal_library.main();
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 61cbee9..dfad546 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -1790,111 +1790,6 @@
     ]);
   }
 
-  test_implicitDynamic_field() async {
-    _disableTestPackageImplicitDynamic();
-    await assertErrorsInCode(r'''
-class C {
-  var x0;
-  var x1 = (<dynamic>[])[0];
-  var x2, x3 = 42, x4;
-  dynamic y0;
-  dynamic y1 = (<dynamic>[])[0];
-}
-''', [
-      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 16, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 26, 21),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 55, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FIELD, 68, 2),
-    ]);
-  }
-
-  test_implicitDynamic_function() async {
-    _disableTestPackageImplicitDynamic();
-    await assertErrorsInCode(r'''
-T a<T>(T t) => t;
-T b<T>() => null;
-
-void main<S>() {
-  dynamic d;
-  int i;
-  a(d);
-  a(42);
-  b();
-  d = b();
-  i = b();
-
-  void f<T>(T t) {};
-  T g<T>() => null;
-
-  f(d);
-  f(42);
-  g();
-  d = g();
-  i = g();
-
-  (<T>(T t) => t)(d);
-  (<T>(T t) => t)(42);
-  (<T>() => null as T)<int>();
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 73, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 78, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 95, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 106, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 167, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 184, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 195, 1),
-      error(LanguageCode.IMPLICIT_DYNAMIC_INVOKE, 214, 15),
-      error(HintCode.UNNECESSARY_CAST, 269, 9),
-    ]);
-  }
-
-  test_implicitDynamic_listLiteral() async {
-    _disableTestPackageImplicitDynamic();
-    await assertErrorsInCode(r'''
-var l0 = [];
-List l1 = [];
-List<dynamic> l2 = [];
-dynamic d = 42;
-var l3 = [d, d];
-
-var l4 = <dynamic>[];
-var l5 = <int>[];
-List<int> l6 = [];
-var l7 = [42];
-''', [
-      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 9, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 23, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 46, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL, 75, 6),
-    ]);
-  }
-
-  test_implicitDynamic_mapLiteral() async {
-    _disableTestPackageImplicitDynamic();
-    await assertErrorsInCode(r'''
-var m0 = {};
-Map m1 = {};
-Map<dynamic, dynamic> m2 = {};
-dynamic d = 42;
-var m3 = {d: d};
-var m4 = {'x': d, 'y': d};
-var m5 = {d: 'x'};
-
-var m6 = <dynamic, dynamic>{};
-var m7 = <String, String>{};
-Map<String, String> m8 = {};
-var m9 = {'hi': 'there'};
-''', [
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 9, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 22, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 53, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 82, 6),
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 99, 16),
-      error(LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL, 126, 8),
-    ]);
-  }
-
   test_implicitDynamic_method() async {
     _disableTestPackageImplicitDynamic();
     await assertErrorsInCode(r'''
diff --git a/tools/VERSION b/tools/VERSION
index 32421ed..237e5a0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 144
+PRERELEASE 145
 PRERELEASE_PATCH 0
\ No newline at end of file