diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 25cd672..80f31e7 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -92,7 +92,7 @@
 typedef FuncA(A a);
 class A {}
 class B {}
-main(FuncA f) {
+f(FuncA f) {
   if (f is FuncDyn) {
     f(new B());
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 5f9af9f..c542921 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -183,7 +183,7 @@
     await assertErrorsInCode(r'''
 class C {
   C.foo();
-  static int foo;
+  static int foo = 0;
 }
 ''', [
       error(
@@ -206,7 +206,7 @@
   test_error_conflictingConstructorAndStaticField_OK_notSameClass() async {
     await assertNoErrorsInCode(r'''
 class A {
-  static int foo;
+  static int foo = 0;
 }
 class B extends A {
   B.foo();
@@ -218,7 +218,7 @@
     await assertNoErrorsInCode(r'''
 class C {
   C.foo();
-  int foo;
+  int foo = 0;
 }
 ''');
   }
@@ -273,7 +273,7 @@
   foo() {}
 }
 class B extends A {
-  int foo;
+  int foo = 0;
 }
 ''', [
       error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
@@ -309,13 +309,13 @@
   test_error_conflictingMethodAndField_inSuper_field() async {
     await assertErrorsInCode(r'''
 class A {
-  int foo;
+  int foo = 0;
 }
 class B extends A {
   foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 45, 3),
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 49, 3),
     ]);
   }
 
@@ -410,10 +410,10 @@
 
   test_error_extendsNonClass_variable() async {
     await assertErrorsInCode(r'''
-int v;
+int v = 0;
 class A extends v {}
 ''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 23, 1),
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
     ]);
 
     var a = findElement.class_('A');
@@ -422,10 +422,10 @@
 
   test_error_extendsNonClass_variable_generic() async {
     await assertErrorsInCode(r'''
-int v;
+int v = 0;
 class A extends v<int> {}
 ''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 23, 1),
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
     ]);
 
     var a = findElement.class_('A');
@@ -469,7 +469,7 @@
   test_error_memberWithClassName_getter() async {
     await assertErrorsInCode(r'''
 class C {
-  int get C => null;
+  int get C => 0;
 }
 ''', [
       error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 20, 1),
@@ -479,7 +479,7 @@
   test_error_memberWithClassName_getter_static() async {
     await assertErrorsInCode(r'''
 class C {
-  static int get C => null;
+  static int get C => 0;
 }
 ''', [
       error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_test.dart
index cb88920..f26b501 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_test.dart
@@ -24,7 +24,7 @@
   factory B(U a) = A<U>;
 }
 
-B<int> b;
+B<int> b = B(0);
 ''');
     var classB_constructor = findElement.class_('B').unnamedConstructor!;
     assertMember(
diff --git a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
index 1483cdc..5094df7 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
@@ -62,7 +62,7 @@
 // @dart = 2.7
 import 'a.dart';
 
-main(A a) {
+f(A a) {
   for (var v in a) {
     v;
   }
@@ -75,7 +75,7 @@
 class ForLoopElementTest extends PubPackageResolutionTest {
   test_condition_rewrite() async {
     await assertNoErrorsInCode(r'''
-main(bool Function() b) {
+f(bool Function() b) {
   <int>[for (; b(); ) 0];
 }
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
index bce6cd2..0796c45 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
@@ -82,7 +82,7 @@
 class ForLoopStatementResolutionTest extends PubPackageResolutionTest {
   test_condition_rewrite() async {
     await assertNoErrorsInCode(r'''
-main(bool Function() b) {
+f(bool Function() b) {
   for (; b(); ) {
     print(0);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
index 1c625c7..bedb4ae 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
@@ -45,14 +45,14 @@
 
   test_genericFunctionTypeCannotBeTypeArgument_literal_function() async {
     await assertErrorsInCode(r'''
-T f<T>(T) => null;
+void f<T>(T) {}
 
 main() {
   f<Function<S>()>(null);
 }
 ''', [
       error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
-          33, 13),
+          30, 13),
     ]);
   }
 
@@ -72,7 +72,7 @@
   test_genericFunctionTypeCannotBeTypeArgument_literal_method() async {
     await assertErrorsInCode(r'''
 class C {
-  T f<T>(T) => null;
+  void f<T>(T) {}
 }
 
 main() {
@@ -80,7 +80,7 @@
 }
 ''', [
       error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
-          55, 13),
+          52, 13),
     ]);
   }
 
@@ -101,7 +101,7 @@
 
 typedef G = Function();
 
-C<G> x;
+C<G> x = C();
 ''');
   }
 
@@ -109,7 +109,7 @@
     await assertNoErrorsInCode(r'''
 class C<T> {}
 
-C<Function()> x;
+C<Function()> x = C();
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
index 7b647cb..95972aa 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
@@ -16,7 +16,7 @@
 class IfStatementResolutionTest extends PubPackageResolutionTest {
   test_condition_rewrite() async {
     await assertNoErrorsInCode(r'''
-main(bool Function() b) {
+f(bool Function() b) {
   if ( b() ) {
     print(0);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/library_element_test.dart b/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
index 9ab142f..b569f89 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
@@ -291,7 +291,7 @@
 class LibraryElementTest_scope extends PubPackageResolutionTest {
   test_lookup() async {
     await assertNoErrorsInCode(r'''
-int foo;
+int foo = 0;
 ''');
 
     var scope = result.libraryElement.scope;
diff --git a/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
index 2546cac..23db79e 100644
--- a/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
@@ -69,12 +69,12 @@
     await assertNoErrorsInCode(r'''
 Iterable f1() sync* {
   yield []; // 1
-  yield* List(); // 2
+  yield* List.empty(); // 2
 }
 
 Iterable<List<int>> f2() sync* {
   yield []; // 3
-  yield* List(); // 4
+  yield* List.empty(); // 4
 }
 ''');
     assertType(
@@ -83,7 +83,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 2'),
+      findNode.instanceCreation('List.empty(); // 2'),
       'List<dynamic>',
     );
 
@@ -93,7 +93,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 4'),
+      findNode.instanceCreation('List.empty(); // 4'),
       'List<List<int>>',
     );
   }
@@ -142,13 +142,13 @@
 main() {
   Iterable Function() f1 = () sync* {
     yield []; // 1
-    yield* List(); // 2
+    yield* List.empty(); // 2
   };
   f1;
 
   Iterable<List<int>> Function() f2 = () sync* {
     yield []; // 3
-    yield* List(); // 4
+    yield* List.empty(); // 4
   };
   f2;
 }
@@ -159,7 +159,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 2'),
+      findNode.instanceCreation('List.empty(); // 2'),
       'List<dynamic>',
     );
 
@@ -169,7 +169,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 4'),
+      findNode.instanceCreation('List.empty(); // 4'),
       'List<List<int>>',
     );
   }
@@ -216,12 +216,12 @@
 class A {
   Iterable m1() sync* {
     yield []; // 1
-    yield* List(); // 2
+    yield* List.empty(); // 2
   }
 
   Iterable<List<int>> m2() sync* {
     yield []; // 3
-    yield* List(); // 4
+    yield* List.empty(); // 4
   }
 }
 ''');
@@ -231,7 +231,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 2'),
+      findNode.instanceCreation('List.empty(); // 2'),
       'List<dynamic>',
     );
 
@@ -241,7 +241,7 @@
     );
 
     assertType(
-      findNode.instanceCreation('List(); // 4'),
+      findNode.instanceCreation('List.empty(); // 4'),
       'List<List<int>>',
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
index 3266124..e2c27bb 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
@@ -281,12 +281,12 @@
 final v = '';
 
 class A {
-  static bool c;
+  static bool c = false;
   final f = c ? v : v;
 }
 ''', [
-      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 104, 1),
-      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 108, 1),
+      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 112, 1),
+      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 116, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
index 055e4b1..4d4f331 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
@@ -47,22 +47,22 @@
   test_this_named() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   const A.a();
 }
 ''', [
-      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD, 27, 3),
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD, 31, 3),
     ]);
   }
 
   test_this_unnamed() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   const A();
 }
 ''', [
-      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD, 27, 1),
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD, 31, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
index 67edb47..3f39cf5 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
@@ -29,12 +29,12 @@
 
   test_variable() async {
     await assertErrorsInCode(r'''
-int A;
+int A = 0;
 f() {
   return const A();
 }
 ''', [
-      error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 28, 1),
+      error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 32, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index a69ca06..a05e934 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -23,33 +23,33 @@
   test_instance_field_field() async {
     await assertErrorsInCode(r'''
 class C {
-  int foo;
-  int foo;
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 27, 3),
-    ]);
-  }
-
-  test_instance_field_getter() async {
-    await assertErrorsInCode(r'''
-class C {
-  int foo;
-  int get foo => 0;
+  int foo = 0;
+  int foo = 0;
 }
 ''', [
       error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 31, 3),
     ]);
   }
 
+  test_instance_field_getter() async {
+    await assertErrorsInCode(r'''
+class C {
+  int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 35, 3),
+    ]);
+  }
+
   test_instance_field_method() async {
     await assertErrorsInCode(r'''
 class C {
-  int foo;
+  int foo = 0;
   void foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 28, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 32, 3),
     ]);
   }
 
@@ -171,33 +171,33 @@
   test_static_field_field() async {
     await assertErrorsInCode(r'''
 class C {
-  static int foo;
-  static int foo;
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 41, 3),
-    ]);
-  }
-
-  test_static_field_getter() async {
-    await assertErrorsInCode(r'''
-class C {
-  static int foo;
-  static int get foo => 0;
+  static int foo = 0;
+  static int foo = 0;
 }
 ''', [
       error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 45, 3),
     ]);
   }
 
+  test_static_field_getter() async {
+    await assertErrorsInCode(r'''
+class C {
+  static int foo = 0;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 49, 3),
+    ]);
+  }
+
   test_static_field_method() async {
     await assertErrorsInCode(r'''
 class C {
-  static int foo;
+  static int foo = 0;
   static void foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 42, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 46, 3),
     ]);
   }
 
@@ -468,11 +468,11 @@
     await assertErrorsInCode(r'''
 class A {}
 extension E on A {
-  static int foo;
-  static int foo;
+  static int foo = 0;
+  static int foo = 0;
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 61, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 65, 3),
     ]);
   }
 
@@ -480,11 +480,11 @@
     await assertErrorsInCode(r'''
 class A {}
 extension E on A {
-  static int foo;
+  static int foo = 0;
   static int get foo => 0;
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 65, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 69, 3),
     ]);
   }
 
@@ -492,11 +492,11 @@
     await assertErrorsInCode(r'''
 class A {}
 extension E on A {
-  static int foo;
+  static int foo = 0;
   static void foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 62, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 66, 3),
     ]);
   }
 
@@ -641,33 +641,33 @@
   test_instance_field_field() async {
     await assertErrorsInCode(r'''
 mixin M {
-  int foo;
-  int foo;
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 27, 3),
-    ]);
-  }
-
-  test_instance_field_getter() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  int foo;
-  int get foo => 0;
+  int foo = 0;
+  int foo = 0;
 }
 ''', [
       error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 31, 3),
     ]);
   }
 
