diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index 0ba93d6..f763f70 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -16,6 +16,7 @@
   analysis_tool:
     path: ../analysis_tool
   html: '>=0.13.1 <0.15.0'
+  meta: '^1.1.8'
   path: '^1.4.1'
   test_reflective_loader: ^0.1.8
   test: ^1.0.0
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 3ff7be2..6d37cfe 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart'
     show DartLinkedEditBuilderImpl;
@@ -20,7 +21,8 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(DartEditBuilderImplTest);
+    defineReflectiveTests(DartEditBuilderImpl_PreNullSafetyTest);
+    defineReflectiveTests(DartEditBuilderImpl_WithNullSafetyTest);
     defineReflectiveTests(DartFileEditBuilderImplTest);
     defineReflectiveTests(DartLinkedEditBuilderImplTest);
     defineReflectiveTests(ImportLibraryTest);
@@ -29,10 +31,96 @@
 }
 
 @reflectiveTest
+class DartEditBuilderImpl_PreNullSafetyTest extends DartEditBuilderImplTest {
+  Future<void> test_writeParameter_covariantAndRequired() async {
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
+    var content = 'class A {}';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addInsertion(content.length - 1, (builder) {
+        builder.writeParameter('a', isCovariant: true, isRequiredNamed: true);
+      });
+    });
+    var edits = getEdits(builder);
+    expect(edits, hasLength(2));
+    expect(edits[0].replacement,
+        equalsIgnoringWhitespace('covariant @required a'));
+    expect(edits[1].replacement,
+        equalsIgnoringWhitespace("import 'package:meta/meta.dart';"));
+  }
+
+  Future<void> test_writeParameter_required_addImport() async {
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
+    var content = 'class A {}';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addInsertion(content.length - 1, (builder) {
+        builder.writeParameter('a', isRequiredNamed: true);
+      });
+    });
+    var edits = getEdits(builder);
+    expect(edits, hasLength(2));
+    expect(edits[0].replacement, equalsIgnoringWhitespace('@required a'));
+    expect(edits[1].replacement,
+        equalsIgnoringWhitespace("import 'package:meta/meta.dart';"));
+  }
+
+  Future<void> test_writeParameter_required_existingImport() async {
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
+    var content = '''
+import 'package:meta/meta.dart';
+
+class A {}
+''';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addInsertion(content.length - 1, (builder) {
+        builder.writeParameter('a', isRequiredNamed: true);
+      });
+    });
+    var edit = getEdit(builder);
+    expect(edit.replacement, equalsIgnoringWhitespace('@required a'));
+  }
+}
+
+@reflectiveTest
+class DartEditBuilderImpl_WithNullSafetyTest extends DartEditBuilderImplTest
+    with WithNullSafetyMixin {
+  Future<void> test_writeParameter_required_keyword() async {
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
+    var content = 'class A {}';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addInsertion(content.length - 1, (builder) {
+        builder.writeParameter('a', isRequiredNamed: true);
+      });
+    });
+    var edit = getEdit(builder);
+    expect(edit.replacement, equalsIgnoringWhitespace('required a'));
+  }
+}
+
 class DartEditBuilderImplTest extends AbstractContextTest
     with DartChangeBuilderMixin {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder(),
+      meta: true,
+    );
+  }
+
   Future<void> test_writeClassDeclaration_interfaces() async {
-    var path = convertPath('/home/test/lib/test.dart');
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
     addSource(path, 'class A {}');
     DartType typeA = await _getType(path, 'A');
 
@@ -604,7 +692,7 @@
 
 }''';
     addSource(path, content);
-    await driver.getResult(path);
+    await resolveFile(path);
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -625,7 +713,7 @@
 
 }''';
     addSource(path, content);
-    await driver.getResult(path);
+    await resolveFile(path);
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -651,7 +739,7 @@
 
 }''';
     addSource(path, content);
-    await driver.getResult(path);
+    await resolveFile(path);
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -671,7 +759,7 @@
 
 }''';
     addSource(path, content);
-    await driver.getResult(path);
+    await resolveFile(path);
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -691,7 +779,7 @@
 }
 class MyClass {}''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
 
     var A = unit.declarations[1] as ClassDeclaration;
 
@@ -722,7 +810,7 @@
 }
 class MyClass {}''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
 
     var A = unit.declarations[1] as ClassDeclaration;
 
