diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index 5e403c2..fc403b3 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -46,20 +46,35 @@
   /// Private classes that can be extended outside of this library.
   ///
   /// Normally private classes cannot be accessed outside this library, however,
-  /// this can happen if they are extended by a public class, for example:
+  /// this can happen if they are extended by a public class or exposed by a
+  /// public typedef, for example:
   ///
   ///     class _A { int x = 42; }
   ///     class _B { int x = 42; }
+  ///     class _C { int x = 42; }
   ///
-  ///     // _A is now effectively public for the purpose of overrides.
-  ///     class C extends _A {}
+  ///     // _A and _B are now effectively public for the purpose of overrides.
+  ///     class D extends _A {}
+  ///     typedef E = _B;
   ///
-  /// The class _A must treat is "x" as virtual, however _B does not.
+  /// The classes _A and _B must treat is "x" as virtual, however _C does not.
   final _extensiblePrivateClasses = HashSet<Class>();
 
   _LibraryVirtualFieldModel.build(Library library) {
     var allClasses = library.classes;
 
+    for (var typedef in library.typedefs) {
+      // Ignore private typedefs.
+      if (typedef.name.startsWith('_')) continue;
+
+      var type = typedef.type;
+      if (type is InterfaceType && type.classNode.name.startsWith('_')) {
+        // Public typedefs of private classes expose those classes for
+        // extension.
+        _extensiblePrivateClasses.add(type.classNode);
+      }
+    }
+
     // The set of public types is our initial extensible type set.
     // From there, visit all immediate private types in this library, and so on
     // from those private types, marking them as extensible.
diff --git a/tests/language/why_not_promoted/argument_type_not_assignable_nullability_error_test.dart b/tests/language/why_not_promoted/argument_type_not_assignable_nullability_error_test.dart
index cfde735..c4f6955 100644
--- a/tests/language/why_not_promoted/argument_type_not_assignable_nullability_error_test.dart
+++ b/tests/language/why_not_promoted/argument_type_not_assignable_nullability_error_test.dart
@@ -8,8 +8,9 @@
 
 class C1 {
   int? bad;
-  //   ^
-  // [context 1] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 29] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 47] 'bad' refers to a property so it couldn't be promoted.
   f(int i) {}
 }
 
@@ -17,15 +18,16 @@
   if (c.bad == null) return;
   c.f(c.bad);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 29] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //    ^
-  // [cfe 1] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 47] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C2 {
   int? bad;
-  //   ^
-  // [context 2] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 38] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 48] 'bad' refers to a property so it couldn't be promoted.
   f([int i = 0]) {}
 }
 
@@ -33,15 +35,16 @@
   if (c.bad == null) return;
   c.f(c.bad);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 38] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //    ^
-  // [cfe 2] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 48] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C3 {
   int? bad;
-  //   ^
-  // [context 3] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 6] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 49] 'bad' refers to a property so it couldn't be promoted.
   f({required int i}) {}
 }
 
@@ -49,15 +52,16 @@
   if (c.bad == null) return;
   c.f(i: c.bad);
   //  ^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 6] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
-  // [cfe 3] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 49] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C4 {
   int? bad;
-  //   ^
-  // [context 4] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 16] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 50] 'bad' refers to a property so it couldn't be promoted.
   f({int i = 0}) {}
 }
 
@@ -65,15 +69,16 @@
   if (c.bad == null) return;
   c.f(i: c.bad);
   //  ^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 16] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
-  // [cfe 4] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 50] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C5 {
   List<int>? bad;
-  //         ^
-  // [context 5] 'bad' refers to a property so it couldn't be promoted.
+  //         ^^^
+  // [context 33] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 51] 'bad' refers to a property so it couldn't be promoted.
   f<T>(List<T> x) {}
 }
 
@@ -81,15 +86,16 @@
   if (c.bad == null) return;
   c.f(c.bad);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 33] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //    ^
-  // [cfe 5] The argument type 'List<int>?' can't be assigned to the parameter type 'List<int>' because 'List<int>?' is nullable and 'List<int>' isn't.
+  // [cfe 51] The argument type 'List<int>?' can't be assigned to the parameter type 'List<int>' because 'List<int>?' is nullable and 'List<int>' isn't.
 }
 
 class C6 {
   int? bad;
-  //   ^
-  // [context 6] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 21] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 52] 'bad' refers to a property so it couldn't be promoted.
   C6(int i);
 }
 
@@ -97,15 +103,16 @@
   if (c.bad == null) return null;
   return C6(c.bad);
   //        ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 21] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //          ^
-  // [cfe 6] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 52] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C7 {
   int? bad;
-  //   ^
-  // [context 7] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 42] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 53] 'bad' refers to a property so it couldn't be promoted.
   C7(int i);
 }
 
@@ -113,24 +120,25 @@
   if (c.bad == null) return null;
   return new C7(c.bad);
   //            ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 42] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //              ^
-  // [cfe 7] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 53] The argument type 'int?' can't be assigned to the parameter type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C8 {
   int? bad;
-  //   ^
-  // [context 8] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 13] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 54] 'bad' refers to a property so it couldn't be promoted.
 }
 
 userDefinableBinaryOpRhs(C8 c) {
   if (c.bad == null) return;
   1 + c.bad;
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 13] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //    ^
-  // [cfe 8] A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  // [cfe 54] A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
 }
 
 class C9 {
@@ -171,9 +179,11 @@
 
 class C11 {
   bool? bad;
-  //    ^
-  // [context 9] 'bad' refers to a property so it couldn't be promoted.
-  // [context 10] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 30] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 46] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 55] 'bad' refers to a property so it couldn't be promoted.
+  // [context 56] 'bad' refers to a property so it couldn't be promoted.
   f(bool b) {}
 }
 
@@ -181,21 +191,23 @@
   if (c.bad == null) return;
   c.f(c.bad && b);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 46] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //    ^
-  // [cfe 9] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 55] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   c.f(b && c.bad);
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 30] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //         ^
-  // [cfe 10] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 56] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C12 {
   bool? bad;
-  //    ^
-  // [context 11] 'bad' refers to a property so it couldn't be promoted.
-  // [context 12] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 27] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 36] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 57] 'bad' refers to a property so it couldn't be promoted.
+  // [context 58] 'bad' refers to a property so it couldn't be promoted.
   f(bool b) {}
 }
 
@@ -203,48 +215,51 @@
   if (c.bad == null) return;
   c.f(c.bad || b);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 27] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //    ^