+  test_instance_field_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 35, 3),
+    ]);
+  }
+
   test_instance_field_method() async {
     await assertErrorsInCode(r'''
 mixin M {
-  int foo;
+  int foo = 0;
   void foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 28, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 32, 3),
     ]);
   }
 
@@ -789,33 +789,33 @@
   test_static_field_field() async {
     await assertErrorsInCode(r'''
 mixin M {
-  static int foo;
-  static int foo;
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 41, 3),
-    ]);
-  }
-
-  test_static_field_getter() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  static int foo;
-  static int get foo => 0;
+  static int foo = 0;
+  static int foo = 0;
 }
 ''', [
       error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 45, 3),
     ]);
   }
 
+  test_static_field_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  static int foo = 0;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 49, 3),
+    ]);
+  }
+
   test_static_field_method() async {
     await assertErrorsInCode(r'''
 mixin M {
-  static int foo;
+  static int foo = 0;
   static void foo() {}
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 42, 3),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 46, 3),
     ]);
   }
 
@@ -1040,11 +1040,11 @@
   test_parameters_constructor_field_first() async {
     await assertErrorsInCode(r'''
 class A {
-  int a;
+  int? a;
   A(this.a, int a);
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 35, 1),
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 36, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
index 963db0e..427f023 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
@@ -25,7 +25,7 @@
 library L;
 import 'lib1.dart';
 import 'lib1.dart';
-A a;''');
+A a = A();''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart', [
@@ -37,13 +37,15 @@
     newFile('$testPackageLibPath/lib1.dart', content: r'''
 library lib1;
 class A {}
-class B {}''');
+class B {}
+''');
 
     newFile('$testPackageLibPath/lib2.dart', content: r'''
 library L;
 import 'lib1.dart' as M show A hide B;
 import 'lib1.dart' as M show A hide B;
-M.A a;''');
+M.A a = M.A();
+''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart', [
@@ -61,8 +63,9 @@
 library L;
 import 'lib1.dart';
 import 'lib1.dart' hide A;
-A a;
-B b;''');
+A a = A();
+B b = B();
+''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart');
@@ -78,8 +81,9 @@
 library L;
 import 'lib1.dart';
 import 'lib1.dart' show A;