@@ -758,7 +846,7 @@
 }
 class MyClass {}''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
 
     var A = unit.declarations[1] as ClassDeclaration;
 
@@ -902,79 +990,6 @@
     expect(edit.replacement, equalsIgnoringWhitespace('covariant a'));
   }
 
-  Future<void> test_writeParameter_covariantAndRequired() async {
-    var path = convertPath('/home/test/lib/test.dart');
-    var content = 'class A {}';
-    addSource(path, content);
-
-    var builder = newBuilder();
-    await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
-        builder.writeParameter('a', isCovariant: true, isRequiredNamed: true);
-      });
-    });
-    var edits = getEdits(builder);
-    expect(edits, hasLength(2));
-    expect(edits[0].replacement,
-        equalsIgnoringWhitespace('covariant @required a'));
-    expect(edits[1].replacement,
-        equalsIgnoringWhitespace("import 'package:meta/meta.dart';"));
-  }
-
-  Future<void> test_writeParameter_required_addImport() async {
-    var path = convertPath('/home/test/lib/test.dart');
-    var content = 'class A {}';
-    addSource(path, content);
-
-    var builder = newBuilder();
-    await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
-        builder.writeParameter('a', isRequiredNamed: true);
-      });
-    });
-    var edits = getEdits(builder);
-    expect(edits, hasLength(2));
-    expect(edits[0].replacement, equalsIgnoringWhitespace('@required a'));
-    expect(edits[1].replacement,
-        equalsIgnoringWhitespace("import 'package:meta/meta.dart';"));
-  }
-
-  Future<void> test_writeParameter_required_existingImport() async {
-    addMetaPackage();
-    var path = convertPath('/home/test/lib/test.dart');
-    var content = '''
-import 'package:meta/meta.dart';
-
-class A {}
-''';
-    addSource(path, content);
-
-    var builder = newBuilder();
-    await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
-        builder.writeParameter('a', isRequiredNamed: true);
-      });
-    });
-    var edit = getEdit(builder);
-    expect(edit.replacement, equalsIgnoringWhitespace('@required a'));
-  }
-
-  Future<void> test_writeParameter_required_keyword() async {
-    createAnalysisOptionsFile(experiments: ['non-nullable']);
-    var path = convertPath('/home/test/lib/test.dart');
-    var content = 'class A {}';
-    addSource(path, content);
-
-    var builder = newBuilder();
-    await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
-        builder.writeParameter('a', isRequiredNamed: true);
-      });
-    });
-    var edit = getEdit(builder);
-    expect(edit.replacement, equalsIgnoringWhitespace('required a'));
-  }
-
   Future<void> test_writeParameter_type() async {
     var path = convertPath('/home/test/lib/test.dart');
     var content = 'class A {}';
@@ -1001,7 +1016,7 @@
 class A {}
 ''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var g = unit.declarations[1] as FunctionDeclaration;
     var body = g.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
@@ -1023,7 +1038,7 @@
     var content = 'f(int a, {bool b = false, String c}) {}';
     addSource(path, content);
 
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters.parameters.map((p) => p.declaredElement);
@@ -1043,7 +1058,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     var content = 'f(int a, [bool b = false, String c]) {}';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters.parameters.map((p) => p.declaredElement);
@@ -1063,7 +1078,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     var content = 'f(int i, String s) {}';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters.parameters.map((p) => p.declaredElement);
@@ -1085,7 +1100,7 @@
   g(s, index: i);
 }''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var f = unit.declarations[0] as FunctionDeclaration;
     var body = f.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