-  // [cfe 11] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 57] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   c.f(b || c.bad);
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 36] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //         ^
-  // [cfe 12] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 58] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C13 {
   bool? bad;
-  //    ^
-  // [context 13] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 40] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 59] 'bad' refers to a property so it couldn't be promoted.
 }
 
 assertStatementCondition(C13 c) {
   if (c.bad == null) return;
   assert(c.bad);
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 40] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //       ^
-  // [cfe 13] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 59] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C14 {
   bool? bad;
-  //    ^
-  // [context 14] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 1] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 60] 'bad' refers to a property so it couldn't be promoted.
   C14.assertInitializerCondition(C14 c)
       : bad = c.bad!,
         assert(c.bad);
         //     ^^^^^
-        // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+        // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
         //       ^
-        // [cfe 14] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+        // [cfe 60] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C15 {
   bool? bad;
-  //    ^
-  // [context 15] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 28] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 61] 'bad' refers to a property so it couldn't be promoted.
   f(bool b) {}
 }
 
@@ -252,48 +267,53 @@
   if (c.bad == null) return;
   c.f(!c.bad);
   //   ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 28] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //     ^
-  // [cfe 15] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 61] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C16 {
   bool? bad;
-  //    ^
-  // [context 16] 'bad' refers to a property so it couldn't be promoted.
-  // [context 17] 'bad' refers to a property so it couldn't be promoted.
-  // [context 18] 'bad' refers to a property so it couldn't be promoted.
-  // [context 19] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 22] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 24] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 25] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 32] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 62] 'bad' refers to a property so it couldn't be promoted.
+  // [context 63] 'bad' refers to a property so it couldn't be promoted.
+  // [context 64] 'bad' refers to a property so it couldn't be promoted.
+  // [context 65] 'bad' refers to a property so it couldn't be promoted.
 }
 
 forLoopCondition(C16 c) {
   if (c.bad == null) return;
   for (; c.bad;) {}
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 32] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //       ^
-  // [cfe 16] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 62] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   [for (; c.bad;) null];
   //      ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 25] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //        ^
-  // [cfe 17] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 63] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   ({for (; c.bad;) null});
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 22] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //         ^
-  // [cfe 18] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 64] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   ({for (; c.bad;) null: null});
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 24] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //         ^
-  // [cfe 19] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 65] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C17 {
   bool? bad;
-  //    ^
-  // [context 20] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 10] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 66] 'bad' refers to a property so it couldn't be promoted.
   f(int i) {}
 }
 
@@ -301,189 +321,207 @@
   if (c.bad == null) return;
   c.f(c.bad ? 1 : 2);
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 10] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //    ^
-  // [cfe 20] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 66] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C18 {
   bool? bad;
-  //    ^
-  // [context 21] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 26] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 67] 'bad' refers to a property so it couldn't be promoted.
 }
 
 doLoopCondition(C18 c) {
   if (c.bad == null) return;
   do {} while (c.bad);
   //           ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 26] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //             ^
-  // [cfe 21] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 67] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C19 {
   bool? bad;
-  //    ^
-  // [context 22] 'bad' refers to a property so it couldn't be promoted.
-  // [context 23] 'bad' refers to a property so it couldn't be promoted.
-  // [context 24] 'bad' refers to a property so it couldn't be promoted.
-  // [context 25] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 5] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 9] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 12] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 39] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 68] 'bad' refers to a property so it couldn't be promoted.
+  // [context 69] 'bad' refers to a property so it couldn't be promoted.
+  // [context 70] 'bad' refers to a property so it couldn't be promoted.
+  // [context 71] 'bad' refers to a property so it couldn't be promoted.
 }
 
 ifCondition(C19 c) {
   if (c.bad == null) return;
   if (c.bad) {}
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //    ^
-  // [cfe 22] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 68] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   [if (c.bad) null];
   //   ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 12] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //     ^
-  // [cfe 23] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 69] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   ({if (c.bad) null});
   //    ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 9] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //      ^
-  // [cfe 24] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 70] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
   ({if (c.bad) null: null});
   //    ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 39] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //      ^
-  // [cfe 25] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 71] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C20 {
   bool? bad;
-  //    ^
-  // [context 26] 'bad' refers to a property so it couldn't be promoted.
+  //    ^^^
+  // [context 3] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 72] 'bad' refers to a property so it couldn't be promoted.
 }
 
 whileCondition(C20 c) {
   if (c.bad == null) return;
   while (c.bad) {}
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //       ^
-  // [cfe 26] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
+  // [cfe 72] A value of type 'bool?' can't be assigned to a variable of type 'bool' because 'bool?' is nullable and 'bool' isn't.
 }
 
 class C21 {
   int? bad;
-  //   ^
-  // [context 27] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 17] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 73] 'bad' refers to a property so it couldn't be promoted.
 }
 
 assignmentRhs(C21 c, int i) {
   if (c.bad == null) return;
   i = c.bad;
   //  ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 17] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //    ^
-  // [cfe 27] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 73] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C22 {
   int? bad;
-  //   ^
-  // [context 28] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 18] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 74] 'bad' refers to a property so it couldn't be promoted.
 }
 
 variableInitializer(C22 c) {
   if (c.bad == null) return;
   int i = c.bad;
   //      ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 18] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //        ^
-  // [cfe 28] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 74] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C23 {
   int? bad;
-  //   ^
-  // [context 29] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 20] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 75] 'bad' refers to a property so it couldn't be promoted.
   final int x;
   final int y;
   C23.constructorInitializer(C23 c)
       : x = c.bad!,
         y = c.bad;
         //  ^^^^^
-        // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
+        // [analyzer 20] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
         //    ^
-        // [cfe 29] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+        // [cfe 75] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C24 {
   int? bad;
-  //   ^
-  // [context 30] 'bad' refers to a property so it couldn't be promoted.
-  // [context 31] 'bad' refers to a property so it couldn't be promoted.
-  // [context 32] 'bad' refers to a property so it couldn't be promoted.
-  // [context 33] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 14] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 41] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 43] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 44] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 76] 'bad' refers to a property so it couldn't be promoted.
+  // [context 77] 'bad' refers to a property so it couldn't be promoted.
+  // [context 78] 'bad' refers to a property so it couldn't be promoted.
+  // [context 79] 'bad' refers to a property so it couldn't be promoted.
 }
 
 forVariableInitializer(C24 c) {
   if (c.bad == null) return;
   for (int i = c.bad; false;) {}
   //           ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 44] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //             ^
-  // [cfe 30] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 76] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   [for (int i = c.bad; false;) null];
   //            ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 43] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //              ^
-  // [cfe 31] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 77] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   ({for (int i = c.bad; false;) null});
   //             ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 41] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //               ^
-  // [cfe 32] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 78] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   ({for (int i = c.bad; false;) null: null});
   //             ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 14] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //               ^
-  // [cfe 33] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 79] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C25 {
   int? bad;
-  //   ^
-  // [context 34] 'bad' refers to a property so it couldn't be promoted.
-  // [context 35] 'bad' refers to a property so it couldn't be promoted.
-  // [context 36] 'bad' refers to a property so it couldn't be promoted.
-  // [context 37] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 2] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 8] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 11] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 80] 'bad' refers to a property so it couldn't be promoted.
+  // [context 81] 'bad' refers to a property so it couldn't be promoted.
+  // [context 82] 'bad' refers to a property so it couldn't be promoted.
+  // [context 83] 'bad' refers to a property so it couldn't be promoted.
 }
 
 forAssignmentInitializer(C25 c, int i) {
   if (c.bad == null) return;
   for (i = c.bad; false;) {}
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 2] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //         ^
-  // [cfe 34] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 80] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   [for (i = c.bad; false;) null];
   //        ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 4] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //          ^