-A a;
-B b;''');
+A a = A();
+B b = B();
+''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart');
@@ -94,8 +98,9 @@
 library L;
 import 'lib1.dart';
 import 'lib1.dart' as one;
-A a;
-one.A a2;''');
+A a = A();
+one.A a2 = one.A();
+''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart');
@@ -111,7 +116,8 @@
 import 'lib1.dart';
 import 'lib1.dart';
 import 'lib1.dart';
-A a;''');
+A a = A();
+''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart', [
diff --git a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
index 6e73263..3255aff 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
@@ -21,13 +21,13 @@
   test_constConstructor() async {
     await assertErrorsInCode(r'''
 class A {
-  const A({int x});
+  const A({int x = 0});
 }
 main() {
   const A(0);
 }
 ''', [
-      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 51,
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 55,
           1),
     ]);
   }
@@ -35,13 +35,13 @@
   test_constConstructor_super() async {
     await assertErrorsInCode(r'''
 class A {
-  const A({int x});
+  const A({int x = 0});
 }
 class B extends A {
   const B() : super(0);
 }
 ''', [
-      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 72,
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 76,
           1),
     ]);
   }
@@ -49,10 +49,10 @@
   test_functionExpressionInvocation() async {
     await assertErrorsInCode('''
 main() {
-  (int x, {int y}) {} (0, 1);
+  (int x, {int y = 0}) {} (0, 1);
 }
 ''', [
-      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 35,
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 39,
           1),
     ]);
   }
@@ -71,16 +71,16 @@
 
   test_partiallyTypedName() async {
     await assertErrorsInCode(r'''
-f({int xx, int yy, int zz}) {}
+f({int xx = 0, int yy = 0, int zz = 0}) {}
 
 main() {
   f(xx: 1, yy: 2, z);
 }
 ''', [
-      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 59,
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 71,
           1),
-      error(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, 59, 1),
-      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 59, 1),
+      error(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, 71, 1),
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
index 1bbd96b..10a351a 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
@@ -19,11 +19,11 @@
   test_fieldFormalParameter() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   factory A(this.x) => throw 0;
 }
 ''', [
-      error(CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, 31, 6),
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, 35, 6),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
index 6e2ce5f..e9367b1 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
@@ -29,11 +29,11 @@
   test_defaultParameter() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
-  m([this.x]) {}
+  int x = 0;
+  m([this.x = 0]) {}
 }
 ''', [
-      error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 24, 6),
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 28, 6),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
index 1bd985e..0ac15d2 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
@@ -19,12 +19,12 @@
   test_afterRedirection() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   A.named() {}
   A() : this.named(), x = 42;
 }
 ''', [
-      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 56,
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 60,
           6),
     ]);
   }
@@ -32,12 +32,12 @@
   test_beforeRedirection() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   A.named() {}
   A() : x = 42, this.named();
 }
 ''', [
-      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 42,
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 46,
           6),
     ]);
   }
@@ -45,12 +45,12 @@
   test_redirectionOnly() async {
     await assertErrorsInCode(r'''
 class A {
-  int x;
+  int x = 0;
   A.named() {}
   A(this.x) : this.named();
 }
 ''', [
-      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 38,
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 42,
           6),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
index 3875476..0584eb2 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
@@ -17,26 +17,24 @@
 class ForInOfInvalidElementTypeTest extends PubPackageResolutionTest {
   test_await_declaredVariableWrongType() async {
     await assertErrorsInCode('''
-f() async {
-  Stream<String> stream;
+f(Stream<String> stream) async {
   await for (int i in stream) {}
 }
 ''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 54, 1),
