diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1ed2a0..4700f9d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -97,6 +97,9 @@
   ```
 
   See [#44072][].
+
+  For legacy dependencies without an sdk constraint pub will now assume a
+  default language version of 2.7.
 * The top level `pub` executable has been deprecated. Use `dart pub` instead.
   See [dart tool][].
 * New command `dart pub add` that adds  new dependencies to your `pubspec.yaml`.
diff --git a/DEPS b/DEPS
index 51d9353..739fc9d 100644
--- a/DEPS
+++ b/DEPS
@@ -132,7 +132,7 @@
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_rev": "eedbd5fde84f9a1a8da643b475305a81841da599",
   "protobuf_rev": "3746c8fd3f2b0147623a8e3db89c3ff4330de760",
-  "pub_rev": "b10966c6a8ad7d95c2023b7842fa2697001d2fdf",
+  "pub_rev": "c00d4b4abf5b4ff265a7ce6282b748551f1b5b1f",
   "pub_semver_tag": "v1.4.4",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "7e5ec82c99677a2e5b95ce296c4d68b0d3378ed8",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 6bce0eb..e40a4fc 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -8714,13 +8714,12 @@
             _names)> templateStrongModeNNBDPackageOptOut = const Template<
         Message Function(List<String> _names)>(
     messageTemplate:
-        r"""This project cannot run with sound null safety, because one or more project dependencies do not
-support null safety:
+        r"""Cannot run with sound null safety, because the following dependencies
+don't support null safety:
 
 #names
 
-Run 'pub outdated --mode=null-safety' to determine if versions of your
-dependencies supporting null safety are available.""",
+For solutions, see https://dart.dev/go/unsound-null-safety""",
     withArguments: _withArgumentsStrongModeNNBDPackageOptOut);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8737,13 +8736,12 @@
   String names = itemizeNames(_names);
   return new Message(codeStrongModeNNBDPackageOptOut,
       message:
-          """This project cannot run with sound null safety, because one or more project dependencies do not
-support null safety:
+          """Cannot run with sound null safety, because the following dependencies
+don't support null safety:
 
 ${names}
 
-Run 'pub outdated --mode=null-safety' to determine if versions of your
-dependencies supporting null safety are available.""",
+For solutions, see https://dart.dev/go/unsound-null-safety""",
       arguments: {'names': _names});
 }
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 5c09be3..c37c64c 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -887,9 +887,9 @@
   }
 
   void _checkForPackagespecUpdate(String path, ContextInfo info) {
-    // Check to see if this is the .packages file for this context and if so,
-    // update the context's source factory.
-    if (pathContext.basename(path) == PACKAGE_SPEC_NAME) {
+    // Check to see if this is `.dart_tool/package_config.json` or `.packages`
+    // file for this context and if so, update the context's source factory.
+    if (_isPackageConfigJsonFilePath(path) || _isDotPackagesFilePath(path)) {
       var driver = info.analysisDriver;
       if (driver == null) {
         // I suspect that this happens as a result of a race condition: server
@@ -1249,6 +1249,9 @@
     if (info.hasDependency(path)) {
       _recomputeFolderDisposition(info);
     }
+
+    _checkForPackagespecUpdate(path, info);
+
     // maybe excluded globally
     if (_isExcluded(path) ||
         _isContainedInDotFolder(info.folder.path, path) ||
@@ -1283,7 +1286,7 @@
                 return;
               }
             }
-            if (_isPackagespec(path)) {
+            if (_isDotPackagesFilePath(path)) {
               // Check for a sibling pubspec.yaml file.
               if (!resourceProvider
                   .getFile(pathContext.join(directoryPath, PUBSPEC_NAME))
@@ -1323,7 +1326,7 @@
                 return;
               }
             }
-            if (_isPackagespec(path)) {
+            if (_isDotPackagesFilePath(path)) {
               // Check for a sibling pubspec.yaml file.
               if (!resourceProvider
                   .getFile(pathContext.join(directoryPath, PUBSPEC_NAME))
@@ -1352,7 +1355,6 @@
           }
         }
     }
-    _checkForPackagespecUpdate(path, info);
     _checkForAnalysisOptionsUpdate(path, info);
     _checkForDataFileUpdate(path, info);
     _checkForPubspecUpdate(path, info);
@@ -1388,6 +1390,10 @@
   /// to specify data-driven fixes.
   bool _isDataFile(String path) => pathContext.basename(path) == dataFileName;
 
+  bool _isDotPackagesFilePath(String path) {
+    return pathContext.basename(path) == PACKAGE_SPEC_NAME;
+  }
+
   /// Returns `true` if the given [path] is excluded by [excludedPaths].
   bool _isExcluded(String path) => _isExcludedBy(excludedPaths, path);
 
@@ -1415,8 +1421,12 @@
 
   bool _isManifest(String path) => pathContext.basename(path) == MANIFEST_NAME;
 
-  bool _isPackagespec(String path) =>
-      pathContext.basename(path) == PACKAGE_SPEC_NAME;
+  bool _isPackageConfigJsonFilePath(String path) {
+    var components = pathContext.split(path);
+    return components.length > 2 &&
+        components[components.length - 1] == 'package_config.json' &&
+        components[components.length - 2] == '.dart_tool';
+  }
 
   bool _isPubspec(String path) => pathContext.basename(path) == PUBSPEC_NAME;
 
@@ -1477,8 +1487,13 @@
     var builder = callbacks.createContextBuilder(info.folder);
     var options = builder.getAnalysisOptions(contextRoot,
         contextRoot: driver.contextRoot);
+    var packages = builder.createPackageMap(contextRoot);
     var factory = builder.createSourceFactory(contextRoot);
-    driver.configure(analysisOptions: options, sourceFactory: factory);
+    driver.configure(
+      analysisOptions: options,
+      packages: packages,
+      sourceFactory: factory,
+    );
     callbacks.analysisOptionsUpdated(driver);
   }
 
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 28ba464..a6b4251 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -23,6 +23,7 @@
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer/src/util/glob.dart';
 import 'package:linter/src/rules.dart';
@@ -1490,6 +1491,34 @@
     });
   }
 
+  Future<void> test_watch_modifyPackageConfigJson() {
+    var packageConfigPath = '$projPath/.dart_tool/package_config.json';
+    var filePath = convertPath('$projPath/bin/main.dart');
+
+    resourceProvider.newFile(packageConfigPath, '');
+    resourceProvider.newFile(filePath, 'library main;');
+
+    manager.setRoots(<String>[projPath], <String>[]);
+
+    var filePaths = callbacks.currentFilePaths;
+    expect(filePaths, hasLength(1));
+    expect(filePaths, contains(filePath));
+    expect(_currentPackageMap, isEmpty);
+
+    // update .dart_tool/package_config.json
+    callbacks.now++;
+    resourceProvider.modifyFile(
+      packageConfigPath,
+      (PackageConfigFileBuilder()..add(name: 'my', rootPath: '../'))
+          .toContent(toUriStr: toUriStr),
+    );
+
+    return pumpEventQueue().then((_) {
+      // verify new package info
+      expect(_currentPackageMap.keys, unorderedEquals(['my']));
+    });
+  }
+
   Future<void> test_watch_modifyPackagespec() {
     var packagesPath = convertPath('$projPath/.packages');
     var filePath = convertPath('$projPath/bin/main.dart');
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
index 477e325..0cf5684 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
@@ -28,7 +28,7 @@
     Directory(path.join(sdkPath, 'lib', 'async')).createSync(recursive: true);
     Directory(path.join(sdkPath, 'lib', 'fake')).createSync(recursive: true);
 
-    File(path.join(sdkPath, 'version')).writeAsStringSync('2.10.0');
+    File(path.join(sdkPath, 'version')).writeAsStringSync('2.12.0');
 
     File(path.join(sdkPath, 'lib', 'core', 'core.dart')).writeAsStringSync(r'''
 library dart.core;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
index b29d1e8..16ec311 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -517,7 +518,9 @@
   A a = new A(callback: (int a) {  });
   print(a);
 }
-''');
+''',
+        errorFilter: (error) =>
+            error.errorCode == HintCode.MISSING_REQUIRED_PARAM);
   }
 
   Future<void> test_constructor_single_closure_nnbd_into_legacy() async {
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 990feb4..38b3ce4 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -489,6 +489,7 @@
   HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE,
   HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE,
   HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION,
+  HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE,
   HintCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL,
   HintCode.INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE,
   HintCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION,
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 60447c0..2a7a07a 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -572,6 +572,16 @@
           "rename the function in the imported library.");
 
   /**
+   * https://github.com/dart-lang/sdk/issues/44063
+   */
+  static const HintCode IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE = HintCode(
+    'IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE',
+    "The library '{0}' is legacy, and should not be imported into "
+        "a null safe library.",
+    correction: "Try migrating the imported library.",
+  );
+
+  /**
    * When "strict-inference" is enabled, collection literal types must be
    * inferred via the context type, or have type arguments.
    */
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 5ee814d..acc8ac7 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -504,6 +504,7 @@
       _checkForLoadLibraryFunction(node, importElement);
     }
     _invalidAccessVerifier.verifyImport(node);
+    _checkForImportOfLegacyLibraryIntoNullSafe(node);
     super.visitImportDirective(node);
   }
 
@@ -922,6 +923,24 @@
     }
   }
 
+  void _checkForImportOfLegacyLibraryIntoNullSafe(ImportDirective node) {
+    if (!_isNonNullableByDefault) {
+      return;
+    }
+
+    var importElement = node.element as ImportElement;
+    var importedLibrary = importElement.importedLibrary;
+    if (importedLibrary == null || importedLibrary.isNonNullableByDefault) {
+      return;
+    }
+
+    _errorReporter.reportErrorForNode(
+      HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE,
+      node.uri,
+      [importedLibrary.source.uri],
+    );
+  }
+
   /// Check that the namespace exported by [node] does not include any elements
   /// annotated with `@internal`.
   void _checkForInternalExport(ExportDirective node) {
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index dc79e24..f9e47a8 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -63,6 +63,7 @@
   final List<ExceptionResult> allExceptions = <ExceptionResult>[];
 
   String testProject;
+  String testProject2;
   String testFile;
   String testCode;
 
@@ -81,7 +82,7 @@
       {Map<String, List<Folder>> packageMap,
       SummaryDataStore externalSummaries}) {
     packageMap ??= <String, List<Folder>>{
-      'test': [getFolder(testProject)],
+      'test': [getFolder('$testProject/lib')],
       'aaa': [getFolder('/aaa/lib')],
       'bbb': [getFolder('/bbb/lib')],
     };
@@ -161,7 +162,8 @@
 
   void setUp() {
     sdk = MockSdk(resourceProvider: resourceProvider);
-    testProject = convertPath('/test/lib');
+    testProject = convertPath('/test');
+    testProject2 = convertPath('/test/lib');
     testFile = convertPath('/test/lib/test.dart');
     logger = PerformanceLog(logBuffer);
     scheduler = AnalysisDriverScheduler(logger);
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 70061ed..b73f5bf 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -136,7 +136,7 @@
   }
 
   test_isExtendedBy_ClassDeclaration_isQualified() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -169,7 +169,7 @@
   }
 
   test_isExtendedBy_ClassTypeAlias_isQualified() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -195,7 +195,7 @@
   }
 
   test_isImplementedBy_ClassDeclaration_isQualified() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -243,7 +243,7 @@
   }
 
   test_isInvokedBy_FunctionElement() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 library lib;
 foo() {}
 ''');
@@ -419,7 +419,7 @@
   }
 
   test_isMixedInBy_ClassDeclaration_isQualified() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -547,7 +547,7 @@
   }
 
   test_isReferencedBy_ClassElement_invocation_isQualified() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -586,7 +586,7 @@
   }
 
   test_isReferencedBy_CompilationUnitElement_export() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 library lib;
 ''');
     await _indexTestUnit('''
@@ -597,7 +597,7 @@
   }
 
   test_isReferencedBy_CompilationUnitElement_import() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 library lib;
 ''');
     await _indexTestUnit('''
@@ -608,7 +608,7 @@
   }
 
   test_isReferencedBy_CompilationUnitElement_part() async {
-    newFile('$testProject/my_unit.dart', content: 'part of my_lib;');
+    newFile('$testProject2/my_unit.dart', content: 'part of my_lib;');
     await _indexTestUnit('''
 library my_lib;
 part 'my_unit.dart';
@@ -618,8 +618,8 @@
   }
 
   test_isReferencedBy_CompilationUnitElement_part_inPart() async {
-    newFile('$testProject/a.dart', content: 'part of lib;');
-    newFile('$testProject/b.dart', content: '''
+    newFile('$testProject2/a.dart', content: 'part of lib;');
+    newFile('$testProject2/b.dart', content: '''
 library lib;
 part 'a.dart';
 ''');
@@ -899,7 +899,7 @@
   }
 
   test_isReferencedBy_FunctionElement_with_LibraryElement() async {
-    newFile('$testProject/foo.dart', content: r'''
+    newFile('$testProject2/foo.dart', content: r'''
 bar() {}
 ''');
     await _indexTestUnit('''
@@ -957,8 +957,8 @@
   }
 
   test_isReferencedBy_MultiplyDefinedElement() async {
-    newFile('$testProject/a1.dart', content: 'class A {}');
-    newFile('$testProject/a2.dart', content: 'class A {}');
+    newFile('$testProject2/a1.dart', content: 'class A {}');
+    newFile('$testProject2/a2.dart', content: 'class A {}');
     await _indexTestUnit('''
 import 'a1.dart';
 import 'a2.dart';
@@ -1153,7 +1153,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 library lib;
 var V;
 ''');
@@ -1177,7 +1177,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement_synthetic_hasGetterSetter() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 int get V => 0;
 void set V(_) {}
 ''');
@@ -1189,7 +1189,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement_synthetic_hasSetter() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 void set V(_) {}
 ''');
     await _indexTestUnit('''
@@ -1224,7 +1224,7 @@
 
   test_subtypes_classDeclaration() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 class B {}
 class C {}
@@ -1274,7 +1274,7 @@
 
   test_subtypes_classTypeAlias() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 class B {}
 class C {}
@@ -1312,7 +1312,7 @@
 
   test_subtypes_mixinDeclaration() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 class A {}
 class B {}
 class C {}
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index e5fefd3..3858d02 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -261,7 +261,7 @@
   }
 
   test_searchReferences_ClassElement_definedOutside() async {
-    newFile('$testProject/lib.dart', content: r'''
+    newFile('$testProject2/lib.dart', content: r'''
 class A {};
 ''');
     await _resolveTestUnit('''
@@ -317,7 +317,7 @@
   }
 
   test_searchReferences_CompilationUnitElement() async {
-    newFile('$testProject/foo.dart');
+    newFile('$testProject2/foo.dart');
     await _resolveTestUnit('''
 import 'foo.dart'; // import
 export 'foo.dart'; // export
@@ -354,7 +354,7 @@
   }
 
   test_searchReferences_ConstructorElement_default_otherFile() async {
-    String other = convertPath('$testProject/other.dart');
+    String other = convertPath('$testProject2/other.dart');
     String otherCode = '''
 import 'test.dart';
 main() {
@@ -686,8 +686,8 @@
   test_searchReferences_LibraryElement() async {
     var codeA = 'part of lib; // A';
     var codeB = 'part of lib; // B';
-    newFile('$testProject/unitA.dart', content: codeA);
-    newFile('$testProject/unitB.dart', content: codeB);
+    newFile('$testProject2/unitA.dart', content: codeA);
+    newFile('$testProject2/unitB.dart', content: codeB);
     await _resolveTestUnit('''
 library lib;
 part 'unitA.dart';
@@ -1103,7 +1103,7 @@
 part of my_lib;
 ppp.Future c;
 ''';
-    newFile('$testProject/my_part.dart', content: partCode);
+    newFile('$testProject2/my_part.dart', content: partCode);
     await _resolveTestUnit('''
 library my_lib;
 import 'dart:async' as ppp;
@@ -1156,9 +1156,9 @@
   }
 
   test_searchReferences_private_declaredInDefiningUnit() async {
-    String p1 = convertPath('$testProject/part1.dart');
-    String p2 = convertPath('$testProject/part2.dart');
-    String p3 = convertPath('$testProject/part3.dart');
+    String p1 = convertPath('$testProject2/part1.dart');
+    String p2 = convertPath('$testProject2/part2.dart');
+    String p3 = convertPath('$testProject2/part3.dart');
     String code1 = 'part of lib; _C v1;';
     String code2 = 'part of lib; _C v2;';
     newFile(p1, content: code1);
@@ -1192,9 +1192,9 @@
   }
 
   test_searchReferences_private_declaredInPart() async {
-    String p = convertPath('$testProject/lib.dart');
-    String p1 = convertPath('$testProject/part1.dart');
-    String p2 = convertPath('$testProject/part2.dart');
+    String p = convertPath('$testProject2/lib.dart');
+    String p1 = convertPath('$testProject2/part1.dart');
+    String p2 = convertPath('$testProject2/part2.dart');
 
     var code = '''
 library lib;
@@ -1369,7 +1369,7 @@
   }
 
   test_searchReferences_TopLevelVariableElement() async {
-    newFile('$testProject/lib.dart', content: '''
+    newFile('$testProject2/lib.dart', content: '''
 library lib;
 var V;
 ''');
@@ -1654,8 +1654,8 @@
   }
 
   test_subtypes_files() async {
-    String pathB = convertPath('$testProject/b.dart');
-    String pathC = convertPath('$testProject/c.dart');
+    String pathB = convertPath('$testProject2/b.dart');
+    String pathC = convertPath('$testProject2/c.dart');
     newFile(pathB, content: r'''
 import 'test.dart';
 class B extends A {}
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 34b271d..4090683 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -347,13 +347,15 @@
 const cString = const String.fromEnvironment('foo', defaultValue: 'bar');
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 const vBool = cBool;
 const vInt = cInt;
 const vString = cString;
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     DartObjectImpl evaluate(String name) {
       return findElement.topVar(name).computeConstantValue();
diff --git a/pkg/analyzer/test/src/dart/resolution/field_test.dart b/pkg/analyzer/test/src/dart/resolution/field_test.dart
index 90d814b..c8120a0 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -67,13 +68,15 @@
 var a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 class A {
   var f = a;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertType(findElement.field('f').type, 'int');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
index d200a01..c94064b 100644
--- a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
@@ -81,14 +81,16 @@
 int a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'dart:math';
 import 'package:aaa/a.dart';
 
 var x = 0;
 var y = a;
 var z = pi;
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 27, 20),
+    ]);
     assertType(findElement.topVar('x').type, 'int');
     assertType(findElement.topVar('y').type, 'int');
     assertType(findElement.topVar('z').type, 'double');
diff --git a/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
index 7e27085..213fbbb 100644
--- a/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
@@ -122,14 +122,16 @@
 var a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 void f() {
   var x = a;
   x;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     var x = findElement.localVar('x');
     assertType(x.type, 'int');
diff --git a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
index 896aa45..fd045d0 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -59,11 +60,13 @@
 var a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 var v = a;
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertType(findElement.topVar('v').type, 'int');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index 4ac90c4..d665880 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -468,7 +468,7 @@
 int Function(int a) v;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 T foo<T>() => throw 0;
@@ -478,7 +478,9 @@
     return foo();
   };
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
     assertType(findElement.parameter('a').type, 'int');
     _assertReturnType('(a) {', 'int');
   }
@@ -489,13 +491,15 @@
 
 void foo(int Function() x) {}
 ''');
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 void test(int? a) {
   foo(() => a);
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
     _assertReturnType('() => a', 'int?');
   }
 
@@ -505,13 +509,15 @@
 
 void foo(int Function() x) {}
 ''');
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 void test(dynamic a) {
   foo(() => a);
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
     _assertReturnType('() => a', 'int');
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index 502c43d..562aebb 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -472,11 +472,13 @@
 class A {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(A a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('A a'),
@@ -491,11 +493,13 @@
 class A<T extends num> {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(A a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('A a'),
@@ -510,11 +514,13 @@
 class A<T> {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(A a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('A a'),
@@ -529,11 +535,13 @@
 class A<T> {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(A<int> a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('A<int> a'),
@@ -548,11 +556,13 @@
 typedef F = int Function();
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(F a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('F a'),
@@ -567,11 +577,13 @@
 typedef F<T extends num> = T Function();
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(F a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('F a'),
@@ -586,11 +598,13 @@
 typedef F<T> = T Function();
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(F a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('F a'),
@@ -605,11 +619,13 @@
 typedef F<T> = T Function();
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 f(F<int> a) {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
 
     assertTypeName(
       findNode.typeName('F<int> a'),
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
index 9342301..aa368bb 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
@@ -138,11 +138,13 @@
 class C extends Bi implements Biq {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'b.dart';
 
 abstract class D implements C {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_class_topMerge() async {
@@ -169,11 +171,13 @@
 class B extends A<int> {}
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 import 'b.dart';
 
 class C extends B implements A<int> {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
index c1e4746..9699bae 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
@@ -22,13 +22,15 @@
 var x = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x ??= 0;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_assignCompound_map() async {
@@ -68,13 +70,15 @@
 var x = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x ?? 0;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_binary_nonNullable() async {
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart
new file mode 100644
index 0000000..2119b9f
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImportOfLegacyLibraryInoNullSafeTest);
+  });
+}
+
+@reflectiveTest
+class ImportOfLegacyLibraryInoNullSafeTest extends PubPackageResolutionTest
+    with WithNullSafetyMixin {
+  test_legacy_into_legacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.9
+class A {}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.9
+import 'a.dart';
+
+void f(A a) {}
+''');
+  }
+
+  test_legacy_into_nullSafe() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.9
+class A {}
+''');
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+void f(A a) {}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
+  }
+
+  test_nullSafe_into_legacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.9
+import 'a.dart';
+
+void f(A a) {}
+''');
+  }
+
+  test_nullSafe_into_nullSafe() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {}
+''');
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+
+void f(A a) {}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
index bce4df1..8f903e5 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
@@ -201,14 +201,16 @@
 var x = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x?.isEven;
   x?..isEven;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_getter_mixin() async {
@@ -268,14 +270,16 @@
 var x = [0];
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x?[0];
   x?..[0];
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_index_nonNullable() async {
@@ -329,14 +333,16 @@
 var x = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x?.round();
   x?..round();
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_method_mixin() async {
@@ -386,13 +392,15 @@
 var x = <int>[];
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   [...?x];
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_nullableSpread_nonNullableType() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
index e3a0206..110480c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
@@ -308,13 +308,15 @@
 }
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 class B extends A {
   void foo({int a = 0}) {}
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_concrete_equal_optOut_extends_optIn() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
index 67d9fa8..50128c9 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
@@ -323,13 +323,15 @@
 }
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 class B extends A {
   void foo([int a = 0]) {}
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_concrete_equal_optOut_extends_optIn() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index 17c1ae2..5d52603 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -798,12 +798,14 @@
 class C with B {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 import 'b.dart';
 
 class D extends C implements Bq {}
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
   }
 
   test_mixedInheritance_2() async {
@@ -828,7 +830,7 @@
 class C extends B with Bq {}
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'b.dart';
 
 class D extends C {
@@ -836,7 +838,9 @@
   set a(List<int Function(int)> _) {}
   int Function(int) m(int Function(int) x) => x;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_setter_overrides_abstract_field_covariant_valid() async {
@@ -959,7 +963,7 @@
 class L extends A2 implements A1 {}
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 import 'b.dart';
 
@@ -971,7 +975,9 @@
   int? m() => 0;
   set s(int _) {}
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
   }
 
   test_viaLegacy_mixin() async {
@@ -996,7 +1002,7 @@
 class L extends Object with A2 implements A1 {}
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 import 'b.dart';
 
@@ -1008,6 +1014,8 @@
   int? m() => 0;
   set s(int _) {}
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 2498c30..3d1585b 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -230,6 +230,8 @@
 import 'import_deferred_library_with_load_function_test.dart'
     as import_deferred_library_with_load_function;
 import 'import_internal_library_test.dart' as import_internal_library;
+import 'import_of_legacy_library_into_null_safe_test.dart'
+    as mport_of_legacy_library_into_null_safe;
 import 'import_of_non_library_test.dart' as import_of_non_library;
 import 'inconsistent_case_expression_types_test.dart'
     as inconsistent_case_expression_types;
@@ -808,6 +810,7 @@
     implicit_this_reference_in_initializer.main();
     import_deferred_library_with_load_function.main();
     import_internal_library.main();
+    mport_of_legacy_library_into_null_safe.main();
     import_of_non_library.main();
     inconsistent_case_expression_types.main();
     inconsistent_inheritance_getter_and_method.main();
diff --git a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
index d1ec82c..fa947bc 100644
--- a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
@@ -29,13 +29,15 @@
 // @dart = 2.7
 int a = 0;
 ''');
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   throw a;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_nonNullable() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
index d927ad5..4b9d36e 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
@@ -231,6 +231,7 @@
   b;
 }
 ''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
       error(HintCode.UNNECESSARY_CAST, 39, 8),
     ]);
   }
@@ -241,13 +242,15 @@
 int a = 0;
 ''');
 
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 import 'a.dart';
 
 void f() {
   var b = a as int?;
   b;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
index 3104f05..4c521d2 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
@@ -22,13 +22,15 @@
 var x = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   x!;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_nonNull_function() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
index e48a345..ffd565a 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
@@ -34,14 +34,16 @@
 var a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   a == null;
   null == a;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_equal_legacyLibrary() async {
@@ -96,14 +98,16 @@
 var a = 0;
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 f() {
   a != null;
   null != a;
 }
-''');
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
   }
 
   test_notEqual_legacyLibrary() async {
diff --git a/pkg/dartdev/test/commands/migrate_test.dart b/pkg/dartdev/test/commands/migrate_test.dart
index 307c85a..8101640 100644
--- a/pkg/dartdev/test/commands/migrate_test.dart
+++ b/pkg/dartdev/test/commands/migrate_test.dart
@@ -12,7 +12,8 @@
 }
 
 void defineMigrateTests() {
-  final didYouForgetToRunPubGet = contains('Did you forget to run "pub get"?');
+  final runPubGet = contains('Run `dart pub get`');
+  final setLowerSdkConstraint = contains('Set the lower SDK constraint');
 
   TestProject p;
 
@@ -60,7 +61,8 @@
     var result = p.runSync('migrate', [p.dirPath]);
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
-    expect(result.stdout, didYouForgetToRunPubGet);
+    expect(result.stdout, runPubGet);
+    expect(result.stdout, isNot(setLowerSdkConstraint));
   });
 
   test('non-pub-related error', () {
@@ -68,6 +70,7 @@
     var result = p.runSync('migrate', [p.dirPath]);
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
-    expect(result.stdout, isNot(didYouForgetToRunPubGet));
+    expect(result.stdout, runPubGet);
+    expect(result.stdout, setLowerSdkConstraint);
   });
 }
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4e6e901..ae4a9e7 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1325,13 +1325,12 @@
 
 StrongModeNNBDPackageOptOut:
   template:  |
-    This project cannot run with sound null safety, because one or more project dependencies do not
-    support null safety:
+    Cannot run with sound null safety, because the following dependencies
+    don't support null safety:
 
     #names
 
-    Run 'pub outdated --mode=null-safety' to determine if versions of your
-    dependencies supporting null safety are available.
+    For solutions, see https://dart.dev/go/unsound-null-safety
 
 WeakWithStrongDillLibrary:
   template: "Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety."
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 324b76d..debea18 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -19,6 +19,7 @@
 constructor(s)
 count.#count
 d
+dart.dev
 dart2js_server
 dart:ffi
 dart_runner
@@ -30,6 +31,7 @@
 flutter_runner
 futureor
 h
+https
 interop
 libraries.json
 list.filled
@@ -51,6 +53,7 @@
 pubspec.yaml
 re
 sdksummary
+solutions
 stacktrace
 stringokempty
 struct<#name
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
index cdbc8c9..c60e92f 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.1.expect
@@ -2,14 +2,13 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:foo
 //  - package:bar
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library from "package:bar/bar.dart" as bar {
 
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
index d574728..8d45bc5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.2.expect
@@ -2,14 +2,13 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:foo
 //  - package:bar
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library from "package:bar/bar.dart" as bar {
 
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
index caa2322..4c66e26 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/can_get_rid_of_nnbd_issue_error.yaml.world.3.expect
@@ -2,13 +2,12 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:bar
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library from "package:bar/bar.dart" as bar {
 
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
index a0f941d..6f3562f 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
@@ -1,14 +1,13 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 // pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
 //
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
index d72b9a7..5600de5 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
@@ -1,14 +1,13 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 // pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
 //
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
index d72b9a7..5600de5 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
@@ -1,14 +1,13 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 // pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/opt_in_package/lib/opt_in_lib.dart: Error: Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.
 //
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
index 59a5039..967b08d 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
@@ -8,13 +8,12 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library /*isNonNullableByDefault*/;
 import self as self;
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
index d834f3b..874184d 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
@@ -8,13 +8,12 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library /*isNonNullableByDefault*/;
 import self as self;
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
index 95f7dc1..fda0ef7 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
@@ -1,13 +1,12 @@
 //
 // Problems in component:
 //
-// Error: This project cannot run with sound null safety, because one or more project dependencies do not
-// support null safety:
+// Error: Cannot run with sound null safety, because the following dependencies
+// don't support null safety:
 //
 //  - package:opt_out_package
 //
-// Run 'pub outdated --mode=null-safety' to determine if versions of your
-// dependencies supporting null safety are available.
+// For solutions, see https://dart.dev/go/unsound-null-safety
 //
 library /*isNonNullableByDefault*/;
 import self as self;
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index 8f0d07d..71b7326 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -6,6 +6,7 @@
 import 'dart:io' hide File;
 
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
@@ -50,9 +51,10 @@
   final Map<String, LineInfo> lineInfo;
   final Context pathContext;
   final String rootDirectory;
+  final bool allSourcesAlreadyMigrated;
 
-  AnalysisResult(
-      this.errors, this.lineInfo, this.pathContext, this.rootDirectory) {
+  AnalysisResult(this.errors, this.lineInfo, this.pathContext,
+      this.rootDirectory, this.allSourcesAlreadyMigrated) {
     errors.sort((AnalysisError one, AnalysisError two) {
       if (one.source != two.source) {
         return one.source.fullName.compareTo(two.source.fullName);
@@ -876,27 +878,41 @@
     for (AnalysisError error in analysisResult.errors) {
       renderer.render(error);
     }
-
     logger.stdout('');
-    logger.stdout('Note: analysis errors will result in erroneous migration '
-        'suggestions.');
-
     _hasAnalysisErrors = true;
+
     if (options.ignoreErrors) {
+      logger.stdout('Note: analysis errors will result in erroneous migration '
+          'suggestions.');
       logger.stdout('Continuing with migration suggestions due to the use of '
           '--${CommandLineOptions.ignoreErrorsFlag}.');
     } else {
       // Fail with how to continue.
+      logger.stdout("The migration tool didn't start, due to analysis errors.");
       logger.stdout('');
       if (analysisResult.hasImportErrors) {
-        logger
-            .stdout('Unresolved URIs found.  Did you forget to run "pub get"?');
-        logger.stdout('');
+        logger.stdout('''
+The following steps might fix your problem:
+1. Run `dart pub get`.
+2. Try running `dart migrate` again.
+''');
+      } else if (analysisResult.allSourcesAlreadyMigrated) {
+        logger.stdout('''
+The following steps might fix your problem:
+1. Set the lower SDK constraint (in pubspec.yaml) to a version before 2.12.
+2. Run `dart pub get`.
+3. Try running `dart migrate` again.
+''');
+      } else {
+        const ignoreErrors = CommandLineOptions.ignoreErrorsFlag;
+        logger.stdout('''
+We recommend fixing the analysis issues before running `dart migrate`.
+Alternatively, you can run `dart migrate --$ignoreErrors`, but you might
+get erroneous migration suggestions.
+''');
       }
       logger.stdout(
-          'Please fix the analysis issues (or, force generation of migration '
-          'suggestions by re-running with '
-          '--${CommandLineOptions.ignoreErrorsFlag}).');
+          'More information: https://dart.dev/go/null-safety-migration');
     }
   }
 
@@ -1054,7 +1070,11 @@
     _progressBar = ProgressBar(_migrationCli.logger, pathsToProcess.length);
 
     // Process each source file.
+    bool allSourcesAlreadyMigrated = true;
     await processResources((ResolvedUnitResult result) async {
+      if (!result.unit.featureSet.isEnabled(Feature.non_nullable)) {
+        allSourcesAlreadyMigrated = false;
+      }
       _progressBar.tick();
       List<AnalysisError> errors = result.errors
           .where((error) => error.severity == Severity.error)
@@ -1078,8 +1098,12 @@
       }
     }
 
-    return AnalysisResult(analysisErrors, _migrationCli.lineInfo,
-        _migrationCli.pathContext, _migrationCli.options.directory);
+    return AnalysisResult(
+        analysisErrors,
+        _migrationCli.lineInfo,
+        _migrationCli.pathContext,
+        _migrationCli.options.directory,
+        allSourcesAlreadyMigrated);
   }
 
   Future<MigrationState> runLaterPhases() async {
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index ce0ec97..355812d 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -737,11 +737,9 @@
         output,
         contains("error • Expected to find ';' at lib${sep}test.dart:1:12 • "
             '(expected_token)'));
-    expect(
-        output,
-        contains(
-            'analysis errors will result in erroneous migration suggestions'));
-    expect(output, contains('Please fix the analysis issues'));
+    expect(output, contains('erroneous migration suggestions'));
+    expect(output, contains('We recommend fixing the analysis issues'));
+    expect(output, isNot(contains('Set the lower SDK constraint')));
   }
 
   test_lifecycle_ignore_errors_enable() async {
@@ -1452,13 +1450,10 @@
     var output = logger.stdoutBuffer.toString();
     expect(output, contains('1 analysis issue found'));
     expect(output, contains('uri_does_not_exist'));
-    expect(
-        output,
-        contains(
-            'analysis errors will result in erroneous migration suggestions'));
-    expect(output,
-        contains('Unresolved URIs found.  Did you forget to run "pub get"?'));
-    expect(output, contains('Please fix the analysis issues'));
+    expect(output, isNot(contains('erroneous migration suggestions')));
+    expect(output, contains('Run `dart pub get`'));
+    expect(output, contains('Try running `dart migrate` again'));
+    expect(output, isNot(contains('Set the lower SDK constraint')));
   }
 
   test_migrate_path_absolute() {
@@ -1869,6 +1864,7 @@
         errorOutput,
         contains("A value of type 'Null' can't be returned from function 'f' "
             "because it has a return type of 'int'"));
+    expect(errorOutput, contains('Set the lower SDK constraint'));
   }
 
   String _getHelpText({@required bool verbose}) {
diff --git a/runtime/tests/vm/dart/product_aot_kernel_test.dart b/runtime/tests/vm/dart/product_aot_kernel_test.dart
index d46dd14..5372d3d 100644
--- a/runtime/tests/vm/dart/product_aot_kernel_test.dart
+++ b/runtime/tests/vm/dart/product_aot_kernel_test.dart
@@ -9,8 +9,10 @@
 import "dart:io";
 
 import 'package:expect/expect.dart';
+// ignore: import_of_legacy_library_into_null_safe
 import 'package:kernel/binary/ast_from_binary.dart'
     show BinaryBuilderWithMetadata;
+// ignore: import_of_legacy_library_into_null_safe
 import 'package:kernel/kernel.dart';
 import 'package:path/path.dart' as path;
 
diff --git a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
index d46dd14..5372d3d 100644
--- a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
+++ b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
@@ -9,8 +9,10 @@
 import "dart:io";
 
 import 'package:expect/expect.dart';
+// ignore: import_of_legacy_library_into_null_safe
 import 'package:kernel/binary/ast_from_binary.dart'
     show BinaryBuilderWithMetadata;
+// ignore: import_of_legacy_library_into_null_safe
 import 'package:kernel/kernel.dart';
 import 'package:path/path.dart' as path;
 
diff --git a/tools/VERSION b/tools/VERSION
index c4a1625..13e7113 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 12
 PATCH 0
 PRERELEASE 29
-PRERELEASE_PATCH 1
\ No newline at end of file
+PRERELEASE_PATCH 7
\ No newline at end of file