-  // [cfe 35] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 81] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   ({for (i = c.bad; false;) null});
   //         ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 11] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //           ^
-  // [cfe 36] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 82] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   ({for (i = c.bad; false;) null: null});
   //         ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  // [analyzer 8] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   //           ^
-  // [cfe 37] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 83] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C26 {
   int? bad;
-  //   ^
-  // [context 38] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 45] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 84] 'bad' refers to a property so it couldn't be promoted.
 }
 
 compoundAssignmentRhs(C26 c) {
@@ -491,43 +529,47 @@
   if (c.bad == null) return;
   n += c.bad;
   //   ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 45] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //     ^
-  // [cfe 38] A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  // [cfe 84] A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
 }
 
 class C27 {
   int? bad;
-  //   ^
-  // [context 39] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 7] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 85] 'bad' refers to a property so it couldn't be promoted.
 }
 
 indexGet(C27 c, List<int> values) {
   if (c.bad == null) return;
   values[c.bad];
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 7] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
-  // [cfe 39] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 85] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C28 {
   int? bad;
-  //   ^
-  // [context 40] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 23] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 86] 'bad' refers to a property so it couldn't be promoted.
 }
 
 indexSet(C28 c, List<int> values) {
   if (c.bad == null) return;
   values[c.bad] = 0;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 23] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
-  // [cfe 40] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  // [cfe 86] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C29 {
   int? bad;
+  //   ^^^
+  // [context 19] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
 }
 
 indexSetCompound(C29 c, List<int> values) {
@@ -535,13 +577,15 @@
   if (c.bad == null) return;
   values[c.bad] += 1;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 19] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C30 {
   int? bad;
+  //   ^^^
+  // [context 37] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
 }
 
 indexSetIfNull(C30 c, List<int?> values) {
@@ -549,13 +593,16 @@
   if (c.bad == null) return;
   values[c.bad] ??= 1;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 37] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C31 {
   int? bad;
+  //   ^^^
+  // [context 31] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 35] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
 }
 
 indexSetPreIncDec(C31 c, List<int> values) {
@@ -563,18 +610,21 @@
   if (c.bad == null) return;
   ++values[c.bad];
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 31] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //         ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   --values[c.bad];
   //       ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 35] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //         ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
 
 class C32 {
   int? bad;
+  //   ^^^
+  // [context 15] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 34] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
 }
 
 indexSetPostIncDec(C32 c, List<int> values) {
@@ -582,12 +632,12 @@
   if (c.bad == null) return;
   values[c.bad]++;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 34] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   values[c.bad]--;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [analyzer 15] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
   //       ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
 }