-      error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 59, 6),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 50, 1),
+      error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 55, 6),
     ]);
   }
 
   test_await_existingVariableWrongType() async {
     await assertErrorsInCode('''
-f() async {
-  Stream<String> stream;
+f(Stream<String> stream) async {
   int i;
   await for (i in stream) {}
 }
 ''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 43, 1),
-      error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 64, 6),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 39, 1),
+      error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 60, 6),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
index 55109a1..7a0dca2 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
@@ -37,7 +37,7 @@
     await assertErrorsInCode(r'''
 library lib;
 import 'part.dart';
-A a;
+A a = A();
 ''', [
       error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
     ]);
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
index ad65005..0633063 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
@@ -136,11 +136,11 @@
 
   test_inferredFromNullAware() async {
     await assertErrorsInCode(r'''
-void main() {
-  var x = [1, 2, 3] ?? [];
+void f(List<int> a) {
+  var x = a ?? [];
 }
 ''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 20, 1),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 28, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart
index f6a67f2..47f25d6a 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart
@@ -53,10 +53,10 @@
   test_field_withType() async {
     await assertNoErrorsInCode(r'''
 class C {
-  static int c;
+  static int c = 0;
   static final int d = 5;
 
-  int a;
+  int a = 0;
   final int b;
 
   C(this.b);
@@ -99,16 +99,16 @@
   test_localVariable_withType() async {
     await assertErrorsInCode(r'''
 void f() {
-  int a;
+  int a = 0;
   dynamic b;
-  Object c;
+  Object c = Object();
   Null d;
 }
 ''', [
       error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 30, 1),
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 42, 1),
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 52, 1),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 34, 1),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 46, 1),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 67, 1),
     ]);
   }
 
@@ -138,9 +138,9 @@
 
   test_topLevelVariable_withType() async {
     await assertNoErrorsInCode(r'''
-int a;
+int a = 0;
 dynamic b;
-Object c;
+Object c = Object();
 Null d;
 ''');
   }
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart
index 47e4695..a93f67e 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart
@@ -52,7 +52,7 @@
 
   test_namedParameter_withType() async {
     await assertNoErrorsInCode(r'''
-void fn({int a}) => print(a);
+void fn({int a = 0}) => print(a);
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart
index 6aa701f..35dd54c 100644
--- a/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart
@@ -18,11 +18,11 @@
   test_static() async {
     await assertErrorsInCode(r'''
 class A {
-  static int x;
+  static int x = 1;
   A() : x = 0 {}
 }
 ''', [
-      error(CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, 34, 5),
+      error(CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, 38, 5),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
index 2a01c1d..755e118 100644
--- a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
@@ -30,13 +30,13 @@
   test_notInEnclosingClass() async {
     await assertErrorsInCode(r'''
 class A {
-int x;
+  int x = 1;
 }
 class B extends A {
   B(this.x) {}
 }
 ''', [
-      error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, 43,
+      error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, 49,
           6),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
index b79eba6..7b5b1dd 100644
--- a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
@@ -19,7 +19,7 @@
     await assertErrorsInCode(r'''
 class A {
   static int x;
-  A([this.x]) {}
+  A([this.x = 0]) {}
 }
 ''', [
       error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, 31, 6),
diff --git a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
index a4f47c8..aeaec55 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
@@ -23,12 +23,12 @@
   static int get a => 0;
 }
 
-C g(C c) => null;
+C g(C c) => C();
 f(C c) {
   g(c).a;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 93, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 92, 1),
     ]);
     assertElement(
       findNode.simple('a;'),
@@ -94,11 +94,11 @@
 class A {
   static m() {}
 }
-main(A a) {
+f(A a) {
   a.m;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 44, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 41, 1),
     ]);
   }
 
@@ -107,11 +107,11 @@
 class A {
   static var f;
 }
-main(A a) {
+f(A a) {
   a.f;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 44, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 41, 1),
     ]);
   }
 
@@ -120,11 +120,11 @@
 class A {
   static get f => 42;
 }
-main(A a) {
+f(A a) {
   a.f;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 50, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 47, 1),
     ]);
   }
 
@@ -133,11 +133,11 @@
 class A {
   static set f(x) {}
 }
-main(A a) {
+f(A a) {
   a.f = 42;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 49, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 46, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_factory_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_factory_annotation_test.dart
index 759ae73..ee79483 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_factory_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_factory_annotation_test.dart
@@ -37,7 +37,7 @@
 import 'package:meta/meta.dart';
 class X {
   @factory
-  int x;
+  int x = 0;
 }
 ''', [
       error(HintCode.INVALID_FACTORY_ANNOTATION, 45, 8),
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart
index 596fbc6..347e1da 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart
@@ -66,7 +66,7 @@
 class Stateful {
   @factory
   State createState() {
-    return null;
+    return State();
   }
 }
 class State { }
@@ -89,7 +89,7 @@
 import 'package:meta/meta.dart';
 class Stateful {
   @factory
-  State createState() => null;
+  State createState() => State();
 }
 class State { }
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart
index 5a7c46b..3a91af1 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart
@@ -17,12 +17,12 @@
 class InvalidFactoryNameNotAClassTest extends PubPackageResolutionTest {
   test_notClassName() async {
     await assertErrorsInCode(r'''
-int B;
+int B = 0;
 class A {
   factory B() => throw 0;
 }
 ''', [
-      error(CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS, 27, 1),
+      error(CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS, 31, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart
index a159977..301efe2 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart
@@ -62,7 +62,7 @@
 
 class C {
   @nonVirtual
-  int f;
+  int f = 0;
 }
 ''');
   }
@@ -96,7 +96,7 @@
 
 class C {
    @nonVirtual
-   static int f;
+   static int f = 0;
 }
 ''', [
       error(HintCode.INVALID_NON_VIRTUAL_ANNOTATION, 47, 11),
@@ -204,7 +204,7 @@
 
 mixin M {
   @nonVirtual
-  static int f;
+  static int f = 0;
 }
 ''', [
       error(HintCode.INVALID_NON_VIRTUAL_ANNOTATION, 46, 11),
@@ -262,7 +262,7 @@
 import 'package:meta/meta.dart';
 
 @nonVirtual
-int x;
+int x = 0;
 ''', [
       error(HintCode.INVALID_NON_VIRTUAL_ANNOTATION, 34, 11),
     ]);
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
index 3304a00..75f1f02 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
@@ -18,9 +18,9 @@
   test_emptyUri() async {
     await assertNoErrorsInCode('''
 import '' as top;
-int x;
+int x = 1;
 class C {
-  int x;
+  int x = 1;
   int get y => top.x; // ref
 }
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart
index 93727c5..c214ddd 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart
@@ -18,7 +18,7 @@
   test_optional_named() async {
     await assertErrorsInCode('''
 extension E on String {
-  void foo({covariant int a}) {}
+  void foo({covariant int a = 0}) {}
 }
 ''', [
       error(ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION, 36, 9),
@@ -28,7 +28,7 @@
   test_optional_positional() async {
     await assertErrorsInCode('''
 extension E on String {
-  void foo([covariant int a]) {}
+  void foo([covariant int a = 0]) {}
 }
 ''', [
       error(ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION, 36, 9),
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
index 9c15de5..97f44e6 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
@@ -99,7 +99,7 @@
 import 'package:meta/meta.dart';
 class A {
   @protected
-  int a;
+  int a = 0;
 }
 ''');
     newFile('$testPackageLibPath/lib2.dart', content: r'''
@@ -120,7 +120,7 @@
 import 'package:meta/meta.dart';
 class A {
   @protected
-  int a;
+  int a = 0;
 }
 abstract class B implements A {
   int b() => a;
@@ -220,14 +220,14 @@
     newFile('$testPackageLibPath/lib2.dart', content: r'''
 import 'lib1.dart';
 class B {
-  A a;
+  A a = A();
   int b() => a.a;
 }
 ''');
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart', [
-      error(HintCode.INVALID_USE_OF_PROTECTED_MEMBER, 52, 1),
+      error(HintCode.INVALID_USE_OF_PROTECTED_MEMBER, 58, 1),
     ]);
   }
 
@@ -365,7 +365,7 @@
     newFile('$testPackageLibPath/lib2.dart', content: r'''
 import 'lib1.dart';
 class B {
-  A a;
+  A a = A();
   b(int i) {
     a.a = i;
   }
@@ -374,7 +374,7 @@
 
     await _resolveFile('$testPackageLibPath/lib1.dart');
     await _resolveFile('$testPackageLibPath/lib2.dart', [
-      error(HintCode.INVALID_USE_OF_PROTECTED_MEMBER, 56, 1),
+      error(HintCode.INVALID_USE_OF_PROTECTED_MEMBER, 62, 1),
     ]);
   }
 
@@ -382,7 +382,7 @@
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class A {
-  int _a;
+  int _a = 0;
   @protected
   void set a(int a) { _a = a; }
   A(int a) {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart
index 4a42fcd..b50c373 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart
@@ -25,7 +25,7 @@
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class C {
-  @visibleForTesting int _a, b;
+  @visibleForTesting int _a = 0, b = 0;
 }
 ''', [
       error(HintCode.INVALID_VISIBILITY_ANNOTATION, 45, 18),
@@ -37,13 +37,13 @@
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class C {
-  @visibleForTesting int _a, _b;
+  @visibleForTesting int _a = 0, _b = 0;
 }
 ''', [
       error(HintCode.INVALID_VISIBILITY_ANNOTATION, 45, 18),
       error(HintCode.INVALID_VISIBILITY_ANNOTATION, 45, 18),
       error(HintCode.UNUSED_FIELD, 68, 2),
-      error(HintCode.UNUSED_FIELD, 72, 2),
+      error(HintCode.UNUSED_FIELD, 76, 2),
     ]);
   }
 
@@ -51,7 +51,7 @@
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class C {
-  @visibleForTesting int a, b;
+  @visibleForTesting int a = 0, b = 0;
 }
 ''');
   }
@@ -91,7 +91,7 @@
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class C {
-  @visibleForTesting int _a;
+  @visibleForTesting int _a = 1;
 }
 ''', [
       error(HintCode.INVALID_VISIBILITY_ANNOTATION, 45, 18),
diff --git a/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart b/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
index 6590bfd..abe984c 100644
--- a/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
@@ -28,10 +28,10 @@
   test_field_multiple() async {
     await assertErrorsInCode(r'''
 class A {
-  int z, A, b = 0;
+  int z = 0, A = 0, b = 0;
 }
 ''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 19, 1),
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 23, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart
index ea23d2e..52b62be 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart
@@ -17,21 +17,21 @@
 class MixinWithNonClassSuperclassTest extends PubPackageResolutionTest {
   test_class() async {
     await assertErrorsInCode(r'''
-int A;
+int A = 0;
 class B {}
 class C extends A with B {}
 ''', [
-      error(CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS, 34, 1),
+      error(CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS, 38, 1),
     ]);
   }
 
-  test_typeAlias() async {
+  test_mixinApplication() async {
     await assertErrorsInCode(r'''
-int A;
+int A = 0;
 class B {}
 class C = A with B;
 ''', [
-      error(CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS, 28, 1),
+      error(CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS, 32, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart b/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart
index 4b0f2f1..b66b944 100644
--- a/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart
@@ -26,7 +26,7 @@
 import 'package:meta/meta.dart';
 @immutable
 class A {
-  int x;
+  int x = 0;
 }
 ''', [
       error(HintCode.MUST_BE_IMMUTABLE, 50, 1),
@@ -38,7 +38,7 @@
 import 'package:meta/meta.dart';
 @immutable
 mixin A {
-  int x;
+  int x = 0;
 }
 ''', [
       error(HintCode.MUST_BE_IMMUTABLE, 50, 1),
@@ -51,7 +51,7 @@
 @immutable
 class A {}
 class B extends A {
-  int x;
+  int x = 0;
 }
 ''', [
       error(HintCode.MUST_BE_IMMUTABLE, 61, 1),
@@ -74,11 +74,11 @@
 @immutable
 class A {}
 class B {
-  int x;
+  int x = 0;
 }
 class C extends A with B {}
 ''', [
-      error(HintCode.MUST_BE_IMMUTABLE, 82, 1),
+      error(HintCode.MUST_BE_IMMUTABLE, 86, 1),
     ]);
   }
 
@@ -88,11 +88,11 @@
 @immutable
 class A {}
 class B {
-  int x;
+  int x = 0;
 }
 class C = A with B;
 ''', [
-      error(HintCode.MUST_BE_IMMUTABLE, 82, 1),
+      error(HintCode.MUST_BE_IMMUTABLE, 86, 1),
     ]);
   }
 
@@ -100,13 +100,13 @@
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
 class A {
-  int x;
+  int x = 0;
 }
 class B {}
 @immutable
 class C = A with B;
 ''', [
-      error(HintCode.MUST_BE_IMMUTABLE, 82, 1),
+      error(HintCode.MUST_BE_IMMUTABLE, 86, 1),
     ]);
   }
 
@@ -115,7 +115,7 @@
 import 'package:meta/meta.dart';
 @immutable
 class A {
-  static int x;
+  static int x = 0;
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
index 5e3dce3..6cf08fb 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
@@ -28,13 +28,15 @@
   }
 
   test_imported() async {
-    newFile('$testPackageLibPath/lib.dart', content: "class B {}");
+    newFile('$testPackageLibPath/lib.dart', content: '''
+class B {}
+''');
     await assertErrorsInCode('''
 import 'lib.dart' as lib;
 void f() {
   new lib.A();
 }
-lib.B b;
+lib.B b = lib.B();
 ''', [
       error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 47, 1),
     ]);
diff --git a/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart
index 67aac2c..38f9f94 100644
--- a/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart
@@ -86,7 +86,7 @@
   @literal
   const A(List list);
 }
-var a = A(new List());
+var a = A(new List.filled(1, ''));
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
index eb206cb..69fcfac 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
@@ -79,62 +79,62 @@
   test_constructor_named() async {
     await assertErrorsInCode(r'''
 class A {
-  int y;
-  A({x : y}) {}
+  int y = 0;
+  A({x: y}) {}
 }
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 28, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 31, 1),
     ]);
   }
 
   test_constructor_positional() async {
     await assertErrorsInCode(r'''
 class A {
-  int y;
+  int y = 0;
   A([x = y]) {}
 }
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 28, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 32, 1),
     ]);
   }
 
   test_function_named() async {
     await assertErrorsInCode(r'''
-int y;
-f({x : y}) {}
+int y = 0;
+f({x: y}) {}
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 14, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 17, 1),
     ]);
   }
 
   test_function_positional() async {
     await assertErrorsInCode(r'''
-int y;
+int y = 0;
 f([x = y]) {}
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 14, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 18, 1),
     ]);
   }
 
   test_method_named() async {
     await assertErrorsInCode(r'''
 class A {
-  int y;
-  m({x : y}) {}
+  int y = 0;
+  m({x: y}) {}
 }
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 28, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 31, 1),
     ]);
   }
 
   test_method_positional() async {
     await assertErrorsInCode(r'''
 class A {
-  int y;
+  int y = 0;
   m([x = y]) {}
 }
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 28, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 32, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
index 5e28579..dcb2294 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
@@ -106,10 +106,10 @@
 
   test_const_spread_final() async {
     await assertErrorsInCode(r'''
-final Set x = null;
+final Set x = {};
 var v = const {...x};
 ''', [
-      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 38, 1),
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 36, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart
index 2285127..75e2b4d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart
@@ -17,11 +17,11 @@
 class NonTypeAsTypeArgumentTest extends PubPackageResolutionTest {
   test_notAType() async {
     await assertErrorsInCode(r'''
-int A;
+int A = 0;
 class B<E> {}
 f(B<A> b) {}
 ''', [
-      error(CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT, 25, 1),
+      error(CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT, 29, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
index 9e21e5a..17c3039 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
@@ -42,7 +42,7 @@
 
   test_isTypeParameter() async {
     await assertErrorsInCode(r'''
-class A<T> {
+class A<T extends Object> {
   f() {
     try {
     } on T catch (e) {
@@ -50,7 +50,7 @@
   }
 }
 ''', [
-      error(HintCode.UNUSED_CATCH_CLAUSE, 49, 1),
+      error(HintCode.UNUSED_CATCH_CLAUSE, 64, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
index 619cfb8..2bae72c 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
@@ -20,17 +20,17 @@
 class A {
   int get a => 0;
   void set b(_) {}
-  int c;
+  int c = 0;
 }
 class B implements A {
   @override
   final int a = 1;
   @override
-  int b;
+  int b = 0;
   @override
-  int c;
+  int c = 0;
 }''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 130, 1),
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 134, 1),
     ]);
   }
 
@@ -39,17 +39,17 @@
 class A {
   int get a => 0;
   void set b(_) {}
-  int c;
+  int c = 0;
 }
 class B extends A {
   @override
   final int a = 1;
   @override
-  int b;
+  int b = 0;
   @override
-  int c;
+  int c = 0;
 }''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 127, 1),
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 131, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
index 0aecbd6..55ef355 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
@@ -23,7 +23,7 @@
     await assertErrorsInCode(r'''
 import 'lib.dart' as p;
 typedef p();
-p.A a;
+p.A a = p.A();
 ''', [
       error(CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, 32, 1),
     ]);
@@ -39,7 +39,7 @@
 p2() {}
 var p3;
 class p4 {}
-p.A a;
+p.A a = p.A();
 ''');
   }
 
@@ -51,7 +51,7 @@
     await assertErrorsInCode(r'''
 import 'lib.dart' as p;
 p() {}
-p.A a;
+p.A a = p.A();
 ''', [
       error(CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, 24, 1),
     ]);
@@ -65,7 +65,7 @@
     await assertErrorsInCode(r'''
 import 'lib.dart' as p;
 var p = null;
-p.A a;
+p.A a = p.A();
 ''', [
       error(CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, 28, 1),
     ]);
@@ -79,7 +79,7 @@
     await assertErrorsInCode(r'''
 import 'lib.dart' as p;
 class p {}
-p.A a;
+p.A a = p.A();
 ''', [
       error(CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, 30, 1),
     ]);
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart
index c7610f1c..46ef3c7 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart
@@ -18,11 +18,11 @@
   test_notAType() async {
     await assertErrorsInCode('''
 class B {
-  int A;
+  int A = 0;
   factory B() = A;
 }''', [
-      error(CompileTimeErrorCode.REDIRECT_TO_NON_CLASS, 35, 1),
-      error(CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY, 35, 1),
+      error(CompileTimeErrorCode.REDIRECT_TO_NON_CLASS, 39, 1),
+      error(CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY, 39, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart
index 55ee4b1..50175d9 100644
--- a/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart
@@ -28,10 +28,10 @@
   test_expressionFunctionBody() async {
     await assertErrorsInCode(r'''
 class A {
-  A() => null;
+  A() => A();
 }
 ''', [
-      error(CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR, 16, 8),
+      error(CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR, 16, 7),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart b/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart
index 238ed5a..2b0c310 100644
--- a/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart
@@ -29,7 +29,13 @@
     await assertNoErrorsInCode(r'''
 void f(dynamic x) {
   print(x as List);
-  print(x as List<dynamic>);
+}
+''');
+  }
+
+  test_asExpression_typeArgument() async {
+    await assertNoErrorsInCode(r'''
+void f(dynamic x) {
   print(x as List<List>);
 }
 ''');
@@ -41,8 +47,8 @@
 import 'package:meta/meta.dart';
 @optionalTypeArgs
 class C<T> {}
-C f(int a) => null;
-void g(C a) => print(a);
+C f(int a) => C();
+void g(C a) {}
 ''');
   }
 
@@ -139,7 +145,7 @@
 
   test_topLevelField_missingTypeArg() async {
     await assertErrorsInCode(r'''
-List a;
+List a = [];
 ''', [error(HintCode.STRICT_RAW_TYPE, 0, 4)]);
   }
 
@@ -149,15 +155,15 @@
 import 'package:meta/meta.dart';
 @optionalTypeArgs
 class C<T> {}
-C a;
-C get g => null;
+C a = C();
+C get g => C();
 void set s(C a) {}
 ''');
   }
 
   test_topLevelField_withTypeArg() async {
     await assertNoErrorsInCode(r'''
-List<int> a;
+List<int> a = [];
 List<num> get g => [];
 void set s(List<double> a) {}
 ''');
@@ -178,14 +184,14 @@
   test_typedef_classic_missingTypeArg() async {
     await assertErrorsInCode(r'''
 typedef T F1<T>(T _);
-F1 func;
+F1 func = (a) => a;
 ''', [error(HintCode.STRICT_RAW_TYPE, 22, 2)]);
   }
 
   test_typedef_modern_missingTypeArg() async {
     await assertErrorsInCode(r'''
 typedef F1<T> = T Function(T);
-F1 func;
+F1 func = (a) => a;
 ''', [error(HintCode.STRICT_RAW_TYPE, 31, 2)]);
   }
 
@@ -197,8 +203,8 @@
 typedef T F1<T>(T _);
 @optionalTypeArgs
 typedef F2<T> = T Function(T);
-F1 f1;
-F2 f2;
+F1 f1 = (a) => a;
+F2 f2 = (a) => a;
 ''');
   }
 
@@ -207,9 +213,9 @@
 typedef T F1<T>(T _);
 typedef F2<T> = T Function(T);
 typedef F3 = T Function<T>(T);
-F1<int> f1;
-F2<int> f2;
-F3 f3;
+F1<int> f1 = (a) => a;
+F2<int> f2 = (a) => a;
+F3 f3 = <T>(T a) => a;
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
index 3a326ae..67ab6d0 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
@@ -45,8 +45,9 @@
 class B extends A {
   factory B() {
     super.m();
-    return null;
+    return B._();
   }
+  B._();
 }
 ''', [
       error(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, 61, 5),
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
index 185c80f..8153be9 100644
--- a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
@@ -29,7 +29,7 @@
   test_field() async {
     await assertNoErrorsInCode('''
 class A {
-  int g;
+  int g = 0;
 }
 var b = new A().g;
 ''');
@@ -39,7 +39,7 @@
   test_field_call() async {
     await assertNoErrorsInCode('''
 class A {
-  int Function() g;
+  int Function() g = () => 0;
 }
 var a = new A();
 var b = a.g();
@@ -50,7 +50,7 @@
   test_field_imported() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class A {
-  int f;
+  int f = 0;
 }
 ''');
     await assertNoErrorsInCode('''
@@ -63,7 +63,7 @@
   test_field_prefixedIdentifier() async {
     await assertNoErrorsInCode('''
 class A {
-  int g;
+  int g = 0;
 }
 var a = new A();
 var b = a.g;
@@ -443,12 +443,12 @@
   int operator[](int value) => 0;
 }
 class B {
-  int y;
+  int y = 0;
 }
 var a = new A();
 var b = (a.x).y;
 ''', [
-      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 114, 1),
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 118, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
index 3f2504ee..a82563a 100644
--- a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
@@ -133,7 +133,8 @@
 library root;
 import 'lib1.dart' deferred as a;
 class C<E> {}
-C<a.A> c;''', [
+C<a.A> c = C();
+''', [
       error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 64, 3),
     ]);
   }
@@ -146,7 +147,8 @@
 library root;
 import 'lib1.dart' deferred as a;
 class C<E, F> {}
-C<a.A, a.A> c;''', [
+C<a.A, a.A> c = C();
+''', [
       error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 67, 3),
       error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 72, 3),
     ]);
@@ -171,7 +173,8 @@
     await assertErrorsInCode('''
 library root;
 import 'lib1.dart' deferred as a;
-a.A v;''', [
+a.A v = a.A();
+''', [
       error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
index dc4b69e..6551ffe 100644
--- a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
@@ -37,7 +37,7 @@
   test_getter_invokeTarget() async {
     await assertErrorsInCode(r'''
 class A {
-  static int foo;
+  static int foo = 1;
 }
 
 class B extends A {
@@ -46,7 +46,7 @@
   }
 }
 ''', [
-      error(_errorCode, 72, 3),
+      error(_errorCode, 76, 3),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
index e274e91..f50c2b8 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
@@ -139,7 +139,7 @@
   test_isUsed_reference_implicitThis() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
   main() {
     print(_f);
   }
@@ -151,7 +151,7 @@
   test_isUsed_reference_implicitThis_expressionFunctionBody() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
   m() => _f;
 }
 ''');
@@ -160,13 +160,13 @@
   test_isUsed_reference_implicitThis_subclass() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
   main() {
     print(_f);
   }
 }
 class B extends A {
-  int _f;
+  int _f = 0;
 }
 print(x) {}
 ''');
@@ -175,7 +175,7 @@
   test_isUsed_reference_qualified_propagatedElement() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
 }
 main() {
   var a = new A();
@@ -188,7 +188,7 @@
   test_isUsed_reference_qualified_staticElement() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
 }
 main() {
   A a = new A();
@@ -201,7 +201,7 @@
   test_isUsed_reference_qualified_unresolved() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
 }
 main(a) {
   print(a._f);
@@ -213,7 +213,7 @@
   test_notUsed_compoundAssign() async {
     await assertErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
   main() {
     _f += 2;
   }
@@ -281,7 +281,7 @@
   test_notUsed_noReference() async {
     await assertErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
 }
 ''', [
       error(HintCode.UNUSED_FIELD, 16, 2),
@@ -379,7 +379,7 @@
     await assertErrorsInCode(r'''
 /// [A._f] is great.
 class A {
-  int _f;
+  int _f = 0;
 }
 ''', [
       error(HintCode.UNUSED_FIELD, 37, 2),
@@ -389,12 +389,12 @@
   test_notUsed_simpleAssignment() async {
     await assertErrorsInCode(r'''
 class A {
-  int _f;
+  int _f = 0;
   m() {
     _f = 1;
   }
 }
-main(A a) {
+f(A a) {
   a._f = 2;
 }
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index 04fd740..db7bfb5 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -34,7 +34,7 @@
     await assertErrorsInCode(r'''
 import 'lib1.dart';
 import 'lib1.dart' as one;
-one.A a;
+one.A a = one.A();
 ''', [
       error(HintCode.UNUSED_IMPORT, 7, 11),
     ]);
@@ -50,8 +50,8 @@
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as one;
 import 'lib2.dart' as one;
-one.A a;
-one.B b;
+one.A a = one.A();
+one.B b = one.B();
 ''');
   }
 
@@ -68,8 +68,8 @@
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as one;
 import 'lib3.dart' as one;
-one.A a;
-one.B b;
+one.A a = one.A();
+one.B b = one.B();
 ''');
   }
 
@@ -83,7 +83,7 @@
     await assertErrorsInCode(r'''
 import 'lib1.dart' as one;
 import 'lib2.dart' as one;
-one.A a;
+one.A a = one.A();
 ''', [
       error(HintCode.UNUSED_IMPORT, 34, 11),
     ]);
@@ -125,20 +125,17 @@
 class One {}
 topLevelFunction() {}
 ''');
-    await assertErrorsInCode(r'''
+    await assertNoErrorsInCode(r'''
 import 'lib1.dart' hide topLevelFunction;
 import 'lib1.dart' as one show topLevelFunction;
 import 'lib1.dart' as two show topLevelFunction;
 class A {
-  static void x() {
-    One o;
+  static void x(One o) {
     one.topLevelFunction();
     two.topLevelFunction();
   }
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 178, 1),
-    ]);
+''');
   }
 
   test_core_library() async {
@@ -157,7 +154,7 @@
 ''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart';
-Two two;
+Two two = Two();
 ''');
   }
 
@@ -426,7 +423,7 @@
     await assertErrorsInCode(r'''
 import 'lib1.dart' show A;
 import 'lib1.dart' show B;
-A a;
+A a = A();
 ''', [
       error(HintCode.UNUSED_IMPORT, 34, 11),
     ]);
diff --git a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
index 58c7b44..d9b08b4 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
@@ -58,7 +58,7 @@
     await assertNoErrorsInCode(r'''
 typedef Foo();
 main() {
-  Foo foo;
+  Foo foo = () {};
   foo();
 }
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
index 81d5b2c..2f968cd 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
@@ -139,7 +139,7 @@
 ''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' show A, B;
-A a;
+A a = A();
 ''', [
       error(HintCode.UNUSED_SHOWN_NAME, 27, 1),
     ]);
@@ -163,7 +163,7 @@
 ''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' as p show A, B;
-p.A a;
+p.A a = p.A();
 ''', [
       error(HintCode.UNUSED_SHOWN_NAME, 32, 1),
     ]);
@@ -179,8 +179,8 @@
     await assertErrorsInCode(r'''
 import 'lib1.dart' show A, B;
 import 'lib1.dart' show C, D;
-A a;
-C c;
+A a = A();
+C c = C();
 ''', [
       error(HintCode.UNUSED_SHOWN_NAME, 27, 1),
       error(HintCode.UNUSED_SHOWN_NAME, 57, 1),
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
index 2faef5e..3eb42b9 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
@@ -18,7 +18,7 @@
   test_class_tooFew() async {
     await assertErrorsInCode(r'''
 class A<E, F> {}
-A<A> a = null;
+A<A> a;
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 17, 4),
     ]);
