diff --git a/DEPS b/DEPS
index 41f4b08..cc10c05 100644
--- a/DEPS
+++ b/DEPS
@@ -90,7 +90,7 @@
   "cli_util_rev": "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
   "clock_rev": "f594d86da123015186d5680b0d0e8255c52fc162",
   "collection_rev": "e1407da23b9f17400b3a905aafe2b8fa10db3d86",
-  "convert_rev": "e063fdca4bebffecbb5e6aa5525995120982d9ce",
+  "convert_rev": "00b251529c074df394b3391c7e3eea3dd9e5778e",
   "crypto_rev": "4297d240b0e1e780ec0a9eab23eaf1ad491f3e68",
   "csslib_rev": "518761b166974537f334dbf264e7f56cb157a96a",
 
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 05bdf23..5189728 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -534,6 +534,11 @@
 
   @mustCallSuper
   void shutdown() {
+    // For now we record plugins only on shutdown. We might want to record them
+    // every time the set of plugins changes, in which case we'll need to listen
+    // to the `PluginManager.pluginsChanged` stream.
+    analyticsManager.changedPlugins(pluginManager);
+
     pubPackageService.shutdown();
     analyticsManager.shutdown();
   }
diff --git a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
index 125c1c2..12fb6cb 100644
--- a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/src/analytics/google_analytics_manager.dart';
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:telemetry/telemetry.dart';
 
 /// An interface for managing and reporting analytics.
@@ -19,6 +20,9 @@
   factory AnalyticsManager.forAnalytics(Analytics analytics) =
       GoogleAnalyticsManager;
 
+  /// Record that the set of plugins known to the [pluginManager] has changed.
+  void changedPlugins(PluginManager pluginManager);
+
   /// Record that the given [response] was sent to the client.
   void sentResponse({required Response response});
 
diff --git a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
index cf3b4b1..95b14ff 100644
--- a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
@@ -2,10 +2,13 @@
 // 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 'dart:convert';
+
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/analytics/percentile_calculator.dart';
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:telemetry/telemetry.dart';
 
 /// An implementation of [AnalyticsManager] that's appropriate to use when
@@ -18,6 +21,8 @@
   /// been invoked.
   _SessionData? _sessionData;
 
+  final _PluginData _pluginData = _PluginData();
+
   /// A map from the id of a request to data about the request.
   final Map<String, _ActiveRequestData> _activeRequests = {};
 
@@ -30,6 +35,11 @@
   GoogleAnalyticsManager(this.analytics);
 
   @override
+  void changedPlugins(PluginManager pluginManager) {
+    _pluginData.recordPlugins(pluginManager);
+  }
+
+  @override
   void sentResponse({required Response response}) {
     var sendTime = DateTime.now();
     _recordResponseData(response.id, sendTime);
@@ -59,10 +69,7 @@
       'clientId': sessionData.clientId,
       'sdkVersion': sessionData.sdkVersion,
       'duration': duration.toString(),
-      // TODO(brianwilkerson) Report a list of the names of the plugins that
-      //  were loaded, or possibly a map from plugin names to the number of
-      //  analysis roots in which the plugins were loaded.
-      'plugins': '',
+      'plugins': _pluginData.usageCountData,
     });
     // Send response data.
     for (var data in _completedRequests.values) {
@@ -148,6 +155,48 @@
   _ActiveRequestData(this.requestName, this.clientRequestTime, this.startTime);
 }
 