diff --git a/tests/language/why_not_promoted/assignment_error_test.dart b/tests/language/why_not_promoted/assignment_error_test.dart
index 13c21ae..9c1c3a4 100644
--- a/tests/language/why_not_promoted/assignment_error_test.dart
+++ b/tests/language/why_not_promoted/assignment_error_test.dart
@@ -10,61 +10,62 @@
 direct_assignment(int? i, int? j) {
   if (i == null) return;
   i = j;
-//^
-// [context 1] Variable 'i' could not be promoted due to an assignment.
+//^^^^^
+// [context 6] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+// [context 10] Variable 'i' could not be promoted due to an assignment.
   i.isEven;
 //  ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //^
-  // [cfe 1] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 compound_assignment(C? c, int i) {
   if (c == null) return;
   c += i;
-//^
-// [context 2] Variable 'c' could not be promoted due to an assignment.
+//^^^^^^
+// [context 7] Variable 'c' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+// [context 11] Variable 'c' could not be promoted due to an assignment.
   c.cProperty;
 //  ^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //^
-  // [cfe 2] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
+// [analyzer 7] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 11] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
 }
 
 via_postfix_op(C? c) {
   if (c == null) return;
   c++;
-//^
-// [context 3] Variable 'c' could not be promoted due to an assignment.
+//^^^
+// [context 4] Variable 'c' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+// [context 12] Variable 'c' could not be promoted due to an assignment.
   c.cProperty;
 //  ^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //^
-  // [cfe 3] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 12] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
 }
 
 via_prefix_op(C? c) {
   if (c == null) return;
   ++c;
+//^^^
+// [context 9] Variable 'c' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
   //^
-  // [context 4] Variable 'c' could not be promoted due to an assignment.
+  // [context 13] Variable 'c' could not be promoted due to an assignment.
   c.cProperty;
 //  ^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //^
-  // [cfe 4] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
+// [analyzer 9] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 13] Property 'cProperty' cannot be accessed on 'C?' because it is potentially null.
 }
 
 via_for_each_statement(int? i, List<int?> list) {
   if (i == null) return;
   for (i in list) {
   //   ^
-  // [context 5] Variable 'i' could not be promoted due to an assignment.
+  // [context 3] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+  // [context 14] Variable 'i' could not be promoted due to an assignment.
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-    //^
-    // [cfe 5] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 14] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -72,42 +73,42 @@
   if (i == null) return;
   [for (i in list) i.isEven];
   //    ^
-  // [context 6] Variable 'i' could not be promoted due to an assignment.
+  // [context 8] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+  // [context 15] Variable 'i' could not be promoted due to an assignment.
   //                 ^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //                 ^
-  // [cfe 6] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+  // [analyzer 8] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [cfe 15] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 via_for_each_set_element(int? i, List<int?> list) {
   if (i == null) return;
   ({for (i in list) i.isEven});
   //     ^
-  // [context 7] Variable 'i' could not be promoted due to an assignment.
+  // [context 1] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+  // [context 16] Variable 'i' could not be promoted due to an assignment.
   //                  ^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //                  ^
-  // [cfe 7] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+  // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [cfe 16] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 via_for_each_map_key(int? i, List<int?> list) {
   if (i == null) return;
   ({for (i in list) i.isEven: null});
   //     ^
-  // [context 8] Variable 'i' could not be promoted due to an assignment.
+  // [context 2] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+  // [context 17] Variable 'i' could not be promoted due to an assignment.
   //                  ^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //                  ^
-  // [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+  // [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [cfe 17] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 via_for_each_map_value(int? i, List<int?> list) {
   if (i == null) return;
   ({for (i in list) null: i.isEven});
   //     ^
-  // [context 9] Variable 'i' could not be promoted due to an assignment.
+  // [context 5] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+  // [context 18] Variable 'i' could not be promoted due to an assignment.
   //                        ^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-  //                        ^
-  // [cfe 9] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+  // [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [cfe 18] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
diff --git a/tests/language/why_not_promoted/extension_property_error_test.dart b/tests/language/why_not_promoted/extension_property_error_test.dart
index 7412c73..d7de5cc 100644
--- a/tests/language/why_not_promoted/extension_property_error_test.dart
+++ b/tests/language/why_not_promoted/extension_property_error_test.dart
@@ -7,38 +7,40 @@
     if (this.i == null) return;
     this.i.isEven;
 //         ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//         ^
-// [cfe 1] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 6] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_property_via_explicit_this_parenthesized() {
     if ((this).i == null) return;
     (this).i.isEven;
 //           ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//           ^
-// [cfe 2] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 7] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_property_by_implicit_this() {
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 3] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
 extension E on C {
   int? get i => null;
   //       ^
-  // [context 1] 'i' refers to a property so it couldn't be promoted.
-  // [context 2] 'i' refers to a property so it couldn't be promoted.
-  // [context 3] 'i' refers to a property so it couldn't be promoted.
-  // [context 4] 'i' refers to a property so it couldn't be promoted.
-  // [context 5] 'i' refers to a property so it couldn't be promoted.
+  // [context 1] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 2] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 6] 'i' refers to a property so it couldn't be promoted.
+  // [context 7] 'i' refers to a property so it couldn't be promoted.
+  // [context 8] 'i' refers to a property so it couldn't be promoted.
+  // [context 9] 'i' refers to a property so it couldn't be promoted.
+  // [context 10] 'i' refers to a property so it couldn't be promoted.
   int? get j => null;
 }
 
@@ -47,9 +49,8 @@
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 4] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 9] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -57,9 +58,8 @@
   if (c.i == null) return;
   c.i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 5] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 get_property_via_prefixed_identifier_mismatched_target(C c1, C c2) {
@@ -69,7 +69,6 @@
   c2.i.isEven;
 //     ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//     ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
@@ -80,6 +79,5 @@
   c.j.isEven;
 //    ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
diff --git a/tests/language/why_not_promoted/field_error_test.dart b/tests/language/why_not_promoted/field_error_test.dart
index 8193578..d010924 100644
--- a/tests/language/why_not_promoted/field_error_test.dart
+++ b/tests/language/why_not_promoted/field_error_test.dart
@@ -5,39 +5,42 @@
 class C {
   int? i;
   //   ^
-  // [context 1] 'i' refers to a property so it couldn't be promoted.
-  // [context 2] 'i' refers to a property so it couldn't be promoted.
-  // [context 3] 'i' refers to a property so it couldn't be promoted.
-  // [context 4] 'i' refers to a property so it couldn't be promoted.
-  // [context 5] 'i' refers to a property so it couldn't be promoted.
-  // [context 6] 'i' refers to a property so it couldn't be promoted.
+  // [context 1] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 2] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 6] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 7] 'i' refers to a property so it couldn't be promoted.
+  // [context 8] 'i' refers to a property so it couldn't be promoted.
+  // [context 9] 'i' refers to a property so it couldn't be promoted.
+  // [context 10] 'i' refers to a property so it couldn't be promoted.
+  // [context 11] 'i' refers to a property so it couldn't be promoted.
+  // [context 12] 'i' refers to a property so it couldn't be promoted.
   int? j;
 
   get_field_via_explicit_this() {
     if (this.i == null) return;
     this.i.isEven;
 //         ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//         ^
-// [cfe 1] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 7] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_field_via_explicit_this_parenthesized() {
     if ((this).i == null) return;
     (this).i.isEven;
 //           ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//           ^
-// [cfe 2] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_field_by_implicit_this() {
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 3] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 9] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -46,18 +49,16 @@
     if (super.i == null) return;
     super.i.isEven;
 //          ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//          ^
-// [cfe 4] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_field_by_implicit_super() {
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 5] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 11] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -65,9 +66,8 @@
   if (c.i == null) return;
   c.i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 6] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 12] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 get_field_via_prefixed_identifier_mismatched_target(C c1, C c2) {
@@ -77,7 +77,6 @@
   c2.i.isEven;
 //     ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//     ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
@@ -88,6 +87,5 @@
   c.j.isEven;
 //    ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
diff --git a/tests/language/why_not_promoted/for_in_loop_type_not_iterable_nullability_error_test.dart b/tests/language/why_not_promoted/for_in_loop_type_not_iterable_nullability_error_test.dart
index 225e86b..ecf7b84 100644
--- a/tests/language/why_not_promoted/for_in_loop_type_not_iterable_nullability_error_test.dart
+++ b/tests/language/why_not_promoted/for_in_loop_type_not_iterable_nullability_error_test.dart
@@ -9,85 +9,93 @@
 
 class C1 {
   List<int>? bad;
-  //         ^
-  // [context 1] 'bad' refers to a property so it couldn't be promoted.
-  // [context 2] 'bad' refers to a property so it couldn't be promoted.
-  // [context 3] 'bad' refers to a property so it couldn't be promoted.
-  // [context 4] 'bad' refers to a property so it couldn't be promoted.
-  // [context 5] 'bad' refers to a property so it couldn't be promoted.
-  // [context 6] 'bad' refers to a property so it couldn't be promoted.
-  // [context 7] 'bad' refers to a property so it couldn't be promoted.
-  // [context 8] 'bad' refers to a property so it couldn't be promoted.
+  //         ^^^
+  // [context 1] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 2] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 6] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 7] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 8] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 9] 'bad' refers to a property so it couldn't be promoted.
+  // [context 10] 'bad' refers to a property so it couldn't be promoted.
+  // [context 11] 'bad' refers to a property so it couldn't be promoted.
+  // [context 12] 'bad' refers to a property so it couldn't be promoted.
+  // [context 13] 'bad' refers to a property so it couldn't be promoted.
+  // [context 14] 'bad' refers to a property so it couldn't be promoted.
+  // [context 15] 'bad' refers to a property so it couldn't be promoted.
+  // [context 16] 'bad' refers to a property so it couldn't be promoted.
 }
 
 forStatement(C1 c) {
   if (c.bad == null) return;
   for (var x in c.bad) {}
   //            ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //              ^
-  // [cfe 1] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 9] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInList(C1 c) {
   if (c.bad == null) return;
   [for (var x in c.bad) null];
   //             ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 7] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //               ^
-  // [cfe 2] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 10] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInSet(C1 c) {
   if (c.bad == null) return;
   <dynamic>{for (var x in c.bad) null};
   //                      ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                        ^
-  // [cfe 3] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 11] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInMap(C1 c) {
   if (c.bad == null) return;
   <dynamic, dynamic>{for (var x in c.bad) null: null};
   //                               ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                                 ^
-  // [cfe 4] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 12] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInAmbiguousSet_resolvableDuringParsing(C1 c) {
   if (c.bad == null) return;
   ({for (var x in c.bad) null});
   //              ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                ^
-  // [cfe 5] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 13] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInAmbiguousMap_resolvableDuringParsing(C1 c) {
   if (c.bad == null) return;
   ({for (var x in c.bad) null: null});
   //              ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                ^
-  // [cfe 6] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 14] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInAmbiguousSet_notResolvableDuringParsing(C1 c, List list) {
   if (c.bad == null) return;
   ({for (var x in c.bad) ...list});
   //              ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                ^
-  // [cfe 7] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 15] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
 
 forElementInAmbiguousMap_notResolvableDuringParsing(C1 c, Map map) {
   if (c.bad == null) return;
   ({for (var x in c.bad) ...map});
   //              ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 8] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                ^
-  // [cfe 8] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 16] The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
diff --git a/tests/language/why_not_promoted/invalid_assignment_error_nullability_error_test.dart b/tests/language/why_not_promoted/invalid_assignment_error_nullability_error_test.dart
index 78da0e8..67f6c40 100644
--- a/tests/language/why_not_promoted/invalid_assignment_error_nullability_error_test.dart
+++ b/tests/language/why_not_promoted/invalid_assignment_error_nullability_error_test.dart
@@ -9,16 +9,17 @@
 
 class C1 {
   List<int>? bad;
-  //         ^
-  // [context 1] 'bad' refers to a property so it couldn't be promoted.
+  //         ^^^
+  // [context 1] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 2] 'bad' refers to a property so it couldn't be promoted.
 }
 
 test(C1 c) sync* {
   if (c.bad == null) return;
   yield* c.bad;
   //     ^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   // [analyzer] COMPILE_TIME_ERROR.YIELD_OF_INVALID_TYPE
   //       ^
-  // [cfe 1] A value of type 'List<int>?' can't be assigned to a variable of type 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  // [cfe 2] A value of type 'List<int>?' can't be assigned to a variable of type 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
 }
diff --git a/tests/language/why_not_promoted/nullable_expression_call_error_test.dart b/tests/language/why_not_promoted/nullable_expression_call_error_test.dart
index c12b0e5..e1f286a 100644
--- a/tests/language/why_not_promoted/nullable_expression_call_error_test.dart
+++ b/tests/language/why_not_promoted/nullable_expression_call_error_test.dart
@@ -8,8 +8,9 @@
 
 class C1 {
   C2? bad;
-  //  ^
-  // [context 1] 'bad' refers to a property so it couldn't be promoted.
+  //  ^^^
+  // [context 3] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 7] 'bad' refers to a property so it couldn't be promoted.
 }
 
 class C2 {
@@ -20,16 +21,17 @@
   if (c.bad == null) return;
   c.bad();
 //^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
 //     ^
-// [cfe 1] Can't use an expression of type 'C2?' as a function because it's potentially null.
+// [cfe 7] Can't use an expression of type 'C2?' as a function because it's potentially null.
 }
 
 class C3 {
   C4? ok;
   C5? bad;
-  //  ^
-  // [context 2] 'bad' refers to a property so it couldn't be promoted.
+  //  ^^^
+  // [context 1] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 8] 'bad' refers to a property so it couldn't be promoted.
 }
 
 class C4 {}
@@ -50,15 +52,16 @@
   if (c.bad == null) return;
   c.bad();
 //^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
 //     ^
-// [cfe 2] Can't use an expression of type 'C5?' as a function because it's potentially null.
+// [cfe 8] Can't use an expression of type 'C5?' as a function because it's potentially null.
 }
 
 class C6 {
   C7? bad;
-  //  ^
-  // [context 3] 'bad' refers to a property so it couldn't be promoted.
+  //  ^^^
+  // [context 6] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 9] 'bad' refers to a property so it couldn't be promoted.
 }
 
 class C7 {
@@ -70,16 +73,17 @@
   c.bad();
 //^^^^^
 // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION_EXPRESSION
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
 //     ^
-// [cfe 3] Can't use an expression of type 'C7?' as a function because it's potentially null.
+// [cfe 9] Can't use an expression of type 'C7?' as a function because it's potentially null.
 }
 
 class C8 {
   C9? ok;
   C10? bad;
-  //   ^
-  // [context 4] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 4] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 10] 'bad' refers to a property so it couldn't be promoted.
 }
 
 class C9 {}
@@ -104,30 +108,32 @@
   if (c.bad == null) return;
   c.bad();
 //^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
 //     ^
-// [cfe 4] Can't use an expression of type 'C10?' as a function because it's potentially null.
+// [cfe 10] Can't use an expression of type 'C10?' as a function because it's potentially null.
 }
 
 class C11 {
   void Function()? bad;
-  //               ^
-  // [context 5] 'bad' refers to a property so it couldn't be promoted.
+  //               ^^^
+  // [context 5] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 11] 'bad' refers to a property so it couldn't be promoted.
 }
 
 function_invocation(C11 c) {
   if (c.bad == null) return;
   c.bad();
 //^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
 //     ^
-// [cfe 5] Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// [cfe 11] Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 }
 
 class C12 {
   C13? bad;
-  //   ^
-  // [context 6] 'bad' refers to a property so it couldn't be promoted.
+  //   ^^^
+  // [context 2] 'bad' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 12] 'bad' refers to a property so it couldn't be promoted.
 }
 
 class C13 {
@@ -141,7 +147,6 @@
   // https://github.com/dart-lang/sdk/issues/45552
   c.bad.foo();
 //      ^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//      ^
-// [cfe 6] Can't use an expression of type 'C13?' as a function because it's potentially null.
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 12] Can't use an expression of type 'C13?' as a function because it's potentially null.
 }
diff --git a/tests/language/why_not_promoted/nullable_method_call_error_test.dart b/tests/language/why_not_promoted/nullable_method_call_error_test.dart
index be1bba1..56d5e93 100644
--- a/tests/language/why_not_promoted/nullable_method_call_error_test.dart
+++ b/tests/language/why_not_promoted/nullable_method_call_error_test.dart
@@ -9,13 +9,18 @@
 class C {
   int? i;
   //   ^
-  // [context 3] 'i' refers to a property so it couldn't be promoted.
-  // [context 4] 'i' refers to a property so it couldn't be promoted.
-  // [context 5] 'i' refers to a property so it couldn't be promoted.
-  // [context 6] 'i' refers to a property so it couldn't be promoted.
+  // [context 2] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 10] 'i' refers to a property so it couldn't be promoted.
+  // [context 11] 'i' refers to a property so it couldn't be promoted.
+  // [context 12] 'i' refers to a property so it couldn't be promoted.
+  // [context 13] 'i' refers to a property so it couldn't be promoted.
   void Function()? f;
   //               ^
-  // [context 7] 'f' refers to a property so it couldn't be promoted.
+  // [context 7] 'f' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 14] 'f' refers to a property so it couldn't be promoted.
 }
 
 extension on int {
@@ -31,35 +36,34 @@
 property_get_of_variable(int? i, int? j) {
   if (i == null) return;
   i = j;
-//^
-// [context 1] Variable 'i' could not be promoted due to an assignment.
+//^^^^^
+// [context 6] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+// [context 8] Variable 'i' could not be promoted due to an assignment.
   i.isEven;
 //  ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//  ^
-// [cfe 1] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 extension_property_get_of_variable(int? i, int? j) {
   if (i == null) return;
   i = j;
-//^
-// [context 2] Variable 'i' could not be promoted due to an assignment.
+//^^^^^
+// [context 1] Variable 'i' could not be promoted due to an assignment.  See http://dart.dev/go/non-promo-write
+// [context 9] Variable 'i' could not be promoted due to an assignment.
   i.propertyOnNullableInt;
   i.propertyOnNonNullInt;
 //  ^^^^^^^^^^^^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//  ^
-// [cfe 2] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 9] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null.
 }
 
 property_get_of_expression(C c) {
   if (c.i == null) return;
   c.i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 3] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 extension_property_get_of_expression(C c) {
@@ -67,18 +71,16 @@
   c.i.propertyOnNullableInt;
   c.i.propertyOnNonNullInt;
 //    ^^^^^^^^^^^^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 4] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 11] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null.
 }
 
 method_invocation(C c) {
   if (c.i == null) return;
   c.i.abs();
 //    ^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 5] Method 'abs' cannot be called on 'int?' because it is potentially null.
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 12] Method 'abs' cannot be called on 'int?' because it is potentially null.
 }
 
 extension_method_invocation(C c) {
@@ -86,16 +88,14 @@
   c.i.methodOnNullableInt();
   c.i.methodOnNonNullInt();
 //    ^^^^^^^^^^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 6] Method 'methodOnNonNullInt' cannot be called on 'int?' because it is potentially null.
+// [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 13] Method 'methodOnNonNullInt' cannot be called on 'int?' because it is potentially null.
 }
 
 call_invocation(C c) {
   if (c.f == null) return;
   c.f.call();
 //    ^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 7] Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// [analyzer 7] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 14] Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 }
diff --git a/tests/language/why_not_promoted/nullable_spread_error_test.dart b/tests/language/why_not_promoted/nullable_spread_error_test.dart
index 3d9e669..03d98ed 100644
--- a/tests/language/why_not_promoted/nullable_spread_error_test.dart
+++ b/tests/language/why_not_promoted/nullable_spread_error_test.dart
@@ -8,47 +8,63 @@
 
 class C {
   List<int>? listQuestion;
-  //         ^
-  // [context 1] 'listQuestion' refers to a property so it couldn't be promoted.
-  // [context 5] 'listQuestion' refers to a property so it couldn't be promoted.
-  // [context 11] 'listQuestion' refers to a property so it couldn't be promoted.
+  //         ^^^^^^^^^^^^
+  // [context 7] 'listQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 9] 'listQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 15] 'listQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 17] 'listQuestion' refers to a property so it couldn't be promoted.
+  // [context 21] 'listQuestion' refers to a property so it couldn't be promoted.
+  // [context 27] 'listQuestion' refers to a property so it couldn't be promoted.
   Object? objectQuestion;
-  //      ^
-  // [context 4] 'objectQuestion' refers to a property so it couldn't be promoted.
-  // [context 8] 'objectQuestion' refers to a property so it couldn't be promoted.
-  // [context 9] 'objectQuestion' refers to a property so it couldn't be promoted.
-  // [context 10] 'objectQuestion' refers to a property so it couldn't be promoted.
-  // [context 14] 'objectQuestion' refers to a property so it couldn't be promoted.
-  // [context 15] 'objectQuestion' refers to a property so it couldn't be promoted.
+  //      ^^^^^^^^^^^^^^
+  // [context 1] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 6] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 10] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 11] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 12] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 16] 'objectQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 20] 'objectQuestion' refers to a property so it couldn't be promoted.
+  // [context 24] 'objectQuestion' refers to a property so it couldn't be promoted.
+  // [context 25] 'objectQuestion' refers to a property so it couldn't be promoted.
+  // [context 26] 'objectQuestion' refers to a property so it couldn't be promoted.
+  // [context 30] 'objectQuestion' refers to a property so it couldn't be promoted.
+  // [context 31] 'objectQuestion' refers to a property so it couldn't be promoted.
   Set<int>? setQuestion;
-  //        ^
-  // [context 2] 'setQuestion' refers to a property so it couldn't be promoted.
-  // [context 6] 'setQuestion' refers to a property so it couldn't be promoted.
-  // [context 12] 'setQuestion' refers to a property so it couldn't be promoted.
-  // [context 16] 'setQuestion' refers to a property so it couldn't be promoted.
+  //        ^^^^^^^^^^^
+  // [context 4] 'setQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'setQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 8] 'setQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 14] 'setQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 18] 'setQuestion' refers to a property so it couldn't be promoted.
+  // [context 22] 'setQuestion' refers to a property so it couldn't be promoted.
+  // [context 28] 'setQuestion' refers to a property so it couldn't be promoted.
+  // [context 32] 'setQuestion' refers to a property so it couldn't be promoted.
   Map<int, int>? mapQuestion;
-  //             ^
-  // [context 3] 'mapQuestion' refers to a property so it couldn't be promoted.
-  // [context 7] 'mapQuestion' refers to a property so it couldn't be promoted.
-  // [context 13] 'mapQuestion' refers to a property so it couldn't be promoted.
+  //             ^^^^^^^^^^^
+  // [context 2] 'mapQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'mapQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 13] 'mapQuestion' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 19] 'mapQuestion' refers to a property so it couldn't be promoted.
+  // [context 23] 'mapQuestion' refers to a property so it couldn't be promoted.
+  // [context 29] 'mapQuestion' refers to a property so it couldn't be promoted.
 }
 
 list_from_list_question(C c) {
   if (c.listQuestion == null) return;
   return [...c.listQuestion];
   //         ^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 7] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 1] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 17] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 list_from_set_question(C c) {
   if (c.setQuestion == null) return;
   return [...c.setQuestion];
   //         ^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 2] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 18] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 list_from_map_question(C c) {
@@ -56,9 +72,9 @@
   return [...c.mapQuestion];
   //         ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NOT_ITERABLE_SPREAD
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 3] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 19] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   // [cfe] Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
 }
 