@@ -1108,7 +1123,7 @@
   g(s, i);
 }''';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var f = unit.declarations[0] as FunctionDeclaration;
     var body = f.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
@@ -1125,14 +1140,14 @@
   }
 
   Future<void> test_writeReference_method() async {
-    var aPath = convertPath('/a.dart');
+    var aPath = convertPath('$testPackageRootPath/a.dart');
     addSource(aPath, r'''
 class A {
   void foo() {}
 }
 ''');
 
-    var path = convertPath('/home/test/lib/test.dart');
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
     var content = r'''
 import 'a.dart';
 ''';
@@ -1152,10 +1167,10 @@
   }
 
   Future<void> test_writeReference_topLevel_hasImport_noPrefix() async {
-    var aPath = convertPath('/home/test/lib/a.dart');
+    var aPath = convertPath('$testPackageRootPath/lib/a.dart');
     addSource(aPath, 'const a = 42;');
 
-    var path = convertPath('/home/test/lib/test.dart');
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
     var content = r'''
 import 'a.dart';
 ''';
@@ -1301,7 +1316,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     var content = 'class A {}';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -1514,7 +1529,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     var content = 'class A {}';
     addSource(path, content);
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -1665,14 +1680,14 @@
   }
 
   Future<ClassElement> _getClassElement(String path, String name) async {
-    var result = await driver.getUnitElement(path);
-    return result.element.getType(name);
+    var result = (await resolveFile(path))?.unit;
+    return result.declaredElement.getType(name);
   }
 
   Future<PropertyAccessorElement> _getTopLevelAccessorElement(
       String path, String name) async {
-    var result = await driver.getUnitElement(path);
-    return result.element.accessors.firstWhere((v) => v.name == name);
+    var result = (await resolveFile(path))?.unit;
+    return result.declaredElement.accessors.firstWhere((v) => v.name == name);
   }
 
   Future<InterfaceType> _getType(
@@ -1695,7 +1710,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '''var f = () {}''');
 
-    var resolvedUnit = await driver.getResult(path);
+    var resolvedUnit = await resolveFile(path);
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
@@ -1712,7 +1727,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, 'String f() {}');
 
-    var resolvedUnit = await driver.getResult(path);
+    var resolvedUnit = await resolveFile(path);
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
@@ -1825,7 +1840,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, 'String f() {}');
 
-    var resolvedUnit = await driver.getResult(path);
+    var resolvedUnit = await resolveFile(path);
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var type = findNode.typeAnnotation('String');
 
@@ -1848,7 +1863,7 @@
 class B extends A {}
 class C extends B {}
 ''');
