diff --git a/pkg/analyzer/lib/src/test_utilities/package_config_file_builder.dart b/pkg/analyzer/lib/src/test_utilities/package_config_file_builder.dart
new file mode 100644
index 0000000..4f19b2e
--- /dev/null
+++ b/pkg/analyzer/lib/src/test_utilities/package_config_file_builder.dart
@@ -0,0 +1,103 @@
+// 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:meta/meta.dart';
+
+/// Helper for building `.dart_tool/package_config.json` files.
+///
+/// See accepted/future-releases/language-versioning/package-config-file-v2.md
+/// in https://github.com/dart-lang/language/
+class PackageConfigFileBuilder {
+  final List<_PackageDescription> _packages = [];
+
+  /// The [rootPath] will be given to `toUriStr` of [toContent] to produce
+  /// the corresponding `file://` URI, normally a POSIX path.
+  ///
+  /// The [packageUri] is optional, a URI reference, resolved against the
+  /// file URI of the [rootPath]. The result must be inside the [rootPath].
+  void add({
+    @required String name,
+    @required String rootPath,
+    String packageUri = 'lib/',
+    String languageVersion,
+  }) {
+    if (_packages.any((e) => e.name == name)) {
+      throw StateError('Already added: $name');
+    }
+    _packages.add(
+      _PackageDescription(
+        name: name,
+        rootPath: rootPath,
+        packageUri: packageUri,
+        languageVersion: languageVersion,
+      ),
+    );
+  }
+
+  PackageConfigFileBuilder copy() {
+    var copy = PackageConfigFileBuilder();
+    copy._packages.addAll(_packages);
+    return copy;
+  }
+
+  String toContent({
+    @required String Function(String) toUriStr,
+  }) {
+    var buffer = StringBuffer();
+
+    buffer.writeln('{');
+
+    var prefix = ' ' * 2;
+    buffer.writeln('$prefix"configVersion": 2,');
+    buffer.writeln('$prefix"packages": [');
+
+    for (var i = 0; i < _packages.length; i++) {
+      var package = _packages[i];
+
+      var prefix = ' ' * 4;
+      buffer.writeln('$prefix{');
+
+      prefix = ' ' * 6;
+      buffer.writeln('$prefix"name": "${package.name}",');
+
+      var rootUri = toUriStr(package.rootPath);
+      buffer.write('$prefix"rootUri": "$rootUri"');
+
+      if (package.packageUri != null) {
+        buffer.writeln(',');
+        buffer.write('$prefix"packageUri": "${package.packageUri}"');
+      }
+
+      if (package.languageVersion != null) {
+        buffer.writeln(',');
+        buffer.write('$prefix"languageVersion": "${package.languageVersion}"');
+      }
+
+      buffer.writeln();
+
+      prefix = ' ' * 4;
+      buffer.write(prefix);
+      buffer.writeln(i < _packages.length - 1 ? '},' : '}');
+    }
+
+    buffer.writeln('  ]');
+    buffer.writeln('}');
+
+    return buffer.toString();
+  }
+}
+
+class _PackageDescription {
+  final String name;
+  final String rootPath;
+  final String packageUri;
+  final String languageVersion;
+
+  _PackageDescription({
+    @required this.name,
+    @required this.rootPath,
+    @required this.packageUri,
+    @required this.languageVersion,
+  });
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index 6f7ba44..16d21b17 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
 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:analyzer/src/workspace/basic.dart';
 import 'package:analyzer/src/workspace/bazel.dart';
@@ -28,6 +29,8 @@
 import 'context_collection_resolution_caching.dart';
 import 'resolution.dart';
 
+export 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
+
 class AnalysisOptionsFileConfig {
   final List<String> experiments;
   final bool implicitCasts;
@@ -248,79 +251,6 @@
   }
 }
 
-class PackageConfigFileBuilder {
-  final List<_PackageDescription> _packages = [];
-
-  void add({
-    @required String name,
-    @required String rootPath,
-    String packageUri = 'lib/',
-    String languageVersion,
-  }) {
-    if (_packages.any((e) => e.name == name)) {
-      throw StateError('Already added: $name');
-    }
-    _packages.add(
-      _PackageDescription(
-        name: name,
-        rootPath: rootPath,
-        packageUri: packageUri,
-        languageVersion: languageVersion,
-      ),
-    );
-  }
-
-  String toContent(String Function(String) toUriStr) {
-    var buffer = StringBuffer();
-
-    buffer.writeln('{');
-
-    var prefix = ' ' * 2;
-    buffer.writeln('$prefix"configVersion": 2,');
-    buffer.writeln('$prefix"packages": [');
-
-    for (var i = 0; i < _packages.length; i++) {
-      var package = _packages[i];
-
-      var prefix = ' ' * 4;
-      buffer.writeln('$prefix{');
-
-      prefix = ' ' * 6;
-      buffer.writeln('$prefix"name": "${package.name}",');
-
-      var rootUri = toUriStr(package.rootPath);
-      buffer.write('$prefix"rootUri": "$rootUri"');
-
-      if (package.packageUri != null) {
-        buffer.writeln(',');
-        buffer.write('$prefix"packageUri": "${package.packageUri}"');
-      }
-
-      if (package.languageVersion != null) {
-        buffer.writeln(',');
-        buffer.write('$prefix"languageVersion": "${package.languageVersion}"');
-      }
-
-      buffer.writeln();
-
-      prefix = ' ' * 4;
-      buffer.write(prefix);
-      buffer.writeln(i < _packages.length - 1 ? '},' : '}');
-    }
-
-    buffer.writeln('  ]');
-    buffer.writeln('}');
-
-    return buffer.toString();
-  }
-
-  PackageConfigFileBuilder _copy() {
-    var copy = PackageConfigFileBuilder();
-    copy._packages.addAll(_packages);
-    return copy;
-  }
-}
-
 class PubPackageResolutionTest extends ContextResolutionTest {
   AnalysisOptionsImpl get analysisOptions {
     var path = convertPath(testPackageRootPath);
@@ -351,7 +281,12 @@
   }
 
   void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr));
+    newFile(
+      path,
+      content: config.toContent(
+        toUriStr: toUriStr,
+      ),
+    );
   }
 
   void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
@@ -367,7 +302,7 @@
     bool js = false,
     bool meta = false,
   }) {
-    config = config._copy();
+    config = config.copy();
 
     config.add(
       name: 'test',
@@ -446,17 +381,3 @@
     );
   }
 }
-
-class _PackageDescription {
-  final String name;
-  final String rootPath;
-  final String packageUri;
-  final String languageVersion;
-
-  _PackageDescription({
-    @required this.name,
-    @required this.rootPath,
-    @required this.packageUri,
-    @required this.languageVersion,
-  });
-}