@@ -67,9 +83,9 @@
   return [...c.objectQuestion];
   //         ^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NOT_ITERABLE_SPREAD
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 16] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 4] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 20] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   // [cfe] Unexpected type 'Object?' of a spread.  Expected 'dynamic' or an Iterable.
 }
 
@@ -77,27 +93,27 @@
   if (c.listQuestion == null) return;
   return {...c.listQuestion};
   //         ^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 9] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 5] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 21] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 set_from_set_question(C c) {
   if (c.setQuestion == null) return;
   return {...c.setQuestion};
   //         ^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 6] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 22] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 set_from_map_question(C c) {
   if (c.mapQuestion == null) return;
   return {...c.mapQuestion};
   //         ^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 7] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 23] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 set_from_object_question_type_disambiguate_by_entry(C c) {
@@ -106,9 +122,9 @@
   //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER
   //               ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                 ^
-  // [cfe 8] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 24] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   // [cfe] Unexpected type 'Object?' of a spread.  Expected 'dynamic' or an Iterable.
 }
 
@@ -118,9 +134,9 @@
   //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER
   //                     ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 12] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                       ^
-  // [cfe 9] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
+  // [cfe 25] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
 }
 
 set_from_object_question_type_disambiguate_by_literal_args(C c) {
@@ -128,9 +144,9 @@
   return <int>{...c.objectQuestion};
   //              ^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NOT_ITERABLE_SPREAD
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                ^
-  // [cfe 10] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 26] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   // [cfe] Unexpected type 'Object?' of a spread.  Expected 'dynamic' or an Iterable.
 }
 