-    var unit = (await driver.getResult(path))?.unit;
+    var unit = (await resolveFile(path))?.unit;
     var classC = unit.declarations[2] as ClassDeclaration;
     var builder = DartLinkedEditBuilderImpl(null);
     builder.addSuperTypesAsSuggestions(
@@ -2869,12 +2884,12 @@
 
     ClassElement targetElement;
     {
-      var unitResult = await driver.getUnitElement(path);
+      var unitResult = (await resolveFile(path))?.unit;
       if (targetMixinName != null) {
-        targetElement = unitResult.element.mixins
+        targetElement = unitResult.declaredElement.mixins
             .firstWhere((e) => e.name == targetMixinName);
       } else {
-        targetElement = unitResult.element.types
+        targetElement = unitResult.declaredElement.types
             .firstWhere((e) => e.name == targetClassName);
       }
     }
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 8b94108..6970a80 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -676,9 +676,9 @@
 
   Future<void> test_MapLiteral_expression() async {
     super.setUp();
-    final experimentStatus =
-        (driver.analysisOptions as analyzer.AnalysisOptionsImpl)
-            .experimentStatus;
+    final experimentStatus = (driverFor(testPackageRootPath).analysisOptions
+            as analyzer.AnalysisOptionsImpl)
+        .experimentStatus;
     if (experimentStatus.control_flow_collections ||
         experimentStatus.spread_collections) {
       // SimpleIdentifier  MapLiteral  VariableDeclaration
@@ -974,7 +974,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     newFile(path, content: content);
 
-    var result = await driver.getResult(path);
+    var result = await resolveFile(path);
     findElement = FindElement(result.unit);
 
     target = CompletionTarget.forOffset(result.unit, offset);
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
index 7fc0527..4703fda 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
@@ -48,7 +48,7 @@
     //
     // Compute the OpType.
     //
-    var resolvedUnit = await driver.getResult(testPath);
+    var resolvedUnit = await resolveFile(testPath);
     var completionTarget =
         CompletionTarget.forOffset(resolvedUnit.unit, completionOffset);
     var opType = OpType.forCompletion(completionTarget, completionOffset);
@@ -102,7 +102,7 @@
   @override
   void setUp() {
     super.setUp();
-    testPath = convertPath('/completionTest.dart');
+    testPath = convertPath('$testPackageRootPath/completionTest.dart');
   }
 }
 
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 4421f8c..e2e289b 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -2,19 +2,27 @@
 // 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/dart/analysis/analysis_context.dart';
+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/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/visitor.dart';
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/testing/element_search.dart';
+import 'package:analyzer/src/test_utilities/mock_packages.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:meta/meta.dart';
 
 /// Finds an [Element] with the given [name].
 Element findChildElement(Element root, String name, [ElementKind kind]) {
@@ -35,49 +43,43 @@
 typedef _ElementVisitorFunction = void Function(Element element);
 
 class AbstractContextTest with ResourceProviderMixin {
-  AnalysisDriver _driver;
+  final ByteStore _byteStore = MemoryByteStore();
 
-  /// The file system specific `/home/test/analysis_options.yaml` path.
-  String get analysisOptionsPath =>
-      convertPath('/home/test/analysis_options.yaml');
+  final Map<String, String> _declaredVariables = {};
 
-  AnalysisDriver get driver => _driver;
+  AnalysisContextCollection _analysisContextCollection;
 
-  AnalysisSession get session => driver.currentSession;
+  List<String> get collectionIncludedPaths => [workspaceRootPath];
 
-  /// The file system specific `/home/test/pubspec.yaml` path.
-  String get testPubspecPath => convertPath('/home/test/pubspec.yaml');
+  AnalysisSession get session => contextFor(testPackageRootPath).currentSession;
 
-  void addMetaPackage() {
-    addPackageFile('meta', 'meta.dart', r'''
-library meta;
+  /// The file system-specific `analysis_options.yaml` path.
+  String get testPackageAnalysisOptionsPath =>
+      convertPath('$testPackageRootPath/analysis_options.yaml');
 
-const Required required = const Required();
+  String get testPackageLanguageVersion => '2.9';
 
-class Required {
-  final String reason;
-  const Required([this.reason]);
-}
-''');
-  }
+  /// The file system-specific `pubspec.yaml` path.
+  String get testPackagePubspecPath =>
+      convertPath('$testPackageRootPath/pubspec.yaml');
 
-  /// Add a new file with the given [pathInLib] to the package with the
-  /// given [packageName]. Then ensure that the test package depends on the
-  /// [packageName].
-  File addPackageFile(String packageName, String pathInLib, String content) {
-    var packagePath = '/.pub-cache/$packageName';
-    _addTestPackageDependency(packageName, packagePath);
-    return newFile('$packagePath/lib/$pathInLib', content: content);
-  }
+  String get testPackageRootPath => convertPath('/home/test');
+
+  String get workspaceRootPath => convertPath('/home');
 
   Source addSource(String path, String content, [Uri uri]) {
     var file = newFile(path, content: content);
     var source = file.createSource(uri);
-    driver.addFile(file.path);
-    driver.changeFile(file.path);
     return source;
   }
 
+  AnalysisContext contextFor(String path) {
+    _createAnalysisContexts();
+
+    path = convertPath(path);
+    return _analysisContextCollection.contextFor(path);
+  }
+
   /// Create an analysis options file based on the given arguments.
   void createAnalysisOptionsFile({List<String> experiments}) {
     var buffer = StringBuffer();
@@ -90,11 +92,12 @@
       }
     }
 
-    newFile(analysisOptionsPath, content: buffer.toString());
+    newFile(testPackageAnalysisOptionsPath, content: buffer.toString());
+  }
 
-    if (_driver != null) {
-      _createDriver();
-    }
+  AnalysisDriver driverFor(String path) {
+    var context = contextFor(path) as DriverBasedAnalysisContext;
+    return context.driver;
   }
 
   Element findElementInUnit(CompilationUnit unit, String name,
@@ -104,53 +107,89 @@
         .single;
   }
 
-  Future<CompilationUnit> resolveLibraryUnit(Source source) async {
-    return (await driver.getResult(source.fullName))?.unit;
+  Future<ResolvedUnitResult> resolveFile(String path) async {
+    return contextFor(path).currentSession.getResolvedUnit(path);
   }
 
   void setUp() {
     MockSdk(resourceProvider: resourceProvider);
 
-    newFolder('/home/test');
-    newFile('/home/test/.packages', content: '''
-test:${toUriStr('/home/test/lib')}
-''');
-
-    _createDriver();
+    newFolder(testPackageRootPath);
+    writeTestPackageConfig();
   }
 
   void tearDown() {
     AnalysisEngine.instance.clearCaches();
   }
 
-  void _addTestPackageDependency(String name, String rootPath) {
-    var packagesFile = getFile('/home/test/.packages');
-    var packagesContent = packagesFile.readAsStringSync();
+  void writePackageConfig(String path, PackageConfigFileBuilder config) {
+    newFile(path, content: config.toContent(toUriStr: toUriStr));
+  }
 
-    // Ignore if there is already the same package dependency.
-    if (packagesContent.contains('$name:file://')) {
+  void writeTestPackageConfig({
+    PackageConfigFileBuilder config,
+    String languageVersion,
+    bool meta = false,
+  }) {
+    if (config == null) {
+      config = PackageConfigFileBuilder();
+    } else {
+      config = config.copy();
+    }
+
+    config.add(
+      name: 'test',
+      rootPath: testPackageRootPath,
+      languageVersion: languageVersion ?? testPackageLanguageVersion,
+    );
+
+    if (meta) {
+      var metaPath = '/packages/meta';
+      MockPackages.addMetaPackageFiles(
+        getFolder(metaPath),
+      );
+      config.add(name: 'meta', rootPath: metaPath);
+    }
+
+    var path = '$testPackageRootPath/.dart_tool/package_config.json';
+    writePackageConfig(path, config);
+  }
+
+  /// Create all analysis contexts in [collectionIncludedPaths].
+  void _createAnalysisContexts() {
+    if (_analysisContextCollection != null) {
       return;
     }
 
-    packagesContent += '$name:${toUri('$rootPath/lib')}\n';
-
-    packagesFile.writeAsStringSync(packagesContent);
-
-    _createDriver();
-  }
-
-  void _createDriver() {
-    var collection = AnalysisContextCollectionImpl(
-      includedPaths: [convertPath('/home')],
+    _analysisContextCollection = AnalysisContextCollectionImpl(
+      byteStore: _byteStore,
+      declaredVariables: _declaredVariables,
       enableIndex: true,
+      includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       sdkPath: convertPath('/sdk'),
     );
+  }
+}
 
-    var testPath = convertPath('/home/test');
-    var context = collection.contextFor(testPath) as DriverBasedAnalysisContext;
+mixin WithNullSafetyMixin on AbstractContextTest {
+  @override
+  String get testPackageLanguageVersion =>
+      Feature.non_nullable.isEnabledByDefault ? '2.12' : '2.11';
 
-    _driver = context.driver;
+  bool get withPackageMeta => false;
+
+  /// TODO(scheglov) https://github.com/dart-lang/sdk/issues/43837
+  /// Remove when Null Safety is enabled by default.
+  @nonVirtual
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageConfig(
+      languageVersion: testPackageLanguageVersion,
+      meta: withPackageMeta,
+    );
+    createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
   }
 }
 
diff --git a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
index 94560b0..4a8ea64 100644
--- a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
@@ -94,7 +94,7 @@
 
   Future<void> resolveTestUnit(String code) async {
     addTestSource(code);
-    var result = await driver.getResult(testFile);
+    var result = await resolveFile(testFile);
     testUnit = (result).unit;
     if (verifyNoTestUnitErrors) {
       expect(result.errors.where((AnalysisError error) {
@@ -114,6 +114,6 @@
   @override
   void setUp() {
     super.setUp();
-    testFile = convertPath('/test.dart');
+    testFile = convertPath('$testPackageRootPath/test.dart');
   }
 }
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 681f5a4..5d75ed1 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -72,7 +72,7 @@
   void setUp() {
     super.setUp();
     source = newFile('/foo/bar.dart').createSource();
-    testFile = convertPath('/test.dart');
+    testFile = convertPath('$testPackageRootPath/lib/test.dart');
   }
 
   void test_convertAnalysisError_contextMessages() {
@@ -200,11 +200,11 @@
   }
 
   Future<void> test_convertElement_class() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 @deprecated
 abstract class _A {}
 class B<K, V> {}''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     {
       var engineElement =
           findElementInUnit(unit, '_A') as analyzer.ClassElement;
@@ -240,11 +240,11 @@
   }
 
   Future<void> test_convertElement_constructor() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 class A {
   const A.myConstructor(int a, [String b]);
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'myConstructor') as analyzer.ConstructorElement;
     // create notification Element
@@ -278,11 +278,11 @@
   }
 
   Future<void> test_convertElement_enum() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 @deprecated
 enum _E1 { one, two }
 enum E2 { three, four }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     {
       var engineElement =
           findElementInUnit(unit, '_E1') as analyzer.ClassElement;
@@ -319,11 +319,11 @@
   }
 
   Future<void> test_convertElement_enumConstant() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 @deprecated
 enum _E1 { one, two }
 enum E2 { three, four }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     {
       var engineElement =
           findElementInUnit(unit, 'one') as analyzer.FieldElement;
@@ -410,11 +410,11 @@
   }
 
   Future<void> test_convertElement_field() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 class A {
   static const myField = 42;
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'myField') as analyzer.FieldElement;
     // create notification Element
@@ -436,10 +436,10 @@
   }
 
   Future<void> test_convertElement_functionTypeAlias() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 typedef int F<T>(String x);
 ''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'F') as analyzer.FunctionTypeAliasElement;
     // create notification Element
@@ -461,10 +461,10 @@
   }
 
   Future<void> test_convertElement_genericTypeAlias_function() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 typedef F<T> = int Function(String x);
 ''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'F') as analyzer.FunctionTypeAliasElement;
     // create notification Element
@@ -486,11 +486,11 @@
   }
 
   Future<void> test_convertElement_getter() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 class A {
   String get myGetter => 42;
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'myGetter', analyzer.ElementKind.GETTER)
             as analyzer.PropertyAccessorElement;
@@ -512,13 +512,13 @@
   }
 
   Future<void> test_convertElement_method() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 class A {
   static List<String> myMethod(int a, {String b, int c}) {
     return null;
   }
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'myMethod') as analyzer.MethodElement;
     // create notification Element
@@ -539,11 +539,11 @@
   }
 
   Future<void> test_convertElement_setter() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 class A {
   set mySetter(String x) {}
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'mySetter', analyzer.ElementKind.SETTER)
             as analyzer.PropertyAccessorElement;