+/// Data about the plugins associated with the context roots.
+class _PluginData {
+  /// The number of times that plugin information has been recorded.
+  int recordCount = 0;
+
+  /// A table mapping the ids of running plugins to the number of context roots
+  /// associated with each of the plugins.
+  Map<String, PercentileCalculator> usageCounts = {};
+
+  /// Initialize a newly created holder of plugin data.
+  _PluginData();
+
+  String get usageCountData {
+    return json.encode({
+      'recordCount': recordCount,
+      'rootCounts': _encodeUsageCounts(),
+    });
+  }
+
+  /// Use the [pluginManager] to record data about the plugins that are
+  /// currently running.
+  void recordPlugins(PluginManager pluginManager) {
+    recordCount++;
+    var plugins = pluginManager.plugins;
+    for (var i = 0; i < plugins.length; i++) {
+      var info = plugins[i];
+      usageCounts
+          .putIfAbsent(info.pluginId, () => PercentileCalculator())
+          .addValue(info.contextRoots.length);
+    }
+  }
+
+  /// Return an encoding of the [usageCounts].
+  Map<String, String> _encodeUsageCounts() {
+    var encoded = <String, String>{};
+    for (var entry in usageCounts.entries) {
+      encoded[entry.key] = entry.value.toAnalyticsString();
+    }
+    return encoded;
+  }
+}
+
 /// Data about the requests that have been responded to that have the same name.
 class _RequestData {
   /// The name of the requests.
diff --git a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
index 36f46a5..d52e59d 100644
--- a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
@@ -5,11 +5,15 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/src/analytics/analytics_manager.dart';
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
 
 /// An implementation of [AnalyticsManager] that's appropriate to use when
 /// analytics have not been enabled.
 class NoopAnalyticsManager implements AnalyticsManager {
   @override
+  void changedPlugins(PluginManager pluginManager) {}
+
+  @override
   void sentResponse({required Response response}) {}
 
   @override
diff --git a/pkg/analysis_server_client/README.md b/pkg/analysis_server_client/README.md
index c4cc469..7ae141c 100644
--- a/pkg/analysis_server_client/README.md
+++ b/pkg/analysis_server_client/README.md
@@ -1,6 +1,7 @@
-# analysis_server_client
+[![pub package](https://img.shields.io/pub/v/analysis_server_client.svg)](https://pub.dev/packages/analysis_server_client)
+[![package publisher](https://img.shields.io/pub/publisher/analysis_server_client.svg)](https://pub.dev/packages/analysis_server_client/publisher)
 
-analysis_server_client is a client wrapper over Analysis Server.
+`package:analysis_server_client` is a client wrapper over the Analysis Server.
 
 ## Overview
 
diff --git a/pkg/analyzer/README.md b/pkg/analyzer/README.md
index 6f5102e..e1bcdad 100644
--- a/pkg/analyzer/README.md
+++ b/pkg/analyzer/README.md
@@ -1,4 +1,5 @@
-# Analyzer for Dart
+[![pub package](https://img.shields.io/pub/v/analyzer.svg)](https://pub.dev/packages/analyzer)
+[![package publisher](https://img.shields.io/pub/publisher/analyzer.svg)](https://pub.dev/packages/analyzer/publisher)
 
 This package provides a library that performs static analysis
 of Dart code. It is useful for tool integration and embedding.
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
index 98d9538..adb53ee 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -19,6 +19,7 @@
     correctionMessage:
         "Try removing all type parameters, removing all members, and adding "
         "one const constructor.",
+    hasPublishedDocs: true,
   );
 
   ///  No parameters.
@@ -28,6 +29,7 @@
         "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
         "ABI to a 'NativeType' integer with a fixed size.",
     correctionMessage: "Try removing the extra annotation.",
+    hasPublishedDocs: true,
   );
 
   ///  No parameters.
@@ -37,6 +39,7 @@
         "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
         "ABI to a 'NativeType' integer with a fixed size.",
     correctionMessage: "Try adding an annotation.",
+    hasPublishedDocs: true,
   );
 
   ///  No parameters.
@@ -47,6 +50,7 @@
     correctionMessage:
         "Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', "
         "'Uint16', 'UInt32', or 'Uint64'.",
+    hasPublishedDocs: true,
   );
 
   ///  No parameters.
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
index cfccb2c..4d4efcf 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
@@ -187,6 +187,7 @@
     "The operator x ~/ y is more efficient than (x / y).toInt().",
     correctionMessage:
         "Try re-writing the expression to use the '~/' operator.",
+    hasPublishedDocs: true,
   );
 
   ///  No parameters.
@@ -543,6 +544,7 @@
     "The annotation '@nonVirtual' can only be applied to a concrete instance "
         "member.",
     correctionMessage: "Try removing '@nonVirtual'.",
+    hasPublishedDocs: true,
   );
 
   ///  This hint is generated anywhere where an instance member annotated with
@@ -555,6 +557,7 @@
     'INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER',
     "The member '{0}' is declared non-virtual in '{1}' and can't be overridden "
         "in subclasses.",
+    hasPublishedDocs: true,
   );
 
   ///  This hint is generated anywhere where `@required` annotates a named
@@ -601,6 +604,7 @@
     'INVALID_SEALED_ANNOTATION',
     "The annotation '@sealed' can only be applied to classes.",
     correctionMessage: "Try removing the '@sealed' annotation.",
+    hasPublishedDocs: true,
   );
 
   ///  Parameters:
@@ -651,6 +655,7 @@
   static const HintCode INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER = HintCode(
     'INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
     "The member '{0}' can only be used within '{1}' or a test.",
+    hasPublishedDocs: true,
   );
 
   ///  This hint is generated anywhere where a private declaration is annotated
@@ -1177,6 +1182,7 @@
     "The keyword 'final' isn't necessary because the parameter is implicitly "
         "'final'.",
     correctionMessage: "Try removing the 'final'.",
+    hasPublishedDocs: true,
   );
 
   ///  Parameters:
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 7410c77..b725ca4 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -2762,6 +2762,7 @@
     'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
     "Deferred classes can't be used as superclass constraints.",
     correctionMessage: "Try changing the import to not be deferred.",
+    hasPublishedDocs: true,
   );
 
   ///  Parameters:
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 16b3fff..ba11178d 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -8717,6 +8717,7 @@
   MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
     problemMessage: "Deferred classes can't be used as superclass constraints."
     correctionMessage: Try changing the import to not be deferred.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15641,6 +15642,7 @@
   ABI_SPECIFIC_INTEGER_INVALID:
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type parameters."
     correctionMessage: Try removing all type parameters, removing all members, and adding one const constructor.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15732,6 +15734,7 @@
   ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try removing the extra annotation.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15771,6 +15774,7 @@
   ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try adding an annotation.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15807,6 +15811,7 @@
   ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
     problemMessage: "Only mappings to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported."
     correctionMessage: Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', or 'Uint64'.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15861,7 +15866,7 @@
       subclass of `Struct` and has the type `Pointer` also has an annotation
       associated with it.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -15906,7 +15911,7 @@
       The analyzer also produces this diagnostic when the value of the
       `exceptionalReturn` argument of `Pointer.fromFunction`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -15960,7 +15965,7 @@
       The analyzer produces this diagnostic when a subclass of either `Struct`
       or `Union` implements `Finalizable`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -15997,7 +16002,7 @@
       The analyzer produces this diagnostic when a subclass of either `Struct`
       or `Union` is instantiated using a generative constructor.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16053,7 +16058,7 @@
       `Union` doesn't have any fields. Having an empty `Struct` or `Union`
       isn't supported.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16106,7 +16111,7 @@
       `Struct` has more than one annotation describing the native type of the
       field.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16146,7 +16151,7 @@
       `Struct` has more than one annotation describing the size of the native
       array.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16208,7 +16213,7 @@
       The analyzer produces this diagnostic when a constructor in a subclass of
       either `Struct` or `Union` has one or more field initializers.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16253,7 +16258,7 @@
       The analyzer produces this diagnostic when a field in a subclass of
       `Struct` has an initializer.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16292,7 +16297,7 @@
       The analyzer produces this diagnostic when a field in a subclass of either
       `Struct` or `Union` isn't marked as being `external`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16333,7 +16338,7 @@
       The analyzer produces this diagnostic when a subclass of either `Struct`
       or `Union` has a type parameter.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16372,7 +16377,7 @@
       value) and the type to be returned from the invocation is either `void`,
       `Handle` or `Pointer`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16420,7 +16425,7 @@
       `Struct` has a type other than `int`, `double`, `Array`, `Pointer`, or
       subtype of `Struct` or `Union`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16474,7 +16479,7 @@
       In all of these cases, leaf calls are only supported for the types `bool`,
       `int`, `float`, `double`, and, as a return type `void`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16524,7 +16529,7 @@
       `DynamicLibrary.lookupFunction` is `true` and the function that would be
       returned would have a parameter of type `Handle`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16573,7 +16578,7 @@
       The analyzer produces this diagnostic when the annotation on a field in a
       subclass of `Struct` or `Union` doesn't match the Dart type of the field.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16629,7 +16634,7 @@
       C types, and the annotation specifies which of the compatible C types the
       field represents.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16669,7 +16674,7 @@
       return value) when the type to be returned from the invocation is neither
       `void`, `Handle`, nor `Pointer`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16715,7 +16720,7 @@
       an explicit type, and the type must either be `int`, `double`, `Pointer`,
       or a subclass of either `Struct` or `Union`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16760,7 +16765,7 @@
       `Struct` or `Union` has a type of `Array` but doesn't have a single
       `Array` annotation indicating the dimensions of the array.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16802,7 +16807,7 @@
       `Pointer.fromFunction` or `DynamicLibrary.lookupFunction` has a type
       argument(whether explicit or inferred) that isn't a native function type.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16856,7 +16861,7 @@
       - In an invocation of `DynamicLibrary.lookupFunction` where the first type
         argument isn't a supertype of the second type argument.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16919,7 +16924,7 @@
       are required to be known at compile time, but a type parameter, whose
       value can't be known at compile time, is used as a type argument.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -16967,7 +16972,7 @@
       invoked on a pointer to a native function, but the signature of the native
       function isn't a valid C function signature.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17015,7 +17020,7 @@
       The analyzer produces this diagnostic when a dimension given in an `Array`
       annotation is less than or equal to zero (`0`).
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17058,7 +17063,7 @@
       `Double`, `Pointer`, or subtype of `Struct`, `Union`, or
       `AbiSpecificInteger`.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17097,7 +17102,7 @@
       The analyzer produces this diagnostic when a subclass of `Struct` has more
       than one `Packed` annotation.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17137,7 +17142,7 @@
       The analyzer produces this diagnostic when the argument to the `Packed`
       annotation isn't one of the allowed values: 1, 2, 4, 8, or 16.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17181,7 +17186,7 @@
       of `Struct` and the field's type is either not packed or is packed less
       tightly.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17262,7 +17267,7 @@
       specified in an `Array` annotation doesn't match the number of nested
       arrays specified by the type of a field.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17320,7 +17325,7 @@
       `Struct` and `Union` are the only FFI classes that can be subtyped, and
       then only by extending them.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17387,7 +17392,7 @@
       mixes in a class that extends either `Struct` or `Union`. Classes can only
       extend either `Struct` or `Union` directly.
 