@@ -138,27 +154,27 @@
   if (c.listQuestion == null) return;
   return {...c.listQuestion};
   //         ^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 15] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 11] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 27] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 map_from_set_question(C c) {
   if (c.setQuestion == null) return;
   return {...c.setQuestion};
   //         ^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 14] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 12] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 28] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 map_from_map_question(C c) {
   if (c.mapQuestion == null) return;
   return {...c.mapQuestion};
   //         ^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 13] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //           ^
-  // [cfe 13] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 29] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
 }
 
 map_from_object_question_type_disambiguate_by_key_value_pair(C c) {
@@ -167,9 +183,9 @@
   //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER
   //                     ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 10] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                       ^
-  // [cfe 14] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
+  // [cfe 30] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
 }
 
 map_from_object_question_type_disambiguate_by_previous_spread(C c) {
@@ -178,9 +194,9 @@
   //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER
   //                          ^^^^^^^^^^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 11] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                            ^
-  // [cfe 15] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
+  // [cfe 31] Unexpected type 'Object?' of a map spread entry.  Expected 'dynamic' or a Map.
 }
 
 map_from_set_question_type_disambiguate_by_literal_args(C c) {
@@ -192,8 +208,8 @@
   return <int, int>{...c.setQuestion};
   //                   ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD
-  // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+  // [analyzer 8] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
   //                     ^
-  // [cfe 16] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  // [cfe 32] An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   // [cfe] Unexpected type 'Set<int>?' of a map spread entry.  Expected 'dynamic' or a Map.
 }