@@ -615,14 +615,14 @@
   }
 
   Future<void> test_fromElement_LABEL() async {
-    var source = addSource(testFile, '''
+    addSource(testFile, '''
 main() {
 myLabel:
   while (true) {
     break myLabel;
   }
 }''');
-    var unit = await resolveLibraryUnit(source);
+    var unit = (await resolveFile(testFile))?.unit;
     var engineElement =
         findElementInUnit(unit, 'myLabel') as analyzer.LabelElement;
     // create notification Element
diff --git a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
index f780177..b1992c4 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
@@ -409,11 +409,11 @@
   }
 
   Future<void> computeLibrariesContaining() {
-    return driver.getResult(testFile).then((result) => null);
+    return resolveFile(testFile).then((result) => null);
   }
 
   Future computeSuggestions() async {
-    var result = await driver.getResult(testFile);
+    var result = await resolveFile(testFile);
     testSource = result.unit.declaredElement.source;
     request =
         DartCompletionRequestImpl(resourceProvider, completionOffset, result);
diff --git a/pkg/analyzer_plugin/test/utilities/completion/inherited_reference_contributor_test.dart b/pkg/analyzer_plugin/test/utilities/completion/inherited_reference_contributor_test.dart
index 927b5b3..49d103d 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/inherited_reference_contributor_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/inherited_reference_contributor_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/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/utilities/completion/completion_core.dart';
 import 'package:analyzer_plugin/utilities/completion/inherited_reference_contributor.dart';
 import 'package:test/test.dart';
@@ -25,9 +26,17 @@
     return InheritedReferenceContributor();
   }
 
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder(),
+      meta: true,
+    );
+  }
+
   /// Sanity check. Permutations tested in local_ref_contributor.
   Future<void> test_ArgDefaults_inherited_method_with_required_named() async {
-    addMetaPackage();
     resolveSource('/home/test/lib/b.dart', '''
 import 'package:meta/meta.dart';
 
diff --git a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
index 186ce86..c268c4e 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_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/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/utilities/completion/completion_core.dart';
 import 'package:analyzer_plugin/utilities/completion/relevance.dart';
@@ -53,6 +54,16 @@
     return TypeMemberContributor();
   }
 
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'myBar', rootPath: '$workspaceRootPath/myBar'),
+      meta: true,
+    );
+  }
+
   Future<void> test_ArgDefaults_method() async {
     addTestSource('''
 class A {
@@ -78,7 +89,6 @@
   }
 
   Future<void> test_ArgDefaults_method_with_optional_positional() async {
-    addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
 
@@ -93,7 +103,6 @@
   }
 
   Future<void> test_ArgDefaults_method_with_required_named() async {
-    addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
 
@@ -1075,10 +1084,10 @@
   }
 
   Future<void> test_Block_unimported() async {
-    addPackageFile('myBar', 'bar.dart', 'class Foo2 { Foo2() { } }');
+    newFile('$workspaceRootPath/myBar/bar.dart',
+        content: 'class Foo2 { Foo2() { } }');
     addSource(
         '/proj/testAB.dart', 'import "package:myBar/bar.dart"; class Foo { }');
-    testFile = convertPath('/proj/completionTest.dart');
     addTestSource('class C {foo(){F^}}');
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 1);
diff --git a/tools/VERSION b/tools/VERSION
index fb8bbdd..c74d0b4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 270
+PRERELEASE 271
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 4490eea..e78a878 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -510,6 +510,12 @@
         "use-sdk": true
       }
     },
+    "dart2js-(linux|mac|win)-chrome-unsound": {
+      "options": {
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-weak-(linux|mac|win)-x64-d8": {
       "options": {
         "builder-tag": "dart2js-weak",
@@ -521,22 +527,47 @@
         "use-sdk": true
       }
     },
+    "dart2js-(linux|win)-firefox-unsound": {
+      "options": {
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-win-ie11": {
       "options": {
         "use-sdk": true,
         "babel": "{\"presets\":[\"es2015\"]}"
       }
     },
+    "dart2js-win-ie11-unsound": {
+      "options": {
+        "use-sdk": true,
+        "babel": "{\"presets\":[\"es2015\"]}",
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-win-edge": {
       "options": {
         "use-sdk": true
       }
     },
+    "dart2js-win-edge-unsound": {
+      "options": {
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-mac-safari": {
       "options": {
         "use-sdk": true
       }
     },
+    "dart2js-mac-safari-unsound": {
+      "options": {
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-minified-csp-(linux|mac|win)-chrome": {
       "options": {
         "minified": true,
@@ -544,12 +575,27 @@
         "use-sdk": true
       }
     },
+    "dart2js-minified-csp-(linux|mac|win)-chrome-unsound": {
+      "options": {
+        "minified": true,
+        "csp": true,
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-minified-(linux|mac|win)-d8": {
       "options": {
         "minified": true,
         "use-sdk": true
       }
     },
+    "dart2js-minified-(linux|mac|win)-d8-unsound": {
+      "options": {
+        "minified": true,
+        "use-sdk": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-production-(linux|mac|win)-d8": {
       "options": {
         "builder-tag": "dart2js_production",
@@ -564,6 +610,12 @@
         "host-checked": true
       }
     },
+    "dart2js-hostasserts-(linux|mac|win)-(ia32|x64)-d8-unsound": {
+      "options": {
+        "host-checked": true,
+        "dart2js-options": ["--no-sound-null-safety"]
+      }
+    },
     "dart2js-hostasserts-weak-(linux|win)-x64-(d8|chrome)": {
       "options": {
         "builder-tag": "dart2js-weak",
@@ -2139,10 +2191,9 @@
         {
           "name": "dart2js observatory-ui tests",
           "arguments": [
-            "-ndart2js-hostasserts-linux-ia32-d8",
+            "-ndart2js-hostasserts-linux-ia32-d8-unsound",
             "--dart2js-batch",
             "--enable-experiment=non-nullable",
-            "--dart2js-options=--no-sound-null-safety",
             "observatory_ui"
           ]
         },
@@ -2212,11 +2263,10 @@
         {
           "name": "dart2js observatory-ui tests",
           "arguments": [
-            "-ndart2js-${system}-${runtime}",
+            "-ndart2js-${system}-${runtime}-unsound",
             "--dart2js-batch",
             "--reset-browser-configuration",
             "--enable-experiment=non-nullable",
-            "--dart2js-options=--no-sound-null-safety",
             "observatory_ui"
           ]
         },
@@ -2267,10 +2317,9 @@
         {
           "name": "dart2js observatory-ui tests",
           "arguments": [
-            "-ndart2js-minified-linux-d8",
+            "-ndart2js-minified-linux-d8-unsound",
             "--dart2js-batch",
             "--enable-experiment=non-nullable",
-            "--dart2js-options=--no-sound-null-safety",
             "observatory_ui"
           ]
         },
@@ -2340,11 +2389,10 @@
         {
           "name": "dart2js observatory-ui tests",
           "arguments": [
-            "-ndart2js-minified-csp-linux-chrome",
+            "-ndart2js-minified-csp-linux-chrome-unsound",
             "--dart2js-batch",
             "--reset-browser-configuration",
             "--enable-experiment=non-nullable",
-            "--dart2js-options=--no-sound-null-safety",
             "observatory_ui"
           ]
         },