-      For more information about FFI, see [C interop using dart:ffi][].
+      For more information about FFI, see [C interop using dart:ffi][ffi].
 
       #### Example
 
@@ -17929,6 +17934,7 @@
   DIVISION_OPTIMIZATION:
     problemMessage: The operator x ~/ y is more efficient than (x / y).toInt().
     correctionMessage: "Try re-writing the expression to use the '~/' operator."
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -18810,6 +18816,7 @@
   INVALID_NON_VIRTUAL_ANNOTATION:
     problemMessage: "The annotation '@nonVirtual' can only be applied to a concrete instance member."
     correctionMessage: Try removing '@nonVirtual'.
+    hasPublishedDocs: true
     comment: |-
       This hint is generated anywhere where `@nonVirtual` annotates something
       other than a non-abstract instance member in a class or mixin.
@@ -18889,6 +18896,7 @@
       ```
   INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
     problemMessage: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
+    hasPublishedDocs: true
     comment: |-
       This hint is generated anywhere where an instance member annotated with
       `@nonVirtual` is overridden in a subclass.
@@ -19048,6 +19056,7 @@
   INVALID_SEALED_ANNOTATION:
     problemMessage: "The annotation '@sealed' can only be applied to classes."
     correctionMessage: Try removing the '@sealed' annotation.
+    hasPublishedDocs: true
     comment: |-
       This hint is generated anywhere where `@sealed` annotates something other
       than a class.
@@ -19185,6 +19194,7 @@
       1: the name of the defining class
   INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
     problemMessage: "The member '{0}' can only be used within '{1}' or a test."
+    hasPublishedDocs: true
     comment: |-
       This hint is generated anywhere where a member annotated with
       `@visibleForTesting` is used outside the defining library, or a test.
@@ -20899,7 +20909,7 @@
   UNNECESSARY_FINAL:
     problemMessage: The keyword 'final' isn't necessary because the parameter is implicitly 'final'.
     correctionMessage: Try removing the 'final'.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 14ab1b7..17e8bb1e 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -283,6 +283,7 @@
 doesn't conform to the language specification or
 that might work in unexpected ways.
 
+[ffi]: https://dart.dev/guides/libraries/c-interop
 [meta-doNotStore]: https://pub.dev/documentation/meta/latest/meta/doNotStore-constant.html
 [meta-factory]: https://pub.dev/documentation/meta/latest/meta/factory-constant.html
 [meta-immutable]: https://pub.dev/documentation/meta/latest/meta/immutable-constant.html
@@ -901,7 +902,7 @@
 subclass of `Struct` and has the type `Pointer` also has an annotation
 associated with it.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -943,7 +944,7 @@
 The analyzer also produces this diagnostic when the value of the
 `exceptionalReturn` argument of `Pointer.fromFunction`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -2216,7 +2217,7 @@
 The analyzer produces this diagnostic when a subclass of either `Struct`
 or `Union` implements `Finalizable`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -3233,7 +3234,7 @@
 The analyzer produces this diagnostic when a subclass of either `Struct`
 or `Union` is instantiated using a generative constructor.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -4486,7 +4487,7 @@
 `Union` doesn't have any fields. Having an empty `Struct` or `Union`
 isn't supported.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -5544,7 +5545,7 @@
 `Struct` has more than one annotation describing the native type of the
 field.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -5660,7 +5661,7 @@
 `Struct` has more than one annotation describing the size of the native
 array.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -5875,7 +5876,7 @@
 The analyzer produces this diagnostic when a constructor in a subclass of
 either `Struct` or `Union` has one or more field initializers.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -6140,7 +6141,7 @@
 The analyzer produces this diagnostic when a field in a subclass of
 `Struct` has an initializer.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -6178,7 +6179,7 @@
 The analyzer produces this diagnostic when a field in a subclass of either
 `Struct` or `Union` isn't marked as being `external`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -6604,7 +6605,7 @@
 The analyzer produces this diagnostic when a subclass of either `Struct`
 or `Union` has a type parameter.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -8193,7 +8194,7 @@
 value) and the type to be returned from the invocation is either `void`,
 `Handle` or `Pointer`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -8516,7 +8517,7 @@
 `Struct` has a type other than `int`, `double`, `Array`, `Pointer`, or
 subtype of `Struct` or `Union`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10154,7 +10155,7 @@
 In all of these cases, leaf calls are only supported for the types `bool`,
 `int`, `float`, `double`, and, as a return type `void`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10203,7 +10204,7 @@
 `DynamicLibrary.lookupFunction` is `true` and the function that would be
 returned would have a parameter of type `Handle`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10530,7 +10531,7 @@
 The analyzer produces this diagnostic when the annotation on a field in a
 subclass of `Struct` or `Union` doesn't match the Dart type of the field.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10583,7 +10584,7 @@
 C types, and the annotation specifies which of the compatible C types the
 field represents.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10754,7 +10755,7 @@
 return value) when the type to be returned from the invocation is neither
 `void`, `Handle`, nor `Pointer`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10798,7 +10799,7 @@
 an explicit type, and the type must either be `int`, `double`, `Pointer`,
 or a subclass of either `Struct` or `Union`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -10973,7 +10974,7 @@
 `Struct` or `Union` has a type of `Array` but doesn't have a single
 `Array` annotation indicating the dimensions of the array.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -11614,7 +11615,7 @@
 `Pointer.fromFunction` or `DynamicLibrary.lookupFunction` has a type
 argument(whether explicit or inferred) that isn't a native function type.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -11663,7 +11664,7 @@
 - In an invocation of `DynamicLibrary.lookupFunction` where the first type
   argument isn't a supertype of the second type argument.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -12544,7 +12545,7 @@
 are required to be known at compile time, but a type parameter, whose
 value can't be known at compile time, is used as a type argument.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -12825,7 +12826,7 @@
 invoked on a pointer to a native function, but the signature of the native
 function isn't a valid C function signature.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -12872,7 +12873,7 @@
 The analyzer produces this diagnostic when a dimension given in an `Array`
 annotation is less than or equal to zero (`0`).
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -12913,7 +12914,7 @@
 `Double`, `Pointer`, or subtype of `Struct`, `Union`, or
 `AbiSpecificInteger`.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -14048,7 +14049,7 @@
 The analyzer produces this diagnostic when a subclass of `Struct` has more
 than one `Packed` annotation.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -14087,7 +14088,7 @@
 The analyzer produces this diagnostic when the argument to the `Packed`
 annotation isn't one of the allowed values: 1, 2, 4, 8, or 16.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -14128,7 +14129,7 @@
 of `Struct` and the field's type is either not packed or is packed less
 tightly.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -16393,7 +16394,7 @@
 specified in an `Array` annotation doesn't match the number of nested
 arrays specified by the type of a field.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -16613,7 +16614,7 @@
 `Struct` and `Union` are the only FFI classes that can be subtyped, and
 then only by extending them.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
@@ -16715,7 +16716,7 @@
 mixes in a class that extends either `Struct` or `Union`. Classes can only
 extend either `Struct` or `Union` directly.
 
-For more information about FFI, see [C interop using dart:ffi][].
+For more information about FFI, see [C interop using dart:ffi][ffi].
 
 #### Example
 
diff --git a/pkg/analyzer/tool/diagnostics/generate.dart b/pkg/analyzer/tool/diagnostics/generate.dart
index f326cd70..f2a462b 100644
--- a/pkg/analyzer/tool/diagnostics/generate.dart
+++ b/pkg/analyzer/tool/diagnostics/generate.dart
@@ -192,6 +192,7 @@
 doesn't conform to the language specification or
 that might work in unexpected ways.
 
+[ffi]: https://dart.dev/guides/libraries/c-interop
 [meta-doNotStore]: https://pub.dev/documentation/meta/latest/meta/doNotStore-constant.html
 [meta-factory]: https://pub.dev/documentation/meta/latest/meta/factory-constant.html
 [meta-immutable]: https://pub.dev/documentation/meta/latest/meta/immutable-constant.html
diff --git a/pkg/analyzer_plugin/README.md b/pkg/analyzer_plugin/README.md
index 55fa2fa..ef7af1b 100644
--- a/pkg/analyzer_plugin/README.md
+++ b/pkg/analyzer_plugin/README.md
@@ -1,4 +1,5 @@
-# analyzer_plugin
+[![pub package](https://img.shields.io/pub/v/analyzer_plugin.svg)](https://pub.dev/packages/analyzer_plugin)
+[![package publisher](https://img.shields.io/pub/publisher/analyzer_plugin.svg)](https://pub.dev/packages/analyzer_plugin/publisher)
 
 A framework for building plugins for the analysis server.
 
diff --git a/pkg/dart2js_info/lib/deferred_library_check.dart b/pkg/dart2js_info/lib/deferred_library_check.dart
index 111cb10..07d53dc 100644
--- a/pkg/dart2js_info/lib/deferred_library_check.dart
+++ b/pkg/dart2js_info/lib/deferred_library_check.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.11
-
 /// This tool checks that the output from dart2js meets a given specification,
 /// given in a YAML file. The format of the YAML file is:
 ///
@@ -96,14 +94,14 @@
       var packageName = _getPackageName(lib.uri);
       if (!mentionedPackages.contains(packageName)) return;
       var containingParts = <String>[];
-      if (info.outputUnit.name == 'main') {
+      if (info.outputUnit!.name == 'main') {
         containingParts.add('main');
       } else {
-        containingParts.addAll(info.outputUnit.imports);
+        containingParts.addAll(info.outputUnit!.imports);
       }
       for (var part in containingParts) {
         (actualIncludedPackages[part] ??= {}).add(packageName);
-        if (excludedPackages[part].contains(packageName)) {
+        if (excludedPackages[part]!.contains(packageName)) {
           failures.add(_PartContainedExcludedPackage(part, packageName, info));
         }
       }
@@ -116,7 +114,7 @@
   includedPackages.forEach((part, packages) {
     for (var package in packages) {
       if (!actualIncludedPackages.containsKey(part) ||
-          !actualIncludedPackages[part].contains(package)) {
+          !actualIncludedPackages[part]!.contains(package)) {
         failures.add(_PartDidNotContainPackage(part, package));
       }
     }
@@ -124,8 +122,8 @@
   return failures;
 }
 
-LibraryInfo _getLibraryOf(Info info) {
-  var current = info;
+LibraryInfo? _getLibraryOf(Info info) {
+  Info? current = info;
   while (current is! LibraryInfo) {
     if (current == null) {
       return null;
diff --git a/pkg/dart2js_info/lib/src/common_element.dart b/pkg/dart2js_info/lib/src/common_element.dart
index c2b94e5..ff3c055 100644
--- a/pkg/dart2js_info/lib/src/common_element.dart
+++ b/pkg/dart2js_info/lib/src/common_element.dart
@@ -1,5 +1,3 @@
-// @dart = 2.11
-
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/util.dart';
 
@@ -22,7 +20,7 @@
   final AllInfo _old;
   final AllInfo _new;
 
-  BasicInfo _other;
+  late BasicInfo _other;
 
   List<CommonElement> commonElements = <CommonElement>[];
 
@@ -110,7 +108,7 @@
     for (var oldInfo in oldInfos) {
       var oldName = longName(oldInfo, useLibraryUri: true);
       if (newNames.containsKey(oldName)) {
-        _other = newNames[oldName];
+        _other = newNames[oldName]!;
         oldInfo.accept(this);
       }
     }
diff --git a/pkg/dart2js_info/lib/src/diff.dart b/pkg/dart2js_info/lib/src/diff.dart
index 4093dac..bcd6431 100644
--- a/pkg/dart2js_info/lib/src/diff.dart
+++ b/pkg/dart2js_info/lib/src/diff.dart
@@ -1,5 +1,3 @@
-// @dart = 2.11
-
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/util.dart';
 
@@ -40,7 +38,7 @@
   final AllInfo _old;
   final AllInfo _new;
 
-  BasicInfo _other;
+  BasicInfo? _other;
 
   List<Diff> diffs = <Diff>[];
 
@@ -142,10 +140,8 @@
   }
 
   bool _isDeferred(BasicInfo info) {
-    var outputUnit = info.outputUnit;
-    return outputUnit.name != null &&
-        outputUnit.name.isNotEmpty &&
-        outputUnit.name != 'main';
+    var outputUnit = info.outputUnit!;
+    return outputUnit.name.isNotEmpty && outputUnit.name != 'main';
   }
 
   void _diffList(List<BasicInfo> oldInfos, List<BasicInfo> newInfos) {
@@ -159,15 +155,15 @@
     }
     for (var oldName in oldNames.keys) {
       if (newNames[oldName] == null) {
-        diffs.add(RemoveDiff(oldNames[oldName]));
+        diffs.add(RemoveDiff(oldNames[oldName]!));
       } else {
         _other = newNames[oldName];
-        oldNames[oldName].accept(this);
+        oldNames[oldName]!.accept(this);
       }
     }
     for (var newName in newNames.keys) {
       if (oldNames[newName] == null) {
-        diffs.add(AddDiff(newNames[newName]));
+        diffs.add(AddDiff(newNames[newName]!));
       }
     }
   }
diff --git a/pkg/dart2js_info/lib/src/string_edit_buffer.dart b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
index 4f552c0..35257df 100644
--- a/pkg/dart2js_info/lib/src/string_edit_buffer.dart
+++ b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.11
-
 /// Defines [StringEditBuffer], a buffer that can be used to apply edits on a
 /// string.
 // TODO(sigmund): this should move to a separate package.
@@ -24,7 +22,7 @@
 
   /// Edit the original text, replacing text on the range [begin] and
   /// exclusive [end] with the [replacement] string.
-  void replace(int begin, int end, String replacement, [int sortId]) {
+  void replace(int begin, int end, String replacement, [int? sortId]) {
     _edits.add(_StringEdit(begin, end, replacement, sortId));
   }
 
@@ -97,7 +95,7 @@
   // String to insert
   final String string;
 
-  _StringEdit(this.begin, this.end, this.string, [int sortId])
+  _StringEdit(this.begin, this.end, this.string, [int? sortId])
       : sortId = sortId ?? begin;
 
   int get length => end - begin;
diff --git a/pkg/dart2js_info/lib/src/table.dart b/pkg/dart2js_info/lib/src/table.dart
index b092ec8..40a205a 100644
--- a/pkg/dart2js_info/lib/src/table.dart
+++ b/pkg/dart2js_info/lib/src/table.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.11
-
 library dart2js_info.src.table;
 
 import 'dart:math' show max;
@@ -37,7 +35,7 @@
   bool _sealed = false;
 
   /// Current row being built by [addEntry].
-  List _currentRow;
+  List? _currentRow;
 
   /// Add a column with the given [name].
   void declareColumn(String name,
@@ -67,17 +65,17 @@
       _sealed = true;
       _currentRow = [];
     }
-    int pos = _currentRow.length;
+    int pos = _currentRow!.length;
     assert(pos < _totalColumns);
 
     widths[pos] = max(widths[pos], '$entry'.length + 1);
-    _currentRow.add('$entry');
+    _currentRow!.add('$entry');
     if (entry is int && entry != 0) {
       _skipped[pos] = false;
     }
 
     if (pos + 1 == _totalColumns) {
-      rows.add(_currentRow);
+      rows.add(_currentRow!);
       _currentRow = [];
     }
   }
diff --git a/pkg/dart2js_info/lib/src/util.dart b/pkg/dart2js_info/lib/src/util.dart
index ec8245a..f509ea6 100644
--- a/pkg/dart2js_info/lib/src/util.dart
+++ b/pkg/dart2js_info/lib/src/util.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.11
-
 library dart2js_info.src.util;
 
 import 'package:dart2js_info/info.dart';
@@ -26,8 +24,9 @@
     for (var g in f.uses) {
       graph.addEdge(f, g.target);
     }
-    if (info.dependencies[f] != null) {
-      for (var g in info.dependencies[f]) {
+    final dependencies = info.dependencies[f];
+    if (dependencies != null) {
+      for (var g in dependencies) {
         graph.addEdge(f, g);
       }
     }
@@ -38,8 +37,9 @@
     for (var g in f.uses) {
       graph.addEdge(f, g.target);
     }
-    if (info.dependencies[f] != null) {
-      for (var g in info.dependencies[f]) {
+    final dependencies = info.dependencies[f];
+    if (dependencies != null) {
+      for (var g in dependencies) {
         graph.addEdge(f, g);
       }
     }
@@ -54,8 +54,8 @@
 // TODO(sigmund): guarantee that the name is actually unique.
 String qualifiedName(Info f) {
   assert(f is ClosureInfo || f is ClassInfo);
-  var element = f;
-  String name;
+  Info? element = f;
+  String? name;
   while (element != null) {
     if (element is LibraryInfo) {
       name = '${element.uri}:$name';
@@ -71,10 +71,11 @@
 /// Provide a unique long name associated with [info].
 // TODO(sigmund): guarantee that the name is actually unique.
 String longName(Info info, {bool useLibraryUri = false, bool forId = false}) {
-  var infoPath = [];
-  while (info != null) {
+  final infoPath = <Info>[];
+  Info? localInfo = info;
+  while (localInfo != null) {
     infoPath.add(info);
-    info = info.parent;
+    localInfo = localInfo.parent;
   }
   var sb = StringBuffer();
   var first = true;
@@ -113,9 +114,9 @@
 }
 
 /// Provides the package name associated with [info] or null otherwise.
-String packageName(Info info) {
+String? packageName(Info info) {
   while (info.parent != null) {
-    info = info.parent;
+    info = info.parent!;
   }
   if (info is LibraryInfo) {
     if (info.uri.isScheme('package')) {
@@ -129,9 +130,9 @@
 ///
 /// This corresponds to the package name, a Dart core library, 'file' for loose
 /// files, or null otherwise.
-String libraryGroupName(Info info) {
+String? libraryGroupName(Info info) {
   while (info.parent != null) {
-    info = info.parent;
+    info = info.parent!;
   }
   if (info is LibraryInfo) {
     if (info.uri.isScheme('package')) {
diff --git a/pkg/dartdev/lib/src/commands/language_server.dart b/pkg/dartdev/lib/src/commands/language_server.dart
index 65eca06..20d2722 100644
--- a/pkg/dartdev/lib/src/commands/language_server.dart
+++ b/pkg/dartdev/lib/src/commands/language_server.dart
@@ -8,7 +8,9 @@
 import 'package:args/args.dart';
 
 import '../core.dart';
+import '../sdk.dart';
 import '../utils.dart';
+import '../vm_interop_handler.dart';
 
 class LanguageServerCommand extends DartdevCommand {
   static const String commandName = 'language-server';
@@ -38,11 +40,14 @@
 
   @override
   Future<int> run() async {
-    final driver = server_driver.Driver();
-    driver.start(
-      argResults!.arguments,
-      defaultToLsp: true,
-    );
+    if (!Sdk.checkArtifactExists(sdk.analysisServerSnapshot)) return 255;
+
+    VmInteropHandler.run(
+        sdk.analysisServerSnapshot,
+        [
+          ...argResults!.arguments,
+        ],
+        packageConfigOverride: null);
 
     // The server will continue to run past the return from this method.
     //
diff --git a/pkg/dds/README.md b/pkg/dds/README.md
index ef1be7d..86d4e7c 100644
--- a/pkg/dds/README.md
+++ b/pkg/dds/README.md
@@ -1,3 +1,6 @@
+[![pub package](https://img.shields.io/pub/v/dds.svg)](https://pub.dev/packages/dds)
+[![package publisher](https://img.shields.io/pub/publisher/dds.svg)](https://pub.dev/packages/dds/publisher)
+
 A package used to spawn the Dart Developer Service (DDS), which is used to communicate with a Dart VM Service instance and provide extended functionality to the core VM Service Protocol.
 
 # Functionality
diff --git a/pkg/dds_service_extensions/README.md b/pkg/dds_service_extensions/README.md
index 9f50e4f..2b06db6 100644
--- a/pkg/dds_service_extensions/README.md
+++ b/pkg/dds_service_extensions/README.md
@@ -1,3 +1,6 @@
+[![pub package](https://img.shields.io/pub/v/dds_service_extensions.svg)](https://pub.dev/packages/dds_service_extensions)
+[![package publisher](https://img.shields.io/pub/publisher/dds_service_extensions.svg)](https://pub.dev/packages/dds_service_extensions/publisher)
+
 A package used to expand the `package:vm_service` interface with support for RPCs added in the [Dart Developer Service (DDS) protocol][dds-protocol].
 
 [dds-protocol]: https://github.com/dart-lang/sdk/blob/main/pkg/dds/dds_protocol.md
diff --git a/pkg/js/README.md b/pkg/js/README.md
index 4f75675..cf4be84 100644
--- a/pkg/js/README.md
+++ b/pkg/js/README.md
@@ -1,3 +1,6 @@
+[![pub package](https://img.shields.io/pub/v/js.svg)](https://pub.dev/packages/js)
+[![package publisher](https://img.shields.io/pub/publisher/js.svg)](https://pub.dev/packages/js/publisher)
+
 Use this package when you want to call JavaScript APIs from Dart code, or vice versa.
 
 This package's main library, `js`, provides annotations and functions
diff --git a/pkg/vm_service/README.md b/pkg/vm_service/README.md
index 6c47181..9308377 100644
--- a/pkg/vm_service/README.md
+++ b/pkg/vm_service/README.md
@@ -1,6 +1,5 @@
-# vm_service
-
 [![pub package](https://img.shields.io/pub/v/vm_service.svg)](https://pub.dev/packages/vm_service)
+[![package publisher](https://img.shields.io/pub/publisher/vm_service.svg)](https://pub.dev/packages/vm_service/publisher)
 
 A library to access the VM Service Protocol.
 
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index da71473..2b20b44 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -1873,12 +1873,12 @@
     // in the current loading unit).
     ObjectPoolPtr pool = code->untag()->object_pool_;
     if (s->kind() == Snapshot::kFullAOT) {
-      TracePool(s, pool, /*only_call_targets=*/is_deferred);
+      TracePool(s, pool, /*only_code=*/is_deferred);
     } else {
       if (s->InCurrentLoadingUnitOrRoot(pool)) {
         s->Push(pool);
       } else {
-        TracePool(s, pool, /*only_call_targets=*/true);
+        TracePool(s, pool, /*only_code=*/true);
       }
     }
 
@@ -1946,7 +1946,7 @@
 #endif
   }
 
-  void TracePool(Serializer* s, ObjectPoolPtr pool, bool only_call_targets) {
+  void TracePool(Serializer* s, ObjectPoolPtr pool, bool only_code) {
     if (pool == ObjectPool::null()) {
       return;
     }
@@ -1957,18 +1957,8 @@
       auto entry_type = ObjectPool::TypeBits::decode(entry_bits[i]);
       if (entry_type == ObjectPool::EntryType::kTaggedObject) {
         const ObjectPtr target = pool->untag()->data()[i].raw_obj_;
-        // A field is a call target because its initializer may be called
-        // indirectly by passing the field to the runtime. A const closure
-        // is a call target because its function may be called indirectly
-        // via a closure call.
-        if (!only_call_targets || target->IsCode() || target->IsFunction() ||
-            target->IsField() || target->IsClosure()) {
+        if (!only_code || target->IsCode()) {
           s->Push(target);
-        } else {
-          intptr_t cid = target->GetClassIdMayBeSmi();
-          if (cid >= kNumPredefinedCids) {
-            s->Push(s->isolate_group()->class_table()->At(cid));
-          }
         }
       }
     }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 6c6a023..ee450a6 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -424,7 +424,6 @@
       typeparams_to_retain_(),
       consts_to_retain_(),
       seen_table_selectors_(),
-      api_uses_(),
       error_(Error::Handle()),
       get_runtime_type_is_unique_(false) {
   ASSERT(Precompiler::singleton_ == NULL);
@@ -663,8 +662,6 @@
       ProgramVisitor::Dedup(T);
     }
 
-    PruneDictionaries();
-
     if (retained_reasons_writer_ != nullptr) {
       reasons_writer.Write();
       retained_reasons_writer_ = nullptr;
@@ -755,7 +752,6 @@
     }
   }
   if (!main.IsNull()) {
-    AddApiUse(main);
     if (lib.LookupLocalFunction(name) == Function::null()) {
       retain_root_library_caches_ = true;
     }
@@ -1468,14 +1464,6 @@
   return seen_table_selectors_.HasKey(selector_id);
 }
 
-void Precompiler::AddApiUse(const Object& obj) {
-  api_uses_.Insert(&Object::ZoneHandle(Z, obj.ptr()));
-}
-
-bool Precompiler::HasApiUse(const Object& obj) {
-  return api_uses_.HasKey(&obj);
-}
-
 void Precompiler::AddInstantiatedClass(const Class& cls) {
   if (is_tracing()) {
     tracer_->WriteClassInstantiationRef(cls);
@@ -1535,7 +1523,6 @@
                                  &reusable_object_handle) ==
             EntryPointPragma::kAlways) {
           AddInstantiatedClass(cls);
-          AddApiUse(cls);
         }
       }
 
@@ -1554,7 +1541,6 @@
           if (pragma == EntryPointPragma::kNever) continue;
 
           AddField(field);
-          AddApiUse(field);
 
           if (!field.is_static()) {
             if (pragma != EntryPointPragma::kSetterOnly) {
@@ -1583,7 +1569,6 @@
               type == EntryPointPragma::kCallOnly) {
             functions_with_entry_point_pragmas_.Insert(function);
             AddFunction(function, RetainReasons::kEntryPointPragma);
-            AddApiUse(function);
           }
 
           if ((type == EntryPointPragma::kAlways ||
@@ -1593,16 +1578,10 @@
             function2 = function.ImplicitClosureFunction();
             functions_with_entry_point_pragmas_.Insert(function2);
             AddFunction(function2, RetainReasons::kEntryPointPragma);
-
-            // Not `function2`: Dart_GetField will lookup the regular function
-            // and get the implicit closure function from that.
-            AddApiUse(function);
           }
 
           if (function.IsGenerativeConstructor()) {
             AddInstantiatedClass(cls);
-            AddApiUse(function);
-            AddApiUse(cls);
           }
         }
         if (function.kind() == UntaggedFunction::kImplicitGetter &&
@@ -1612,7 +1591,6 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitGetter);
-              AddApiUse(function);
             }
           }
         }
@@ -1623,7 +1601,6 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitSetter);
-              AddApiUse(function);
             }
           }
         }
@@ -1634,15 +1611,9 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitStaticGetter);
-              AddApiUse(function);
             }
           }
         }
-        if (function.is_native()) {
-          // The embedder will need to lookup this library to provide the native
-          // resolver, even if there are no embedder calls into the library.
-          AddApiUse(lib);
-        }
       }
 
       implicit_getters = GrowableObjectArray::null();
@@ -3098,166 +3069,6 @@
   }
 }
 
-void Precompiler::PruneDictionaries() {
-  // PRODUCT-only: pruning interferes with various uses of the service protocol,
-  // including heap analysis tools.
-#if defined(PRODUCT)
-  class PruneDictionariesVisitor {
-   public:
-    GrowableObjectArrayPtr PruneLibraries(
-        const GrowableObjectArray& libraries) {
-      for (intptr_t i = 0; i < libraries.Length(); i++) {
-        lib_ ^= libraries.At(i);
-        bool retain = PruneLibrary(lib_);
-        if (retain) {
-          lib_.set_index(retained_libraries_.Length());
-          retained_libraries_.Add(lib_);
-        } else {
-          lib_.set_index(-1);
-          lib_.set_private_key(null_string_);
-        }
-      }
-
-      Library::RegisterLibraries(Thread::Current(), retained_libraries_);
-      return retained_libraries_.ptr();
-    }
-
-    bool PruneLibrary(const Library& lib) {
-      dict_ = lib.dictionary();
-      intptr_t dict_size = dict_.Length() - 1;
-      intptr_t used = 0;
-      for (intptr_t i = 0; i < dict_size; i++) {
-        entry_ = dict_.At(i);
-        if (entry_.IsNull()) continue;
-
-        bool retain = false;
-        if (entry_.IsClass()) {
-          // dart:async: Fix async stack trace lookups in dart:async to annotate
-          // entry points or fail gracefully.
-          // dart:core, dart:collection, dart:typed_data: Isolate messaging
-          // between groups allows any class in these libraries.
-          retain = PruneClass(Class::Cast(entry_)) ||
-                   (lib.url() == Symbols::DartAsync().ptr()) ||
-                   (lib.url() == Symbols::DartCore().ptr()) ||
-                   (lib.url() == Symbols::DartCollection().ptr()) ||
-                   (lib.url() == Symbols::DartTypedData().ptr());
-        } else if (entry_.IsFunction() || entry_.IsField()) {
-          retain = precompiler_->HasApiUse(entry_);
-        } else {
-          FATAL("Unexpected library entry: %s", entry_.ToCString());
-        }
-        if (retain) {
-          used++;
-        } else {
-          dict_.SetAt(i, Object::null_object());
-        }
-      }
-      lib.RehashDictionary(dict_, used * 4 / 3 + 1);
-
-      bool retain = used > 0;
-      cls_ = lib.toplevel_class();
-      if (PruneClass(cls_)) {
-        retain = true;
-      }
-      if (lib.is_dart_scheme()) {
-        retain = true;
-      }
-      if (lib.ptr() == root_lib_.ptr()) {
-        retain = true;
-      }
-      if (precompiler_->HasApiUse(lib)) {
-        retain = true;
-      }
-      return retain;
-    }
-
-    bool PruneClass(const Class& cls) {
-      bool retain = precompiler_->HasApiUse(cls);
-
-      functions_ = cls.functions();
-      retained_functions_ = GrowableObjectArray::New();
-      for (intptr_t i = 0; i < functions_.Length(); i++) {
-        function_ ^= functions_.At(i);
-        if (precompiler_->HasApiUse(function_)) {
-          retained_functions_.Add(function_);
-          retain = true;
-        } else if (precompiler_->functions_called_dynamically_.ContainsKey(
-                       function_)) {
-          retained_functions_.Add(function_);
-          // No `retain = true`: the function must appear in the method
-          // dictionary for lookup, but the class may still be removed from the
-          // library.
-        }
-      }
-      if (retained_functions_.Length() > 0) {
-        functions_ = Array::MakeFixedLength(retained_functions_);
-        cls.SetFunctions(functions_);
-      } else {
-        cls.SetFunctions(Object::empty_array());
-      }
-
-      fields_ = cls.fields();
-      retained_fields_ = GrowableObjectArray::New();
-      for (intptr_t i = 0; i < fields_.Length(); i++) {
-        field_ ^= fields_.At(i);
-        if (precompiler_->HasApiUse(field_)) {
-          retained_fields_.Add(field_);
-          retain = true;
-        }
-      }
-      if (retained_fields_.Length() > 0) {
-        fields_ = Array::MakeFixedLength(retained_fields_);
-        cls.SetFields(fields_);
-      } else {
-        cls.SetFields(Object::empty_array());
-      }
-
-      return retain;
-    }
-
-    explicit PruneDictionariesVisitor(Precompiler* precompiler, Zone* zone)
-        : precompiler_(precompiler),
-          lib_(Library::Handle(zone)),
-          dict_(Array::Handle(zone)),
-          entry_(Object::Handle(zone)),
-          cls_(Class::Handle(zone)),
-          functions_(Array::Handle(zone)),
-          fields_(Array::Handle(zone)),
-          function_(Function::Handle(zone)),
-          field_(Field::Handle(zone)),
-          retained_functions_(GrowableObjectArray::Handle(zone)),
-          retained_fields_(GrowableObjectArray::Handle(zone)),
-          retained_libraries_(
-              GrowableObjectArray::Handle(zone, GrowableObjectArray::New())),
-          root_lib_(Library::Handle(
-              zone,
-              precompiler->isolate_group()->object_store()->root_library())),
-          null_string_(String::Handle(zone)) {}
-
-   private:
-    Precompiler* const precompiler_;
-    Library& lib_;
-    Array& dict_;
-    Object& entry_;
-    Class& cls_;
-    Array& functions_;
-    Array& fields_;
-    Function& function_;
-    Field& field_;
-    GrowableObjectArray& retained_functions_;
-    GrowableObjectArray& retained_fields_;
-    const GrowableObjectArray& retained_libraries_;
-    const Library& root_lib_;
-    const String& null_string_;
-  };
-
-  HANDLESCOPE(T);
-  SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
-  PruneDictionariesVisitor visitor(this, Z);
-  libraries_ = visitor.PruneLibraries(libraries_);
-#endif  // defined(PRODUCT)
-}
-
 // Traits for the HashTable template.
 struct CodeKeyTraits {
   static uint32_t Hash(const Object& key) { return Code::Cast(key).Size(); }
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index 50df9e7..4e0d211 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -210,37 +210,6 @@
 
 typedef DirectChainedHashMap<TypeArgumentsKeyValueTrait> TypeArgumentsSet;
 
-class ProgramElementKeyValueTrait {
- public:
-  // Typedefs needed for the DirectChainedHashMap template.
-  typedef const Object* Key;
-  typedef const Object* Value;
-  typedef const Object* Pair;
-
-  static Key KeyOf(Pair kv) { return kv; }
-
-  static Value ValueOf(Pair kv) { return kv; }
-
-  static inline uword Hash(Key key) {
-    if (key->IsFunction()) {
-      return Function::Cast(*key).Hash();
-    } else if (key->IsField()) {
-      return Field::Cast(*key).kernel_offset();
-    } else if (key->IsClass()) {
-      return Class::Cast(*key).kernel_offset();
-    } else if (key->IsLibrary()) {
-      return Library::Cast(*key).index();
-    }
-    FATAL("Unexpected type: %s\n", key->ToCString());
-  }
-
-  static inline bool IsKeyEqual(Pair pair, Key key) {
-    return pair->ptr() == key->ptr();
-  }
-};
-
-typedef DirectChainedHashMap<ProgramElementKeyValueTrait> ProgramElementSet;
-
 class InstanceKeyValueTrait {
  public:
   // Typedefs needed for the DirectChainedHashMap template.
@@ -352,8 +321,6 @@
   bool IsHitByTableSelector(const Function& function);
   // Returns the reason if the function must be retained, otherwise nullptr.
   const char* MustRetainFunction(const Function& function);
-  void AddApiUse(const Object& obj);
-  bool HasApiUse(const Object& obj);
 
   void ProcessFunction(const Function& function);
   void CheckForNewDynamicFunctions();
@@ -376,7 +343,6 @@
   void DropClasses();
   void DropLibraries();
   void DiscardCodeObjects();
-  void PruneDictionaries();
 
   DEBUG_ONLY(FunctionPtr FindUnvisitedRetainedFunction());
 
@@ -427,7 +393,6 @@
   TypeParameterSet typeparams_to_retain_;
   InstanceSet consts_to_retain_;
   TableSelectorSet seen_table_selectors_;
-  ProgramElementSet api_uses_;
   Error& error_;
 
   compiler::DispatchTableGenerator* dispatch_table_generator_;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 7dba48a..d52cc58 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1891,11 +1891,9 @@
   Zone* zone = thread->zone();
   intptr_t unit_count = helper_->ReadUInt();
   Array& loading_units = Array::Handle(zone, Array::New(unit_count + 1));
-  Array& loading_unit_uris = Array::Handle(zone, Array::New(unit_count + 1));
   LoadingUnit& unit = LoadingUnit::Handle(zone);
   LoadingUnit& parent = LoadingUnit::Handle(zone);
   Library& lib = Library::Handle(zone);
-  Array& uris = Array::Handle(zone);
 
   for (int i = 0; i < unit_count; i++) {
     intptr_t id = helper_->ReadUInt();
@@ -1909,7 +1907,6 @@
     unit.set_parent(parent);
 
     intptr_t library_count = helper_->ReadUInt();
-    uris = Array::New(library_count);
     for (intptr_t j = 0; j < library_count; j++) {
       const String& uri =
           translation_helper_.DartSymbolPlain(helper_->ReadStringReference());
@@ -1918,18 +1915,14 @@
         FATAL1("Missing library: %s\n", uri.ToCString());
       }
       lib.set_loading_unit(unit);
-      uris.SetAt(j, uri);
     }
 
     loading_units.SetAt(id, unit);
-    loading_unit_uris.SetAt(id, uris);
   }
 
   ObjectStore* object_store = IG->object_store();
   ASSERT(object_store->loading_units() == Array::null());
   object_store->set_loading_units(loading_units);
-  ASSERT(object_store->loading_unit_uris() == Array::null());
-  object_store->set_loading_unit_uris(loading_unit_uris);
 }
 
 CallSiteAttributesMetadataHelper::CallSiteAttributesMetadataHelper(
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index f8b05d2..4f03fb7a 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6728,12 +6728,24 @@
   DARTSCOPE(Thread::Current());
   API_TIMELINE_DURATION(T);
 
-  const Array& loading_units =
-      Array::Handle(Z, T->isolate_group()->object_store()->loading_unit_uris());
-  if (loading_unit_id >= 0 && loading_unit_id < loading_units.Length()) {
-    return Api::NewHandle(T, loading_units.At(loading_unit_id));
+  const GrowableObjectArray& result =
+      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
+  const GrowableObjectArray& libs = GrowableObjectArray::Handle(
+      Z, T->isolate_group()->object_store()->libraries());
+  Library& lib = Library::Handle(Z);
+  LoadingUnit& unit = LoadingUnit::Handle(Z);
+  String& uri = String::Handle(Z);
+  for (intptr_t i = 0; i < libs.Length(); i++) {
+    lib ^= libs.At(i);
+    unit = lib.loading_unit();
+    if (unit.IsNull() || (unit.id() != loading_unit_id)) {
+      continue;
+    }
+    uri = lib.url();
+    result.Add(uri);
   }
-  return Api::NewError("Invalid loading_unit_id");
+
+  return Api::NewHandle(T, Array::MakeFixedLength(result));
 #endif
 }
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 9e867c4..46d3e1b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -12448,12 +12448,8 @@
   untag()->set_name(name.ptr());
 }
 
-void Library::set_url(const String& url) const {
-  untag()->set_url(url.ptr());
-}
-
-void Library::set_private_key(const String& key) const {
-  untag()->set_private_key(key.ptr());
+void Library::set_url(const String& name) const {
+  untag()->set_url(name.ptr());
 }
 
 void Library::set_kernel_data(const ExternalTypedData& data) const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index dd1699a..6f226c3 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5109,7 +5109,6 @@
   // the name and url.
   void set_name(const String& name) const;
   void set_url(const String& url) const;
-  void set_private_key(const String& key) const;
 
   void set_num_imports(intptr_t value) const;
   void set_flags(uint8_t flags) const;
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 718e61d..674d1b4 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -261,7 +261,6 @@
   RW(Array, dispatch_table_code_entries)                                       \
   RW(GrowableObjectArray, instructions_tables)                                 \
   RW(Array, obfuscation_map)                                                   \
-  RW(Array, loading_unit_uris)                                                 \
   RW(GrowableObjectArray, ffi_callback_functions)                              \
   RW(Class, ffi_pointer_class)                                                 \
   RW(Class, ffi_native_type_class)                                             \
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index a70896e..d0bddf8 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -2543,7 +2543,6 @@
 }
 
 @patch
-@pragma("vm:entry-point")
 class ResourceHandle {
   factory ResourceHandle.fromFile(RandomAccessFile file) {
     int fd = (file as _RandomAccessFile).fd;
diff --git a/tools/VERSION b/tools/VERSION
index 92973e7..72045af 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 157
+PRERELEASE 158
 PRERELEASE_PATCH 0
\ No newline at end of file