diff --git a/tests/language/why_not_promoted/property_error_test.dart b/tests/language/why_not_promoted/property_error_test.dart
index 330a21e..02b1615 100644
--- a/tests/language/why_not_promoted/property_error_test.dart
+++ b/tests/language/why_not_promoted/property_error_test.dart
@@ -5,39 +5,42 @@
 class C {
   int? get i => null;
   //       ^
-  // [context 1] 'i' refers to a property so it couldn't be promoted.
-  // [context 2] 'i' refers to a property so it couldn't be promoted.
-  // [context 3] 'i' refers to a property so it couldn't be promoted.
-  // [context 4] 'i' refers to a property so it couldn't be promoted.
-  // [context 5] 'i' refers to a property so it couldn't be promoted.
-  // [context 6] 'i' refers to a property so it couldn't be promoted.
+  // [context 1] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 2] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 3] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 4] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 5] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 6] 'i' refers to a property so it couldn't be promoted.  See http://dart.dev/go/non-promo-property
+  // [context 7] 'i' refers to a property so it couldn't be promoted.
+  // [context 8] 'i' refers to a property so it couldn't be promoted.
+  // [context 9] 'i' refers to a property so it couldn't be promoted.
+  // [context 10] 'i' refers to a property so it couldn't be promoted.
+  // [context 11] 'i' refers to a property so it couldn't be promoted.
+  // [context 12] 'i' refers to a property so it couldn't be promoted.
   int? get j => null;
 
   get_property_via_explicit_this() {
     if (this.i == null) return;
     this.i.isEven;
 //         ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//         ^
-// [cfe 1] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 7] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_property_via_explicit_this_parenthesized() {
     if ((this).i == null) return;
     (this).i.isEven;
 //           ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//           ^
-// [cfe 2] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_property_by_implicit_this() {
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 3] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 9] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -46,18 +49,16 @@
     if (super.i == null) return;
     super.i.isEven;
 //          ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//          ^