@@ -27,7 +27,7 @@
   test_class_tooMany() async {
     await assertErrorsInCode(r'''
 class A<E> {}
-A<A, A> a = null;
+A<A, A> a;
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 14, 7),
     ]);
@@ -134,11 +134,11 @@
 class A<K, V> {
   K element;
 }
-main(A<int> a) {
+f(A<int> a) {
   a.element.anyGetterExistsInDynamic;
 }
 ''', [
-      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 36, 6),
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 33, 6),
     ]);
   }
 
@@ -147,11 +147,11 @@
 class A<E> {
   E element;
 }
-main(A<int,int> a) {
+f(A<int, int> a) {
   a.element.anyGetterExistsInDynamic;
 }
 ''', [
-      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 33, 10),
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 30, 11),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
index f89e480..2062598 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
@@ -10,7 +10,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(YieldOfInvalidTypeTest);
-    defineReflectiveTests(YieldOfInvalidTypeTest2);
+    defineReflectiveTests(YieldOfInvalidTypeWithNullSafetyTest);
   });
 }
 
@@ -410,5 +410,5 @@
 }
 
 @reflectiveTest
-class YieldOfInvalidTypeTest2 extends YieldOfInvalidTypeTest
+class YieldOfInvalidTypeWithNullSafetyTest extends YieldOfInvalidTypeTest
     with WithNullSafetyMixin {}
diff --git a/tools/VERSION b/tools/VERSION
index 44d5aa6..34da45f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 11
+PRERELEASE 12
 PRERELEASE_PATCH 0
\ No newline at end of file
