diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index b5ad7d0..e78d7af 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-04-06T11:20:39.965073",
+  "generated": "2021-04-06T16:51:44.463801",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -659,7 +659,7 @@
       "name": "telemetry",
       "rootUri": "../pkg/telemetry",
       "packageUri": "lib/",
-      "languageVersion": "1.0"
+      "languageVersion": "2.12"
     },
     {
       "name": "term_glyph",
@@ -728,12 +728,6 @@
       "languageVersion": "2.12"
     },
     {
-      "name": "uuid",
-      "rootUri": "../third_party/pkg/uuid",
-      "packageUri": "lib/",
-      "languageVersion": "2.0"
-    },
-    {
       "name": "vector_math",
       "rootUri": "../third_party/pkg/vector_math",
       "packageUri": "lib/",
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 1a75652..388fbdc 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -229,6 +229,8 @@
         return const [lsp.SymbolKind.Enum];
       case server.DeclarationKind.ENUM_CONSTANT:
         return const [lsp.SymbolKind.EnumMember, lsp.SymbolKind.Enum];
+      case server.DeclarationKind.EXTENSION:
+        return const [lsp.SymbolKind.Class];
       case server.DeclarationKind.FIELD:
         return const [lsp.SymbolKind.Field];
       case server.DeclarationKind.FUNCTION:
diff --git a/pkg/analysis_server/lib/src/search/workspace_symbols.dart b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
index a256782..ec02b7e 100644
--- a/pkg/analysis_server/lib/src/search/workspace_symbols.dart
+++ b/pkg/analysis_server/lib/src/search/workspace_symbols.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.9
-
 import 'dart:collection';
 
 import 'package:analyzer/source/line_info.dart';
@@ -20,9 +18,9 @@
   final int column;
   final int codeOffset;
   final int codeLength;
-  final String className;
-  final String mixinName;
-  final String parameters;
+  final String? className;
+  final String? mixinName;
+  final String? parameters;
 
   Declaration(
     this.fileIndex,
@@ -46,6 +44,7 @@
   CONSTRUCTOR,
   ENUM,
   ENUM_CONSTANT,
+  EXTENSION,
   FIELD,
   FUNCTION,
   FUNCTION_TYPE_ALIAS,
@@ -62,8 +61,8 @@
   WorkspaceSymbols(this.tracker);
 
   List<Declaration> declarations(
-      RegExp regExp, int maxResults, LinkedHashSet<String> files,
-      {String onlyForFile}) {
+      RegExp? regExp, int? maxResults, LinkedHashSet<String> files,
+      {String? onlyForFile}) {
     _doTrackerWork();
 
     var declarations = <Declaration>[];
@@ -107,14 +106,21 @@
         return;
       }
 
-      String className;
-      if (declaration.parent?.kind == ad.DeclarationKind.CLASS) {
-        className = declaration.parent.name;
+      var parent = declaration.parent;
+
+      String? className;
+      if (parent != null && parent.kind == ad.DeclarationKind.CLASS) {
+        className = parent.name;
       }
 
-      String mixinName;
-      if (declaration.parent?.kind == ad.DeclarationKind.MIXIN) {
-        mixinName = declaration.parent.name;
+      String? mixinName;
+      if (parent != null && parent.kind == ad.DeclarationKind.MIXIN) {
+        mixinName = parent.name;
+      }
+
+      var topKind = _getTopKind(declaration.kind);
+      if (topKind == null) {
+        return;
       }
 
       declarations.add(
@@ -122,7 +128,7 @@
           getPathIndex(path),
           declaration.lineInfo,
           name,
-          _getTopKind(declaration.kind),
+          topKind,
           declaration.locationOffset,
           declaration.locationStartLine,
           declaration.locationStartColumn,
@@ -154,7 +160,7 @@
     }
   }
 
-  static DeclarationKind _getTopKind(ad.DeclarationKind kind) {
+  static DeclarationKind? _getTopKind(ad.DeclarationKind kind) {
     switch (kind) {
       case ad.DeclarationKind.CLASS:
         return DeclarationKind.CLASS;
@@ -166,6 +172,8 @@
         return DeclarationKind.ENUM;
       case ad.DeclarationKind.ENUM_CONSTANT:
         return DeclarationKind.ENUM_CONSTANT;
+      case ad.DeclarationKind.EXTENSION:
+        return DeclarationKind.EXTENSION;
       case ad.DeclarationKind.FIELD:
         return DeclarationKind.FIELD;
       case ad.DeclarationKind.FUNCTION_TYPE_ALIAS:
diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
index d20b42e..915a8a3 100644
--- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
@@ -31,7 +31,7 @@
 
     final namedExtensions =
         symbols.firstWhere((s) => s.name == 'StringExtensions');
-    expect(namedExtensions.kind, equals(SymbolKind.Obj));
+    expect(namedExtensions.kind, equals(SymbolKind.Class));
     expect(namedExtensions.containerName, isNull);
 
     // Unnamed extensions are not returned in Workspace Symbols.
diff --git a/pkg/telemetry/lib/crash_reporting.dart b/pkg/telemetry/lib/crash_reporting.dart
index 7b4b958..63d549b 100644
--- a/pkg/telemetry/lib/crash_reporting.dart
+++ b/pkg/telemetry/lib/crash_reporting.dart
@@ -54,7 +54,7 @@
   CrashReportSender._(
     this.crashProductId,
     this.shouldSend, {
-    http.Client httpClient,
+    http.Client? httpClient,
     String endpointPath = _crashEndpointPathStaging,
   })  : _httpClient = httpClient ?? new http.Client(),
         _baseUri = new Uri(
@@ -64,7 +64,7 @@
   CrashReportSender.staging(
     String crashProductId,
     EnablementCallback shouldSend, {
-    http.Client httpClient,
+    http.Client? httpClient,
   }) : this._(crashProductId, shouldSend,
             httpClient: httpClient, endpointPath: _crashEndpointPathStaging);
 
@@ -72,7 +72,7 @@
   CrashReportSender.prod(
     String crashProductId,
     EnablementCallback shouldSend, {
-    http.Client httpClient,
+    http.Client? httpClient,
   }) : this._(crashProductId, shouldSend,
             httpClient: httpClient, endpointPath: _crashEndpointPathProd);
 
@@ -86,7 +86,7 @@
     dynamic error,
     StackTrace stackTrace, {
     List<CrashReportAttachment> attachments = const [],
-    String comment,
+    String? comment,
   }) async {
     if (!shouldSend()) {
       return;
@@ -192,9 +192,9 @@
   final String _value;
 
   CrashReportAttachment.string({
-    @required String field,
-    @required String value,
-  })  : _field = field,
+    required String field,
+    required String value,
+  })   : _field = field,
         _value = value;
 }
 
diff --git a/pkg/telemetry/lib/src/utils.dart b/pkg/telemetry/lib/src/utils.dart
index 04ddace..2c38478 100644
--- a/pkg/telemetry/lib/src/utils.dart
+++ b/pkg/telemetry/lib/src/utils.dart
@@ -14,13 +14,10 @@
   final int bucketSize;
   final Duration replenishDuration;
 
-  int _drops;
-  int _lastReplenish;
+  late int _drops = bucketSize;
+  late int _lastReplenish = new DateTime.now().millisecondsSinceEpoch;
 
-  ThrottlingBucket(this.bucketSize, this.replenishDuration) {
-    _drops = bucketSize;
-    _lastReplenish = new DateTime.now().millisecondsSinceEpoch;
-  }
+  ThrottlingBucket(this.bucketSize, this.replenishDuration);
 
   bool removeDrop() {
     _checkReplenish();
diff --git a/pkg/telemetry/lib/telemetry.dart b/pkg/telemetry/lib/telemetry.dart
index 0c28c7d..e76e622 100644
--- a/pkg/telemetry/lib/telemetry.dart
+++ b/pkg/telemetry/lib/telemetry.dart
@@ -59,7 +59,7 @@
   bool disableForSession = false,
   bool forceEnabled = false,
 }) {
-  Directory dir = getDartStorageDirectory();
+  final dir = getDartStorageDirectory();
   if (dir == null) {
     // Some systems don't support user home directories; for those, fail
     // gracefully by returning a disabled analytics object.
@@ -95,7 +95,7 @@
 /// This can return null under some conditions, including when the user's home
 /// directory does not exist.
 @visibleForTesting
-Directory getDartStorageDirectory() {
+Directory? getDartStorageDirectory() {
   Directory homeDirectory = new Directory(userHomeDir());
   if (!homeDirectory.existsSync()) return null;
 
@@ -114,8 +114,8 @@
     String applicationName,
     String applicationVersion,
     File settingsFile, {
-    @required this.disableForSession,
-    @required this.forceEnabled,
+    required this.disableForSession,
+    required this.forceEnabled,
   }) : super(
           trackingId,
           new IOPersistentProperties.fromFile(settingsFile),
@@ -123,7 +123,7 @@
           applicationName: applicationName,
           applicationVersion: applicationVersion,
         ) {
-    final String locale = getPlatformLocale();
+    final locale = getPlatformLocale();
     if (locale != null) {
       setSessionValue('ul', locale);
     }
@@ -141,7 +141,7 @@
     }
 
     // If there's no explicit setting (enabled or disabled) then we don't send.
-    return (properties['enabled'] as bool) ?? false;
+    return (properties['enabled'] as bool?) ?? false;
   }
 }
 
diff --git a/pkg/telemetry/pubspec.yaml b/pkg/telemetry/pubspec.yaml
index ca646aa..950cf63 100644
--- a/pkg/telemetry/pubspec.yaml
+++ b/pkg/telemetry/pubspec.yaml
@@ -5,7 +5,7 @@
 author: Dart Team <misc@dartlang.org>
 
 environment:
-  sdk: '>=1.0.0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   http: ^0.12.0
diff --git a/pkg/telemetry/test/crash_reporting_test.dart b/pkg/telemetry/test/crash_reporting_test.dart
index 440eee9..79cf728 100644
--- a/pkg/telemetry/test/crash_reporting_test.dart
+++ b/pkg/telemetry/test/crash_reporting_test.dart
@@ -12,10 +12,10 @@
 
 void main() {
   group('CrashReportSender', () {
-    MockClient mockClient;
-    AnalyticsMock analytics;
+    late MockClient mockClient;
+    late AnalyticsMock analytics;
 
-    Request request;
+    late Request request;
 
     setUp(() {
       mockClient = new MockClient((Request r) async {
diff --git a/pkg/telemetry/test/telemetry_test.dart b/pkg/telemetry/test/telemetry_test.dart
index 8cd4ca3..07dc8f7 100644
--- a/pkg/telemetry/test/telemetry_test.dart
+++ b/pkg/telemetry/test/telemetry_test.dart
@@ -2,15 +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:io';
-
 import 'package:telemetry/telemetry.dart';
 import 'package:test/test.dart';
 
 void main() {
   group('telemetry', () {
     test('getDartStorageDirectory', () {
-      Directory dir = getDartStorageDirectory();
+      var dir = getDartStorageDirectory();
       expect(dir, isNotNull);
     });
 
diff --git a/pkg/vm_snapshot_analysis/lib/v8_profile.dart b/pkg/vm_snapshot_analysis/lib/v8_profile.dart
index 404fe66..5ef79af 100644
--- a/pkg/vm_snapshot_analysis/lib/v8_profile.dart
+++ b/pkg/vm_snapshot_analysis/lib/v8_profile.dart
@@ -228,6 +228,12 @@
     }.toString();
   }
 
+  /// Returns the target of an outgoing edge with the given name (if any),
+  /// but first checks for a corresponding artificial edge indicating a dropped
+  /// object.
+  Node possiblyDroppedTarget(String edgeName) =>
+      this[':$edgeName'] ?? this[edgeName];
+
   /// Returns the target of an outgoing edge with the given name (if any).
   Node operator [](String edgeName) => this
       .edges
@@ -398,7 +404,7 @@
   ProgramInfoNode createInfoNodeFor(Node node) {
     switch (node.type) {
       case 'Code':
-        var owner = node[':owner_'] ?? node['owner_'];
+        var owner = node.possiblyDroppedTarget('owner_');
         if (owner.type != 'Type') {
           final ownerNode =
               owner.type == 'Null' ? program.stubs : getInfoNodeFor(owner);
@@ -419,9 +425,10 @@
         if (node.name != '<anonymous signature>') {
           var owner = node['owner_'];
 
-          // Artificial nodes will not have data_ field.
-          if (node['data_']?.type == 'ClosureData') {
-            owner = node['data_']['parent_function_'];
+          // Artificial nodes may not have a data_ field.
+          var data = node['data_'];
+          if (data?.type == 'ClosureData') {
+            owner = data.possiblyDroppedTarget('parent_function_');
           }
           return makeInfoNode(node.index,
               name: node.name,
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index a94e18a..e779915 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include <memory>
+#include <utility>
 
 #include "vm/clustered_snapshot.h"
 
@@ -1051,6 +1052,12 @@
   }
 };
 
+// If DROPPED_NAME(name) is used for a v8 snapshot profile edge, then
+// possiblyDroppedTarget() should be used to retrieve the edge target in
+// pkg/vm_snapshot_analysis/v8_profile.dart so the artificial node is found
+// instead of its in-snapshot replacement.
+#define DROPPED_NAME(name) (":" #name)
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
 class ClosureDataSerializationCluster : public SerializationCluster {
  public:
@@ -1097,6 +1104,25 @@
     }
   }
 
+  // Some closure data objects have their parent functions dropped from the
+  // snapshot, which makes it is impossible to recover program structure when
+  // analysing snapshot profile. To facilitate analysis of snapshot profiles
+  // we include artificial nodes into profile representing such dropped
+  // parent functions.
+  void WriteDroppedParentFunctionsIntoProfile(Serializer* s) {
+    ASSERT(s->profile_writer() != nullptr);
+
+    for (auto data : objects_) {
+      ObjectPtr parent_function =
+          WeakSerializationReference::Unwrap(data->untag()->parent_function());
+      if (s->CreateArtificialNodeIfNeeded(parent_function)) {
+        AutoTraceObject(data);
+        s->AttributePropertyRef(parent_function, DROPPED_NAME(parent_function_),
+                                /*permit_artificial_ref=*/true);
+      }
+    }
+  }
+
  private:
   GrowableArray<ClosureDataPtr> objects_;
 };
@@ -2035,9 +2061,9 @@
     for (auto code : objects_) {
       ObjectPtr owner =
           WeakSerializationReference::Unwrap(code->untag()->owner_);
-      if (s->CreateArtificalNodeIfNeeded(owner) || Code::IsDiscarded(code)) {
+      if (s->CreateArtificialNodeIfNeeded(owner) || Code::IsDiscarded(code)) {
         AutoTraceObject(code);
-        s->AttributePropertyRef(owner, ":owner_",
+        s->AttributePropertyRef(owner, DROPPED_NAME(owner_),
                                 /*permit_artificial_ref=*/true);
       }
     }
@@ -6194,9 +6220,14 @@
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-bool Serializer::CreateArtificalNodeIfNeeded(ObjectPtr obj) {
+bool Serializer::CreateArtificialNodeIfNeeded(ObjectPtr obj) {
   ASSERT(profile_writer() != nullptr);
 
+  if (obj->GetClassId() == kWeakSerializationReferenceCid) {
+    auto wsr = static_cast<WeakSerializationReferencePtr>(obj);
+    return CreateArtificialNodeIfNeeded(wsr->untag()->target());
+  }
+
   intptr_t id = heap_->GetObjectId(obj);
   if (IsAllocatedReference(id)) {
     return false;
@@ -6210,31 +6241,37 @@
   const char* type = nullptr;
   StringPtr name_string = nullptr;
   const char* name = nullptr;
-  ObjectPtr owner = nullptr;
-  const char* owner_ref_name = nullptr;
+  GrowableArray<std::pair<ObjectPtr, const char*>> links;
   switch (obj->GetClassId()) {
     case kFunctionCid: {
       FunctionPtr func = static_cast<FunctionPtr>(obj);
       type = "Function";
       name = FunctionSerializationCluster::MakeDisambiguatedFunctionName(this,
                                                                          func);
-      owner_ref_name = "owner_";
-      owner = func->untag()->owner();
+      links.Add({func->untag()->owner(), "owner_"});
+      ObjectPtr data = func->untag()->data();
+      if (data->GetClassId() == kClosureDataCid) {
+        links.Add({func->untag()->data(), "data_"});
+      }
+      break;
+    }
+    case kClosureDataCid: {
+      auto data = static_cast<ClosureDataPtr>(obj);
+      type = "ClosureData";
+      links.Add({data->untag()->parent_function(), "parent_function_"});
       break;
     }
     case kClassCid: {
       ClassPtr cls = static_cast<ClassPtr>(obj);
       type = "Class";
       name_string = cls->untag()->name();
-      owner_ref_name = "library_";
-      owner = cls->untag()->library();
+      links.Add({cls->untag()->library(), "library_"});
       break;
     }
     case kPatchClassCid: {
       PatchClassPtr patch_cls = static_cast<PatchClassPtr>(obj);
       type = "PatchClass";
-      owner_ref_name = "patched_class_";
-      owner = patch_cls->untag()->patched_class();
+      links.Add({patch_cls->untag()->patched_class(), "patched_class_"});
       break;
     }
     case kLibraryCid: {
@@ -6254,16 +6291,16 @@
     name = str.ToCString();
   }
 
-  // CreateArtificalNodeIfNeeded might call TraceStartWritingObject
+  // CreateArtificialNodeIfNeeded might call TraceStartWritingObject
   // and these calls don't nest, so we need to call this outside
   // of the tracing scope created below.
-  if (owner != nullptr) {
-    CreateArtificalNodeIfNeeded(owner);
+  for (const auto& link : links) {
+    CreateArtificialNodeIfNeeded(link.first);
   }
 
   TraceStartWritingObject(type, obj, name);
-  if (owner != nullptr) {
-    AttributePropertyRef(owner, owner_ref_name,
+  for (const auto& link : links) {
+    AttributePropertyRef(link.first, link.second,
                          /*permit_artificial_ref=*/true);
   }
   TraceEndWritingObject();
@@ -6817,6 +6854,10 @@
   if (FLAG_write_v8_snapshot_profile_to != nullptr) {
     static_cast<CodeSerializationCluster*>(clusters_by_cid_[kCodeCid])
         ->WriteDroppedOwnersIntoProfile(this);
+    if (auto const cluster = static_cast<ClosureDataSerializationCluster*>(
+            clusters_by_cid_[kClosureDataCid])) {
+      cluster->WriteDroppedParentFunctionsIntoProfile(this);
+    }
   }
 #endif
 
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index 0888bbb..79ef250 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -397,7 +397,7 @@
   // yet gotten an artificial node created for it create an artificial node
   // in the profile representing this object.
   // Returns true if [obj] has an artificial profile node associated with it.
-  bool CreateArtificalNodeIfNeeded(ObjectPtr obj);
+  bool CreateArtificialNodeIfNeeded(ObjectPtr obj);
 
   bool InCurrentLoadingUnit(ObjectPtr obj, bool record = false);
   GrowableArray<LoadingUnitSerializationData*>* loading_units() const {
diff --git a/tools/VERSION b/tools/VERSION
index 0c0a1fb..907806b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 212
+PRERELEASE 213
 PRERELEASE_PATCH 0
\ No newline at end of file