-// [cfe 4] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
   get_property_by_implicit_super() {
     if (i == null) return;
     i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 5] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 11] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
 
@@ -65,9 +66,8 @@
   if (c.i == null) return;
   c.i.isEven;
 //    ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
-// [cfe 6] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [cfe 12] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
 get_property_via_prefixed_identifier_mismatched_target(C c1, C c2) {
@@ -77,7 +77,6 @@
   c2.i.isEven;
 //     ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//     ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
 
@@ -88,6 +87,5 @@
   c.j.isEven;
 //    ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//    ^
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 }
diff --git a/tests/language/why_not_promoted/this_error_test.dart b/tests/language/why_not_promoted/this_error_test.dart
index 9c2a1d4..2d836ee 100644
--- a/tests/language/why_not_promoted/this_error_test.dart
+++ b/tests/language/why_not_promoted/this_error_test.dart
@@ -15,8 +15,8 @@
     if (this == null) return;
     this.isEven;
 //       ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
-//       ^
+// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [context 2] 'this' can't be promoted.  See http://dart.dev/go/non-promo-this
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 
@@ -25,7 +25,8 @@
     if (this == null) return;
     isEven;
 //  ^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [context 1] 'this' can't be promoted.  See http://dart.dev/go/non-promo-this
 // [cfe] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
   }
 }
diff --git a/tests/modular/private_class_exposed_by_typedef/main.dart b/tests/modular/private_class_exposed_by_typedef/main.dart
new file mode 100644
index 0000000..70c26d1
--- /dev/null
+++ b/tests/modular/private_class_exposed_by_typedef/main.dart
@@ -0,0 +1,61 @@
+// 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:expect/expect.dart";
+
+import "private_name_library.dart";
+
+// These tests are adapted from the set located in
+// language/nonfunction_type_aliases/private_names/ to highlight a specific
+// DDC issue with public fields in private classes.
+
+void main() {
+  test1();
+  test2();
+}
+
+/// Extend a private class via a public typedef without overriding any methods.
+class Derived extends PublicClass {
+  Derived() : super();
+}
+
+/// Extend a private class via a public typedef overriding methods and
+/// properties.  The final field `x` is overriden with a getter which returns
+/// different values every time it is called.
+class AlsoDerived extends AlsoPublicClass {
+  int backingStore = publicNameSentinel;
+  int get x => ++backingStore;
+  int get y => super.x;
+  AlsoDerived() : super.named(privateNameSentinel);
+}
+
+/// Test that inherited properties work correctly
+void test1() {
+  var p = Derived();
+  // Reading the virtual field should give the private value
+  Expect.equals(privateNameSentinel, p.x);
+  // Reading the virtual field from the private library should give the private
+  // value
+  Expect.equals(privateNameSentinel, readInstanceField(p));
+}
+
+/// Test that overridden properties work correctly.
+void test2() {
+  var p = AlsoDerived();
+  // Reading the original virtual field should give the private value.
+  Expect.equals(privateNameSentinel, p.y);
+  // Reading the overriding getter from the private library should give the
+  // public value and increment it each time it is called.
+  Expect.equals(publicNameSentinel, p.backingStore);
+  Expect.equals(publicNameSentinel + 1, readInstanceField2(p));
+  Expect.equals(publicNameSentinel + 1, p.backingStore);
+  // Reading the overriding getter from the original library should give the
+  // public value and increment it each time it is called.
+  Expect.equals(publicNameSentinel + 2, p.x);
+  Expect.equals(publicNameSentinel + 2, p.backingStore);
+  Expect.equals(privateNameSentinel, p.y);
+  Expect.equals(publicNameSentinel + 2, p.backingStore);
+  Expect.equals(publicNameSentinel + 3, readInstanceField2(p));
+  Expect.equals(publicNameSentinel + 4, p.x);
+}
diff --git a/tests/modular/private_class_exposed_by_typedef/modules.yaml b/tests/modular/private_class_exposed_by_typedef/modules.yaml
new file mode 100644
index 0000000..530016e
--- /dev/null
+++ b/tests/modular/private_class_exposed_by_typedef/modules.yaml
@@ -0,0 +1,8 @@
+# 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.
+#
+dependencies:
+  main: [expect, private_name_library]
+flags:
+  - nonfunction-type-aliases
diff --git a/tests/modular/private_class_exposed_by_typedef/private_name_library.dart b/tests/modular/private_class_exposed_by_typedef/private_name_library.dart
new file mode 100644
index 0000000..74559cc
--- /dev/null
+++ b/tests/modular/private_class_exposed_by_typedef/private_name_library.dart
@@ -0,0 +1,39 @@
+// 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.
+// Shared code for tests that private names exported publicly via a typedef work
+// as expected.
+library private;
+
+/// Sentinel values for checking that the correct methods are called.
+const int privateNameSentinel = -1;
+const int publicNameSentinel = privateNameSentinel + 1;
+
+/// A private class that will be exported via a public typedef.
+class _PrivateClass {
+  int x;
+  _PrivateClass(): x = privateNameSentinel;
+  _PrivateClass.named(this.x);
+}
+
+class _PrivateClass2 {
+  int x;
+  _PrivateClass2(): x = privateNameSentinel;
+  _PrivateClass2.named(this.x);
+}
+
+/// Export the private class publicly.
+typedef PublicClass = _PrivateClass;
+
+/// Export the private class publicly via an indirection through another private
+/// typedef.
+typedef _PrivateTypeDef = _PrivateClass2;
+typedef AlsoPublicClass = _PrivateTypeDef;
+
+/// Helper methods to do virtual calls on instances of _PrivateClass in this
+/// library context.
+int readInstanceField(_PrivateClass other) => other.x;
+
+/// Helper methods to do virtual calls on instances of _PrivateClass in this
+/// library context.
+int readInstanceField2(_PrivateClass2 other) => other.x;
diff --git a/tools/VERSION b/tools/VERSION
index 043770a..8021494 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 204
+PRERELEASE 205
 PRERELEASE_PATCH 0
\ No newline at end of file
