Version 2.14.0-346.0.dev

Merge commit '51d10c8c041030f97dd5d2b713783e7ea683629d' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index c3b657c..1a0cb9e 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-07-20T10:43:52.568177",
+  "generated": "2021-07-22T12:39:20.084398",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -354,12 +354,6 @@
       "languageVersion": "2.12"
     },
     {
-      "name": "http_retry",
-      "rootUri": "../third_party/pkg/http_retry",
-      "packageUri": "lib/",
-      "languageVersion": "2.12"
-    },
-    {
       "name": "http_throttle",
       "rootUri": "../third_party/pkg/http_throttle",
       "packageUri": "lib/",
diff --git a/DEPS b/DEPS
index 653673b..d1df738 100644
--- a/DEPS
+++ b/DEPS
@@ -87,7 +87,7 @@
   "clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
   "collection_rev": "75a7a5510979a3cd70143af85bcc1667ee233674",
   "convert_rev": "413f591577419d8a8b95d445094a82c926650bd1",
-  "crypto_rev": "1c8ccc07b83b100216dc6dede767371043385648",
+  "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
   "csslib_rev": "e411d862fd8cc50415c1badf2632e017373b3f47",
   "dart2js_info_rev" : "e0acfeb5affdf94c53067e68bd836adf589628fd",
 
@@ -116,8 +116,7 @@
   "http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
   "http_multi_server_rev": "de1b312164c24a1690b46c6e97bd47eff40c4649",
   "http_parser_rev": "7720bfd42a0c096734c5213478fdce92c62f0293",
-  "http_retry_rev": "845771af7bb5ab38ab740ce4a31f3b0c7680302b",
-  "http_rev": "f93c76fabdb03963303762e3fe16cbdf60799cff",
+  "http_rev": "778174bca2c13becd88ef3353309190b1e8b9479",
   "http_throttle_tag" : "1.0.2",
   "icu_rev" : "81d656878ec611cb0b42d52c82e9dae93920d9ba",
   "idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
@@ -134,7 +133,7 @@
   "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
   "oauth2_rev": "7cd3284049fe5badbec9f2bea2afc41d14c01057",
   "package_config_rev": "a84c0d45401f215fbe9384df923a38f4022a3c45",
-  "path_rev": "407ab76187fade41c31e39c745b39661b710106c",
+  "path_rev": "c20d73c3516d3a0061c90f14b761ff532b9bf707",
   "pedantic_rev": "66f2f6c27581c7936482e83be80b27be2719901c",
   "platform_rev": "c20e6fa315e9f8820e51c0ae721f63aff33b8e17",
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
@@ -370,9 +369,6 @@
       "@" + Var("http_multi_server_rev"),
   Var("dart_root") + "/third_party/pkg/http_parser":
       Var("dart_git") + "http_parser.git" + "@" + Var("http_parser_rev"),
-  Var("dart_root") + "/third_party/pkg/http_retry":
-      Var("dart_git") + "http_retry.git" +
-      "@" + Var("http_retry_rev"),
   Var("dart_root") + "/third_party/pkg/http_throttle":
       Var("dart_git") + "http_throttle.git" +
       "@" + Var("http_throttle_tag"),
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index c7726fb..7c40e38 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 161;
+  static const int DATA_VERSION = 163;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/macro/api/code.dart b/pkg/analyzer/lib/src/macro/api/code.dart
index 0c06310..a3fed07 100644
--- a/pkg/analyzer/lib/src/macro/api/code.dart
+++ b/pkg/analyzer/lib/src/macro/api/code.dart
@@ -6,19 +6,23 @@
 /// Must only contain [Code] or [String] instances.
 String _combineParts(List<Object> parts) {
   var buffer = StringBuffer();
-  for (var part in parts) {
+
+  void write(Object part) {
     if (part is String) {
       buffer.write(part);
     } else if (part is Code) {
       buffer.write(part.code);
-    } else if (part is List<Code>) {
-      buffer.write(part.map((p) => p.code).join());
+    } else if (part is Iterable<Object>) {
+      part.forEach(write);
     } else {
       throw UnsupportedError(
-        'Only String, Code, and List<Code> are allowed but got $part',
+        'Only String, Code, and List(s) of them are '
+        'allowed but got ${part.runtimeType}',
       );
     }
   }
+
+  write(parts);
   return buffer.toString();
 }
 
@@ -38,7 +42,7 @@
   Declaration(this.code);
 
   /// Creates a [Declaration] from [parts], which must be of type [Code],
-  /// `List<Code>`, or [String].
+  /// [String], or [Iterable]s of them.
   factory Declaration.fromParts(List<Object> parts) =>
       Declaration(_combineParts(parts));
 }
@@ -52,7 +56,7 @@
   Fragment(this.code);
 
   /// Creates a [Fragment] from [parts], which must be of type [Code],
-  /// `List<Code>`, or [String].
+  /// [String], or [Iterable]s of them.
   factory Fragment.fromParts(List<Object> parts) =>
       Fragment(_combineParts(parts));
 }
diff --git a/pkg/analyzer/lib/src/summary2/function_type_builder.dart b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
index f59a117..4ab0f6a 100644
--- a/pkg/analyzer/lib/src/summary2/function_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
@@ -190,7 +190,7 @@
       } else if (isNNBD) {
         nullabilitySuffix = NullabilitySuffix.none;
       } else {
-        nullabilitySuffix = NullabilitySuffix.question;
+        nullabilitySuffix = NullabilitySuffix.star;
       }
 
       return FunctionTypeBuilder(
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index e500aa1..3cb1a0f 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -2,7 +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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart' as ast;
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart' as ast;
@@ -161,7 +160,7 @@
 
   void resolveTypes(NodesToBuildType nodesToBuildType) {
     for (var linkingUnit in units) {
-      var resolver = _newTypeReferenceResolver(nodesToBuildType, linkingUnit);
+      var resolver = ReferenceResolver(linker, nodesToBuildType, element);
       linkingUnit.node.accept(resolver);
     }
   }
@@ -212,7 +211,7 @@
             {
               var nodesToBuildType = NodesToBuildType();
               var resolver =
-                  _newTypeReferenceResolver(nodesToBuildType, linkingUnit);
+                  ReferenceResolver(linker, nodesToBuildType, element);
               for (var newMember in newMembers) {
                 newMember.accept(resolver);
               }
@@ -258,21 +257,6 @@
     }
   }
 
-  ReferenceResolver _newTypeReferenceResolver(
-    NodesToBuildType nodesToBuildType,
-    LinkingUnit linkingUnit,
-  ) {
-    /// TODO(scheglov) Do we need all these parameters?
-    return ReferenceResolver(
-      linker,
-      nodesToBuildType,
-      linker.elementFactory,
-      element,
-      linkingUnit.reference,
-      linkingUnit.node.featureSet.isEnabled(Feature.non_nullable),
-    );
-  }
-
   static void build(Linker linker, LinkInputLibrary inputLibrary) {
     var elementFactory = linker.elementFactory;
 
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index ea3f216..9268b91 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -14,10 +14,8 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/summary2/function_type_builder.dart';
 import 'package:analyzer/src/summary2/link.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/linking_node_scope.dart';
 import 'package:analyzer/src/summary2/named_type_builder.dart';
-import 'package:analyzer/src/summary2/reference.dart';
 import 'package:analyzer/src/summary2/types_builder.dart';
 
 /// Recursive visitor of [LinkedNode]s that resolves explicit type annotations
@@ -33,8 +31,6 @@
   final Linker linker;
   final TypeSystemImpl _typeSystem;
   final NodesToBuildType nodesToBuildType;
-  final LinkedElementFactory elementFactory;
-  final Reference unitReference;
 
   /// Indicates whether the library is opted into NNBD.
   final bool isNNBD;
@@ -44,12 +40,10 @@
   ReferenceResolver(
     this.linker,
     this.nodesToBuildType,
-    this.elementFactory,
     LibraryElementImpl libraryElement,
-    this.unitReference,
-    this.isNNBD,
   )   : _typeSystem = libraryElement.typeSystem,
-        scope = libraryElement.scope;
+        scope = libraryElement.scope,
+        isNNBD = libraryElement.isNonNullableByDefault;
 
   @override
   void visitBlockFunctionBody(BlockFunctionBody node) {}
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
index 8914a67..0af318b 100644
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ b/pkg/vm_service/example/vm_service_assert.dart
@@ -178,6 +178,7 @@
   if (obj == "Float64List") return obj;
   if (obj == "Float64x2") return obj;
   if (obj == "Float64x2List") return obj;
+  if (obj == "FunctionType") return obj;
   if (obj == "Int") return obj;
   if (obj == "Int16List") return obj;
   if (obj == "Int32List") return obj;
@@ -578,6 +579,7 @@
   }
   assertBool(obj.isStatic!);
   assertBool(obj.isConst!);
+  assertBool(obj.implicit!);
   return obj;
 }
 
@@ -603,6 +605,8 @@
   }
   assertBool(obj.isStatic!);
   assertBool(obj.isConst!);
+  assertBool(obj.implicit!);
+  assertInstanceRef(obj.signature!);
   return obj;
 }
 
@@ -880,6 +884,13 @@
   return obj;
 }
 
+vms.Parameter assertParameter(vms.Parameter obj) {
+  assertNotNull(obj);
+  assertInstanceRef(obj.parameterType!);
+  assertBool(obj.fixed!);
+  return obj;
+}
+
 vms.PortList assertPortList(vms.PortList obj) {
   assertNotNull(obj);
   assertListOfInstanceRef(obj.ports!);
@@ -1121,6 +1132,14 @@
   return obj;
 }
 
+vms.TypeParameters assertTypeParameters(vms.TypeParameters obj) {
+  assertNotNull(obj);
+  assertListOfString(obj.names!);
+  assertTypeArgumentsRef(obj.bounds!);
+  assertTypeArgumentsRef(obj.defaults!);
+  return obj;
+}
+
 vms.UnresolvedSourceLocation assertUnresolvedSourceLocation(
     vms.UnresolvedSourceLocation obj) {
   assertNotNull(obj);
diff --git a/pkg/vm_service/java/.gitignore b/pkg/vm_service/java/.gitignore
index cdc39af..cc8a3e7 100644
--- a/pkg/vm_service/java/.gitignore
+++ b/pkg/vm_service/java/.gitignore
@@ -99,6 +99,7 @@
 src/org/dartlang/vm/service/element/NullRef.java
 src/org/dartlang/vm/service/element/Obj.java
 src/org/dartlang/vm/service/element/ObjRef.java
+src/org/dartlang/vm/service/element/Parameter.java
 src/org/dartlang/vm/service/element/PortList.java
 src/org/dartlang/vm/service/element/ProcessMemoryItem.java
 src/org/dartlang/vm/service/element/ProcessMemoryUsage.java
@@ -128,6 +129,7 @@
 src/org/dartlang/vm/service/element/Timestamp.java
 src/org/dartlang/vm/service/element/TypeArguments.java
 src/org/dartlang/vm/service/element/TypeArgumentsRef.java
+src/org/dartlang/vm/service/element/TypeParameters.java
 src/org/dartlang/vm/service/element/UnresolvedSourceLocation.java
 src/org/dartlang/vm/service/element/VM.java
 src/org/dartlang/vm/service/element/VMRef.java
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index c80ebed..77ce904 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -157,6 +157,7 @@
   'Null': NullVal.parse,
   '@Object': ObjRef.parse,
   'Object': Obj.parse,
+  'Parameter': Parameter.parse,
   'PortList': PortList.parse,
   'ProfileFunction': ProfileFunction.parse,
   'ProtocolList': ProtocolList.parse,
@@ -183,6 +184,7 @@
   'Timestamp': Timestamp.parse,
   '@TypeArguments': TypeArgumentsRef.parse,
   'TypeArguments': TypeArguments.parse,
+  'TypeParameters': TypeParameters.parse,
   'UnresolvedSourceLocation': UnresolvedSourceLocation.parse,
   'Version': Version.parse,
   '@VM': VMRef.parse,
@@ -2585,6 +2587,9 @@
   /// An instance of the Dart class TypeRef.
   static const String kTypeRef = 'TypeRef';
 
+  /// An instance of the Dart class FunctionType.
+  static const String kFunctionType = 'FunctionType';
+
   /// An instance of the Dart class BoundedType.
   static const String kBoundedType = 'BoundedType';
 
@@ -2930,11 +2935,18 @@
   /// The library which contains this class.
   LibraryRef? library;
 
+  /// The type parameters for the class.
+  ///
+  /// Provided if the class is generic.
+  @optional
+  List<InstanceRef>? typeParameters;
+
   ClassRef({
     required this.name,
     required this.library,
     required String id,
     this.location,
+    this.typeParameters,
   }) : super(
           id: id,
         );
@@ -2945,6 +2957,11 @@
         as SourceLocation?;
     library = createServiceObject(json['library'], const ['LibraryRef'])
         as LibraryRef?;
+    typeParameters = json['typeParameters'] == null
+        ? null
+        : List<InstanceRef>.from(
+            createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+                as List);
   }
 
   @override
@@ -2959,6 +2976,8 @@
       'library': library?.toJson(),
     });
     _setIfNotNull(json, 'location', location?.toJson());
+    _setIfNotNull(json, 'typeParameters',
+        typeParameters?.map((f) => f.toJson()).toList());
     return json;
   }
 
@@ -2985,6 +3004,12 @@
   /// The library which contains this class.
   LibraryRef? library;
 
+  /// The type parameters for the class.
+  ///
+  /// Provided if the class is generic.
+  @optional
+  List<InstanceRef>? typeParameters;
+
   /// The error which occurred during class finalization, if it exists.
   @optional
   ErrorRef? error;
@@ -3041,6 +3066,7 @@
     required this.subclasses,
     required String id,
     this.location,
+    this.typeParameters,
     this.error,
     this.superClass,
     this.superType,
@@ -3055,6 +3081,11 @@
         as SourceLocation?;
     library = createServiceObject(json['library'], const ['LibraryRef'])
         as LibraryRef?;
+    typeParameters = json['typeParameters'] == null
+        ? null
+        : List<InstanceRef>.from(
+            createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+                as List);
     error = createServiceObject(json['error'], const ['ErrorRef']) as ErrorRef?;
     isAbstract = json['abstract'] ?? false;
     isConst = json['const'] ?? false;
@@ -3098,6 +3129,8 @@
       'subclasses': subclasses?.map((f) => f.toJson()).toList(),
     });
     _setIfNotNull(json, 'location', location?.toJson());
+    _setIfNotNull(json, 'typeParameters',
+        typeParameters?.map((f) => f.toJson()).toList());
     _setIfNotNull(json, 'error', error?.toJson());
     _setIfNotNull(json, 'super', superClass?.toJson());
     _setIfNotNull(json, 'superType', superType?.toJson());
@@ -4382,6 +4415,9 @@
   /// Is this function const?
   bool? isConst;
 
+  /// Is this function implicitly defined (e.g., implicit getter/setter)?
+  bool? implicit;
+
   /// The location of this function in the source code.
   @optional
   SourceLocation? location;
@@ -4391,6 +4427,7 @@
     required this.owner,
     required this.isStatic,
     required this.isConst,
+    required this.implicit,
     required String id,
     this.location,
   }) : super(
@@ -4403,6 +4440,7 @@
         json['owner'], const ['LibraryRef', 'ClassRef', 'FuncRef']) as dynamic;
     isStatic = json['static'] ?? false;
     isConst = json['const'] ?? false;
+    implicit = json['implicit'] ?? false;
     location = createServiceObject(json['location'], const ['SourceLocation'])
         as SourceLocation?;
   }
@@ -4419,6 +4457,7 @@
       'owner': owner?.toJson(),
       'static': isStatic,
       'const': isConst,
+      'implicit': implicit,
     });
     _setIfNotNull(json, 'location', location?.toJson());
     return json;
@@ -4430,7 +4469,7 @@
 
   String toString() => '[FuncRef ' //
       'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
-      'isConst: ${isConst}]';
+      'isConst: ${isConst}, implicit: ${implicit}]';
 }
 
 /// A `Func` represents a Dart language function.
@@ -4452,10 +4491,16 @@
   /// Is this function const?
   bool? isConst;
 
+  /// Is this function implicitly defined (e.g., implicit getter/setter)?
+  bool? implicit;
+
   /// The location of this function in the source code.
   @optional
   SourceLocation? location;
 
+  /// The signature of the function.
+  InstanceRef? signature;
+
   /// The compiled code associated with this function.
   @optional
   CodeRef? code;
@@ -4465,6 +4510,8 @@
     required this.owner,
     required this.isStatic,
     required this.isConst,
+    required this.implicit,
+    required this.signature,
     required String id,
     this.location,
     this.code,
@@ -4478,8 +4525,11 @@
         json['owner'], const ['LibraryRef', 'ClassRef', 'FuncRef']) as dynamic;
     isStatic = json['static'] ?? false;
     isConst = json['const'] ?? false;
+    implicit = json['implicit'] ?? false;
     location = createServiceObject(json['location'], const ['SourceLocation'])
         as SourceLocation?;
+    signature = createServiceObject(json['signature'], const ['InstanceRef'])
+        as InstanceRef?;
     code = createServiceObject(json['code'], const ['CodeRef']) as CodeRef?;
   }
 
@@ -4495,6 +4545,8 @@
       'owner': owner?.toJson(),
       'static': isStatic,
       'const': isConst,
+      'implicit': implicit,
+      'signature': signature?.toJson(),
     });
     _setIfNotNull(json, 'location', location?.toJson());
     _setIfNotNull(json, 'code', code?.toJson());
@@ -4507,7 +4559,7 @@
 
   String toString() => '[Func ' //
       'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
-      'isConst: ${isConst}]';
+      'isConst: ${isConst}, implicit: ${implicit}, signature: ${signature}]';
 }
 
 /// `InstanceRef` is a reference to an `Instance`.
@@ -4586,13 +4638,34 @@
   @optional
   ClassRef? typeClass;
 
-  /// The parameterized class of a type parameter:
+  /// The parameterized class of a type parameter.
   ///
   /// Provided for instance kinds:
   ///  - TypeParameter
   @optional
   ClassRef? parameterizedClass;
 
+  /// The return type of a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  InstanceRef? returnType;
+
+  /// The list of parameter types for a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  List<Parameter>? parameters;
+
+  /// The type parameters for a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  List<InstanceRef>? typeParameters;
+
   /// The pattern of a RegExp instance.
   ///
   /// The pattern is always an instance of kind String.
@@ -4648,6 +4721,9 @@
     this.name,
     this.typeClass,
     this.parameterizedClass,
+    this.returnType,
+    this.parameters,
+    this.typeParameters,
     this.pattern,
     this.closureFunction,
     this.closureContext,
@@ -4672,6 +4748,18 @@
     parameterizedClass =
         createServiceObject(json['parameterizedClass'], const ['ClassRef'])
             as ClassRef?;
+    returnType = createServiceObject(json['returnType'], const ['InstanceRef'])
+        as InstanceRef?;
+    parameters = json['parameters'] == null
+        ? null
+        : List<Parameter>.from(
+            createServiceObject(json['parameters'], const ['Parameter'])!
+                as List);
+    typeParameters = json['typeParameters'] == null
+        ? null
+        : List<InstanceRef>.from(
+            createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+                as List);
     pattern = createServiceObject(json['pattern'], const ['InstanceRef'])
         as InstanceRef?;
     closureFunction =
@@ -4705,6 +4793,11 @@
     _setIfNotNull(json, 'name', name);
     _setIfNotNull(json, 'typeClass', typeClass?.toJson());
     _setIfNotNull(json, 'parameterizedClass', parameterizedClass?.toJson());
+    _setIfNotNull(json, 'returnType', returnType?.toJson());
+    _setIfNotNull(
+        json, 'parameters', parameters?.map((f) => f.toJson()).toList());
+    _setIfNotNull(json, 'typeParameters',
+        typeParameters?.map((f) => f.toJson()).toList());
     _setIfNotNull(json, 'pattern', pattern?.toJson());
     _setIfNotNull(json, 'closureFunction', closureFunction?.toJson());
     _setIfNotNull(json, 'closureContext', closureContext?.toJson());
@@ -4851,6 +4944,27 @@
   @optional
   ClassRef? parameterizedClass;
 
+  /// The return type of a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  InstanceRef? returnType;
+
+  /// The list of parameter types for a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  List<Parameter>? parameters;
+
+  /// The type parameters for a function.
+  ///
+  /// Provided for instance kinds:
+  ///  - FunctionType
+  @optional
+  List<InstanceRef>? typeParameters;
+
   /// The fields of this Instance.
   @optional
   List<BoundField>? fields;
@@ -5018,6 +5132,9 @@
     this.name,
     this.typeClass,
     this.parameterizedClass,
+    this.returnType,
+    this.parameters,
+    this.typeParameters,
     this.fields,
     this.elements,
     this.associations,
@@ -5058,6 +5175,18 @@
     parameterizedClass =
         createServiceObject(json['parameterizedClass'], const ['ClassRef'])
             as ClassRef?;
+    returnType = createServiceObject(json['returnType'], const ['InstanceRef'])
+        as InstanceRef?;
+    parameters = json['parameters'] == null
+        ? null
+        : List<Parameter>.from(
+            createServiceObject(json['parameters'], const ['Parameter'])!
+                as List);
+    typeParameters = json['typeParameters'] == null
+        ? null
+        : List<InstanceRef>.from(
+            createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+                as List);
     fields = json['fields'] == null
         ? null
         : List<BoundField>.from(
@@ -5125,6 +5254,11 @@
     _setIfNotNull(json, 'name', name);
     _setIfNotNull(json, 'typeClass', typeClass?.toJson());
     _setIfNotNull(json, 'parameterizedClass', parameterizedClass?.toJson());
+    _setIfNotNull(json, 'returnType', returnType?.toJson());
+    _setIfNotNull(
+        json, 'parameters', parameters?.map((f) => f.toJson()).toList());
+    _setIfNotNull(json, 'typeParameters',
+        typeParameters?.map((f) => f.toJson()).toList());
     _setIfNotNull(json, 'fields', fields?.map((f) => f.toJson()).toList());
     _setIfNotNull(json, 'elements', elements?.map((f) => f.toJson()).toList());
     _setIfNotNull(
@@ -6337,6 +6471,58 @@
   String toString() => '[Obj id: ${id}]';
 }
 
+/// A `Parameter` is a representation of a function parameter.
+///
+/// See [Instance].
+class Parameter {
+  static Parameter? parse(Map<String, dynamic>? json) =>
+      json == null ? null : Parameter._fromJson(json);
+
+  /// The type of the parameter.
+  InstanceRef? parameterType;
+
+  /// Represents whether or not this parameter is fixed or optional.
+  bool? fixed;
+
+  /// The name of a named optional parameter.
+  @optional
+  String? name;
+
+  /// Whether or not this named optional parameter is marked as required.
+  @optional
+  bool? required;
+
+  Parameter({
+    required this.parameterType,
+    required this.fixed,
+    this.name,
+    this.required,
+  });
+
+  Parameter._fromJson(Map<String, dynamic> json) {
+    parameterType =
+        createServiceObject(json['parameterType'], const ['InstanceRef'])
+            as InstanceRef?;
+    fixed = json['fixed'] ?? false;
+    name = json['name'];
+    required = json['required'];
+  }
+
+  Map<String, dynamic> toJson() {
+    final json = <String, dynamic>{};
+    json.addAll({
+      'parameterType': parameterType?.toJson(),
+      'fixed': fixed,
+    });
+    _setIfNotNull(json, 'name', name);
+    _setIfNotNull(json, 'required', required);
+    return json;
+  }
+
+  String toString() =>
+      '[Parameter parameterType: ${parameterType}, fixed: ${fixed}]';
+}
+
 /// A `PortList` contains a list of ports associated with some isolate.
 ///
 /// See [getPort].
@@ -7562,6 +7748,49 @@
       '[TypeArguments id: ${id}, name: ${name}, types: ${types}]';
 }
 
+/// A `TypeParameters` object represents the type argument vector for some
+/// uninstantiated generic type.
+class TypeParameters {
+  static TypeParameters? parse(Map<String, dynamic>? json) =>
+      json == null ? null : TypeParameters._fromJson(json);
+
+  /// The names of the type parameters.
+  List<String>? names;
+
+  /// The bounds set on each type parameter.
+  TypeArgumentsRef? bounds;
+
+  /// The default types for each type parameter.
+  TypeArgumentsRef? defaults;
+
+  TypeParameters({
+    required this.names,
+    required this.bounds,
+    required this.defaults,
+  });
+
+  TypeParameters._fromJson(Map<String, dynamic> json) {
+    names = List<String>.from(json['names']);
+    bounds = createServiceObject(json['bounds'], const ['TypeArgumentsRef'])
+        as TypeArgumentsRef?;
+    defaults = createServiceObject(json['defaults'], const ['TypeArgumentsRef'])
+        as TypeArgumentsRef?;
+  }
+
+  Map<String, dynamic> toJson() {
+    final json = <String, dynamic>{};
+    json.addAll({
+      'names': names?.map((f) => f).toList(),
+      'bounds': bounds?.toJson(),
+      'defaults': defaults?.toJson(),
+    });
+    return json;
+  }
+
+  String toString() =>
+      '[TypeParameters names: ${names}, bounds: ${bounds}, defaults: ${defaults}]';
+}
+
 /// The `UnresolvedSourceLocation` class is used to refer to an unresolved
 /// breakpoint location. As such, it is meant to approximate the final location
 /// of the breakpoint but it is not exact.
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index f3a26e7..7d83c71 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -4774,8 +4774,8 @@
 
   for (var i = 0; i < list.length; i++) {
     var v = list[i];
-    if ((v is Map) && _isServiceMap(v)) {
-      list[i] = owner!.getFromMap(v);
+    if ((v is Map) && owner != null && _isServiceMap(v)) {
+      list[i] = owner.getFromMap(v);
     } else if (v is List) {
       _upgradeList(v, owner);
     } else if (v is Map) {
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
index 9a3eab8..d553138 100644
--- a/runtime/observatory/tests/service/get_object_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -14,15 +14,20 @@
 class _DummyClass {
   static var dummyVar = 11;
   final List<String> dummyList = new List<String>.filled(20, '');
-  void dummyFunction() {}
+  void dummyFunction(int a, [bool b = false]) {}
+  void dummyGenericFunction<K, V>(K a, {required V param}) {}
 }
 
 class _DummySubClass extends _DummyClass {}
 
+class _DummyGenericSubClass<T> extends _DummyClass {}
+
 void warmup() {
   // Silence analyzer.
   new _DummySubClass();
-  new _DummyClass().dummyFunction();
+  new _DummyGenericSubClass<Object>();
+  new _DummyClass().dummyFunction(0);
+  new _DummyClass().dummyGenericFunction<Object, dynamic>(0, param: 0);
 }
 
 @pragma("vm:entry-point")
@@ -43,6 +48,9 @@
 @pragma("vm:entry-point")
 getDummyClass() => new _DummyClass();
 
+@pragma("vm:entry-point")
+getDummyGenericSubClass() => new _DummyGenericSubClass<Object>();
+
 invoke(Isolate isolate, String selector) async {
   Map params = {
     'targetId': isolate.rootLibrary.id,
@@ -766,6 +774,7 @@
     expect(result['_finalized'], equals(true));
     expect(result['_implemented'], equals(false));
     expect(result['_patch'], equals(false));
+    expect(result['typeParameters'], isNull);
     expect(result['library']['type'], equals('@Library'));
     expect(result['location']['type'], equals('SourceLocation'));
     expect(result['super']['type'], equals('@Class'));
@@ -778,6 +787,30 @@
     expect(result['subclasses'][0]['type'], equals('@Class'));
   },
 
+  // generic class
+  (Isolate isolate) async {
+    // Call eval to get a class id.
+    var evalResult = await invoke(isolate, 'getDummyGenericSubClass');
+    var params = {
+      'objectId': evalResult['class']['id'],
+    };
+    var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+    expect(result['type'], equals('Class'));
+    expect(result['id'], startsWith('classes/'));
+    expect(result['name'], equals('_DummyGenericSubClass'));
+    expect(result['_vmName'], startsWith('_DummyGenericSubClass@'));
+    expect(result['abstract'], equals(false));
+    expect(result['const'], equals(false));
+    expect(result['_finalized'], equals(true));
+    expect(result['_implemented'], equals(false));
+    expect(result['_patch'], equals(false));
+    expect(result['typeParameters'].length, equals(1));
+    expect(result['library']['type'], equals('@Library'));
+    expect(result['location']['type'], equals('SourceLocation'));
+    expect(result['super']['type'], equals('@Class'));
+    expect(result['interfaces'].length, isZero);
+  },
+
   // invalid class.
   (Isolate isolate) async {
     var params = {
@@ -851,6 +884,52 @@
     expect(result['_kind'], equals('RegularFunction'));
     expect(result['static'], equals(false));
     expect(result['const'], equals(false));
+    expect(result['implicit'], equals(false));
+    expect(result['signature']['typeParameters'], isNull);
+    expect(result['signature']['returnType'], isNotNull);
+    expect(result['signature']['parameters'].length, 3);
+    expect(result['signature']['parameters'][1]['parameterType']['name'],
+        equals('int'));
+    expect(result['signature']['parameters'][1]['fixed'], isTrue);
+    expect(result['signature']['parameters'][2]['parameterType']['name'],
+        equals('bool'));
+    expect(result['signature']['parameters'][2]['fixed'], isFalse);
+    expect(result['location']['type'], equals('SourceLocation'));
+    expect(result['code']['type'], equals('@Code'));
+    expect(result['_optimizable'], equals(true));
+    expect(result['_inlinable'], equals(true));
+    expect(result['_usageCounter'], isPositive);
+    expect(result['_optimizedCallSiteCount'], isZero);
+    expect(result['_deoptimizations'], isZero);
+  },
+
+  // generic function.
+  (Isolate isolate) async {
+    // Call eval to get a class id.
+    var evalResult = await invoke(isolate, 'getDummyClass');
+    var id = "${evalResult['class']['id']}/functions/dummyGenericFunction";
+    var params = {
+      'objectId': id,
+    };
+    var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+    expect(result['type'], equals('Function'));
+    expect(result['id'], equals(id));
+    expect(result['name'], equals('dummyGenericFunction'));
+    expect(result['_kind'], equals('RegularFunction'));
+    expect(result['static'], equals(false));
+    expect(result['const'], equals(false));
+    expect(result['implicit'], equals(false));
+    expect(result['signature']['typeParameters'].length, 2);
+    expect(result['signature']['returnType'], isNotNull);
+    expect(result['signature']['parameters'].length, 3);
+    expect(result['signature']['parameters'][1]['parameterType']['name'],
+        isNotNull);
+    expect(result['signature']['parameters'][1]['fixed'], isTrue);
+    expect(result['signature']['parameters'][2]['parameterType']['name'],
+        isNotNull);
+    expect(result['signature']['parameters'][2]['name'], 'param');
+    expect(result['signature']['parameters'][2]['fixed'], isFalse);
+    expect(result['signature']['parameters'][2]['required'], isTrue);
     expect(result['location']['type'], equals('SourceLocation'));
     expect(result['code']['type'], equals('@Code'));
     expect(result['_optimizable'], equals(true));
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index f153eac..6bec5f1 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], 'Version');
     expect(result['major'], 3);
-    expect(result['minor'], 49);
+    expect(result['minor'], 50);
     expect(result['_privateMajor'], 0);
     expect(result['_privateMinor'], 0);
   },
diff --git a/runtime/observatory_2/lib/src/service/object.dart b/runtime/observatory_2/lib/src/service/object.dart
index 2baf6d5..14d72c2 100644
--- a/runtime/observatory_2/lib/src/service/object.dart
+++ b/runtime/observatory_2/lib/src/service/object.dart
@@ -4784,7 +4784,7 @@
 
   for (var i = 0; i < list.length; i++) {
     var v = list[i];
-    if ((v is Map) && _isServiceMap(v)) {
+    if ((v is Map) && owner != null && _isServiceMap(v)) {
       list[i] = owner.getFromMap(v);
     } else if (v is List) {
       _upgradeList(v, owner);
diff --git a/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
index 36b9c61..44912b3 100644
--- a/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
@@ -14,15 +14,20 @@
 class _DummyClass {
   static var dummyVar = 11;
   final List<String> dummyList = new List<String>.filled(20, null);
-  void dummyFunction() {}
+  void dummyFunction(int a, [bool b = false]) {}
+  void dummyGenericFunction<K, V>(K a, {V param}) {}
 }
 
 class _DummySubClass extends _DummyClass {}
 
+class _DummyGenericSubClass<T> extends _DummyClass {}
+
 void warmup() {
   // Silence analyzer.
   new _DummySubClass();
-  new _DummyClass().dummyFunction();
+  new _DummyGenericSubClass<Object>();
+  new _DummyClass().dummyFunction(0);
+  new _DummyClass().dummyGenericFunction<Object, dynamic>(0, param: 0);
 }
 
 @pragma("vm:entry-point")
@@ -43,6 +48,9 @@
 @pragma("vm:entry-point")
 getDummyClass() => new _DummyClass();
 
+@pragma("vm:entry-point")
+getDummyGenericSubClass() => new _DummyGenericSubClass<Object>();
+
 invoke(Isolate isolate, String selector) async {
   Map params = {
     'targetId': isolate.rootLibrary.id,
@@ -778,6 +786,30 @@
     expect(result['subclasses'][0]['type'], equals('@Class'));
   },
 
+  // generic class
+  (Isolate isolate) async {
+    // Call eval to get a class id.
+    var evalResult = await invoke(isolate, 'getDummyGenericSubClass');
+    var params = {
+      'objectId': evalResult['class']['id'],
+    };
+    var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+    expect(result['type'], equals('Class'));
+    expect(result['id'], startsWith('classes/'));
+    expect(result['name'], equals('_DummyGenericSubClass'));
+    expect(result['_vmName'], startsWith('_DummyGenericSubClass@'));
+    expect(result['abstract'], equals(false));
+    expect(result['const'], equals(false));
+    expect(result['_finalized'], equals(true));
+    expect(result['_implemented'], equals(false));
+    expect(result['_patch'], equals(false));
+    expect(result['typeParameters'].length, equals(1));
+    expect(result['library']['type'], equals('@Library'));
+    expect(result['location']['type'], equals('SourceLocation'));
+    expect(result['super']['type'], equals('@Class'));
+    expect(result['interfaces'].length, isZero);
+  },
+
   // invalid class.
   (Isolate isolate) async {
     var params = {
@@ -851,6 +883,52 @@
     expect(result['_kind'], equals('RegularFunction'));
     expect(result['static'], equals(false));
     expect(result['const'], equals(false));
+    expect(result['implicit'], equals(false));
+    expect(result['signature']['typeParameters'], isNull);
+    expect(result['signature']['returnType'], isNotNull);
+    expect(result['signature']['parameters'].length, 3);
+    expect(result['signature']['parameters'][1]['parameterType']['name'],
+        equals('int'));
+    expect(result['signature']['parameters'][1]['fixed'], isTrue);
+    expect(result['signature']['parameters'][2]['parameterType']['name'],
+        equals('bool'));
+    expect(result['signature']['parameters'][2]['fixed'], isFalse);
+    expect(result['location']['type'], equals('SourceLocation'));
+    expect(result['code']['type'], equals('@Code'));
+    expect(result['_optimizable'], equals(true));
+    expect(result['_inlinable'], equals(true));
+    expect(result['_usageCounter'], isPositive);
+    expect(result['_optimizedCallSiteCount'], isZero);
+    expect(result['_deoptimizations'], isZero);
+  },
+
+  // generic function.
+  (Isolate isolate) async {
+    // Call eval to get a class id.
+    var evalResult = await invoke(isolate, 'getDummyClass');
+    var id = "${evalResult['class']['id']}/functions/dummyGenericFunction";
+    var params = {
+      'objectId': id,
+    };
+    var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+    expect(result['type'], equals('Function'));
+    expect(result['id'], equals(id));
+    expect(result['name'], equals('dummyGenericFunction'));
+    expect(result['_kind'], equals('RegularFunction'));
+    expect(result['static'], equals(false));
+    expect(result['const'], equals(false));
+    expect(result['implicit'], equals(false));
+    expect(result['signature']['typeParameters'].length, 2);
+    expect(result['signature']['returnType'], isNotNull);
+    expect(result['signature']['parameters'].length, 3);
+    expect(result['signature']['parameters'][1]['parameterType']['name'],
+        isNotNull);
+    expect(result['signature']['parameters'][1]['fixed'], isTrue);
+    expect(result['signature']['parameters'][2]['parameterType']['name'],
+        isNotNull);
+    expect(result['signature']['parameters'][2]['name'], 'param');
+    expect(result['signature']['parameters'][2]['fixed'], isFalse);
+    expect(result['signature']['parameters'][2]['required'], isFalse);
     expect(result['location']['type'], equals('SourceLocation'));
     expect(result['code']['type'], equals('@Code'));
     expect(result['_optimizable'], equals(true));
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index a36deeb..31490bf 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], equals('Version'));
     expect(result['major'], equals(3));
-    expect(result['minor'], equals(49));
+    expect(result['minor'], equals(50));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 39ecc00..7981ebb 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -3061,7 +3061,6 @@
     "../../../tests/lib/async/stream_error_test.dart",
     "../../../tests/lib/async/stream_event_transformed_test.dart",
     "../../../tests/lib/async/stream_from_futures_test.dart",
-    "../../../tests/lib/async/stream_from_iterable_test.dart",
     "../../../tests/lib/async/stream_iterator_double_cancel_test.dart",
     "../../../tests/lib/async/stream_iterator_test.dart",
     "../../../tests/lib/async/stream_join_test.dart",
@@ -3273,7 +3272,6 @@
     "../../../tests/standalone/io/file_system_uri_test.dart",
     "../../../tests/standalone/io/file_typed_data_test.dart",
     "../../../tests/standalone/io/file_windows_test.dart",
-    "../../../tests/standalone/io/file_write_as_test.dart",
     "../../../tests/standalone/io/file_write_only_test.dart",
     "../../../tests/standalone/io/gzip_format_exception_test.dart",
     "../../../tests/standalone/io/http_100_continue_test.dart",
@@ -6406,7 +6404,6 @@
     "../../../tests/lib_2/async/stream_error_test.dart",
     "../../../tests/lib_2/async/stream_event_transformed_test.dart",
     "../../../tests/lib_2/async/stream_from_futures_test.dart",
-    "../../../tests/lib_2/async/stream_from_iterable_test.dart",
     "../../../tests/lib_2/async/stream_iterator_double_cancel_test.dart",
     "../../../tests/lib_2/async/stream_iterator_test.dart",
     "../../../tests/lib_2/async/stream_join_test.dart",
@@ -6606,7 +6603,6 @@
     "../../../tests/standalone_2/io/file_system_uri_test.dart",
     "../../../tests/standalone_2/io/file_typed_data_test.dart",
     "../../../tests/standalone_2/io/file_windows_test.dart",
-    "../../../tests/standalone_2/io/file_write_as_test.dart",
     "../../../tests/standalone_2/io/file_write_only_test.dart",
     "../../../tests/standalone_2/io/gzip_format_exception_test.dart",
     "../../../tests/standalone_2/io/http_100_continue_test.dart",
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 075622e..e1f330e 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -2596,27 +2596,27 @@
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_parameter_counts_offset = 40;
+    FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_type_parameter_counts_offset = 44;
+    FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    FunctionType_parameter_types_offset = 28;
+    FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    FunctionType_named_parameter_names_offset = 32;
+    FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    FunctionType_type_parameters_offset = 20;
+    FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
 static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
-    33;
+    37;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -2628,13 +2628,13 @@
 static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
 static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
     20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
 static constexpr dart::compiler::target::word
-    TypedDataView_offset_in_bytes_offset = 24;
+    TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
@@ -2681,7 +2681,7 @@
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
 static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
     24;
@@ -2729,7 +2729,7 @@
 static constexpr dart::compiler::target::word Type_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -3144,27 +3144,27 @@
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_parameter_counts_offset = 40;
+    FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_type_parameter_counts_offset = 44;
+    FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    FunctionType_parameter_types_offset = 28;
+    FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    FunctionType_named_parameter_names_offset = 32;
+    FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    FunctionType_type_parameters_offset = 20;
+    FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
 static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
-    33;
+    37;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -3176,13 +3176,13 @@
 static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
 static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
     20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
 static constexpr dart::compiler::target::word
-    TypedDataView_offset_in_bytes_offset = 24;
+    TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
@@ -3230,7 +3230,7 @@
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
 static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
     24;
@@ -3278,7 +3278,7 @@
 static constexpr dart::compiler::target::word Type_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -5843,27 +5843,27 @@
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_parameter_counts_offset = 40;
+    FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_type_parameter_counts_offset = 44;
+    FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    FunctionType_parameter_types_offset = 28;
+    FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    FunctionType_named_parameter_names_offset = 32;
+    FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    FunctionType_type_parameters_offset = 20;
+    FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
 static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
-    33;
+    37;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -5875,13 +5875,13 @@
 static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
 static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
     20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
 static constexpr dart::compiler::target::word
-    TypedDataView_offset_in_bytes_offset = 24;
+    TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
@@ -5928,7 +5928,7 @@
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
 static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
     24;
@@ -5976,7 +5976,7 @@
 static constexpr dart::compiler::target::word Type_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -6385,27 +6385,27 @@
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_parameter_counts_offset = 40;
+    FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    FunctionType_packed_type_parameter_counts_offset = 44;
+    FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    FunctionType_parameter_types_offset = 28;
+    FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    FunctionType_named_parameter_names_offset = 32;
+    FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    FunctionType_type_parameters_offset = 20;
+    FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
 static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
-    33;
+    37;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -6417,13 +6417,13 @@
 static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
 static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
     20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
 static constexpr dart::compiler::target::word
-    TypedDataView_offset_in_bytes_offset = 24;
+    TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
@@ -6471,7 +6471,7 @@
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
 static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
     24;
@@ -6519,7 +6519,7 @@
 static constexpr dart::compiler::target::word Type_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -8803,29 +8803,29 @@
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+    24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_parameter_counts_offset = 40;
+    AOT_FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+    AOT_FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_parameter_types_offset = 28;
+    AOT_FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_named_parameter_names_offset = 32;
+    AOT_FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_type_parameters_offset = 20;
+    AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    31;
+    35;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_nullability_offset = 33;
+    AOT_TypeParameter_nullability_offset = 37;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -8843,16 +8843,16 @@
 static constexpr dart::compiler::target::word
     AOT_TypeParameters_defaults_offset = 20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
-    24;
+    28;
 static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
-    32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+    36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
-    16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
     20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+    24;
 static constexpr dart::compiler::target::word
-    AOT_TypedDataView_offset_in_bytes_offset = 24;
+    AOT_TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
@@ -8903,7 +8903,7 @@
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
 static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
-    48;
+    56;
 static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_GrowableObjectArray_InstanceSize = 24;
@@ -8958,7 +8958,7 @@
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
     24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
     24;
@@ -9412,29 +9412,29 @@
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+    24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_parameter_counts_offset = 40;
+    AOT_FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+    AOT_FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_parameter_types_offset = 28;
+    AOT_FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_named_parameter_names_offset = 32;
+    AOT_FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_type_parameters_offset = 20;
+    AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    31;
+    35;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_nullability_offset = 33;
+    AOT_TypeParameter_nullability_offset = 37;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -9452,16 +9452,16 @@
 static constexpr dart::compiler::target::word
     AOT_TypeParameters_defaults_offset = 20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
-    24;
+    28;
 static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
-    32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+    36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
-    16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
     20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+    24;
 static constexpr dart::compiler::target::word
-    AOT_TypedDataView_offset_in_bytes_offset = 24;
+    AOT_TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
@@ -9513,7 +9513,7 @@
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
 static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
-    48;
+    56;
 static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_GrowableObjectArray_InstanceSize = 24;
@@ -9568,7 +9568,7 @@
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
     24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
     24;
@@ -11826,29 +11826,29 @@
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+    24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_parameter_counts_offset = 40;
+    AOT_FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+    AOT_FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_parameter_types_offset = 28;
+    AOT_FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_named_parameter_names_offset = 32;
+    AOT_FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_type_parameters_offset = 20;
+    AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    31;
+    35;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_nullability_offset = 33;
+    AOT_TypeParameter_nullability_offset = 37;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -11866,16 +11866,16 @@
 static constexpr dart::compiler::target::word
     AOT_TypeParameters_defaults_offset = 20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
-    24;
+    28;
 static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
-    32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+    36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
-    16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
     20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+    24;
 static constexpr dart::compiler::target::word
-    AOT_TypedDataView_offset_in_bytes_offset = 24;
+    AOT_TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
@@ -11926,7 +11926,7 @@
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
 static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
-    48;
+    56;
 static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_GrowableObjectArray_InstanceSize = 24;
@@ -11981,7 +11981,7 @@
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
     24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
     24;
@@ -12428,29 +12428,29 @@
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+    24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_parameter_counts_offset = 40;
+    AOT_FunctionType_packed_parameter_counts_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+    AOT_FunctionType_packed_type_parameter_counts_offset = 48;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_parameter_types_offset = 28;
+    AOT_FunctionType_parameter_types_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_named_parameter_names_offset = 32;
+    AOT_FunctionType_named_parameter_names_offset = 36;
 static constexpr dart::compiler::target::word
-    AOT_FunctionType_type_parameters_offset = 20;
+    AOT_FunctionType_type_parameters_offset = 24;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    31;
+    35;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_nullability_offset = 33;
+    AOT_TypeParameter_nullability_offset = 37;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -12468,16 +12468,16 @@
 static constexpr dart::compiler::target::word
     AOT_TypeParameters_defaults_offset = 20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
-    24;
+    28;
 static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
-    32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+    36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
-    16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
     20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+    24;
 static constexpr dart::compiler::target::word
-    AOT_TypedDataView_offset_in_bytes_offset = 24;
+    AOT_TypedDataView_offset_in_bytes_offset = 28;
 static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
@@ -12529,7 +12529,7 @@
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
 static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
-    48;
+    56;
 static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_GrowableObjectArray_InstanceSize = 24;
@@ -12584,7 +12584,7 @@
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
     24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
     24;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 95358c6..1685ebf 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -94,6 +94,15 @@
 
   jsobj.AddProperty("library", Object::Handle(library()));
 
+  const intptr_t num_type_params = NumTypeParameters();
+  if (num_type_params > 0) {
+    JSONArray jsarr(&jsobj, "typeParameters");
+    TypeParameter& type_param = TypeParameter::Handle();
+    for (intptr_t i = 0; i < num_type_params; ++i) {
+      type_param = TypeParameterAt(i);
+      jsarr.AddValue(type_param);
+    }
+  }
   if (ref) {
     return;
   }
@@ -172,8 +181,10 @@
 }
 
 void TypeParameters::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  // Consider making this type public if we decide to expose TypeParameters
+  // through the protocol.
   JSONObject jsobj(stream);
-  jsobj.AddProperty("kind", "TypeParameters");
+  jsobj.AddProperty("kind", "_TypeParameters");
   jsobj.AddProperty("flags", Array::Handle(flags()));
   jsobj.AddProperty("names", Array::Handle(names()));
   jsobj.AddProperty("bounds", TypeArguments::Handle(bounds()));
@@ -317,6 +328,7 @@
   jsobj.AddProperty("_kind", kind_string);
   jsobj.AddProperty("static", is_static());
   jsobj.AddProperty("const", is_const());
+  jsobj.AddProperty("implicit", IsImplicitGetterOrSetter());
   jsobj.AddProperty("_intrinsic", is_intrinsic());
   jsobj.AddProperty("_native", is_native());
 
@@ -328,6 +340,9 @@
   if (ref) {
     return;
   }
+  const FunctionType& sig = FunctionType::Handle(signature());
+  jsobj.AddProperty("signature", sig);
+
   Code& code = Code::Handle(CurrentCode());
   if (!code.IsNull()) {
     jsobj.AddProperty("code", code);
@@ -1178,7 +1193,38 @@
   JSONObject jsobj(stream);
   PrintSharedInstanceJSON(&jsobj, ref);
   jsobj.AddProperty("kind", "FunctionType");
-  // TODO(regis): Function types were not handled before, necessary now?
+  AbstractType& type = AbstractType::Handle(result_type());
+  jsobj.AddProperty("returnType", type);
+
+  const int type_params_count = NumTypeParameters();
+  if (type_params_count > 0) {
+    JSONArray arr(&jsobj, "typeParameters");
+    TypeParameter& type_param = TypeParameter::Handle();
+    for (intptr_t i = 0; i < type_params_count; ++i) {
+      type_param = TypeParameterAt(i);
+      arr.AddValue(type_param);
+    }
+  }
+
+  {
+    JSONArray jsarr(&jsobj, "parameters");
+    String& name = String::Handle();
+    const intptr_t param_count = NumParameters();
+    const intptr_t fixed_param_count = num_fixed_parameters();
+    const bool has_named = HasOptionalNamedParameters();
+    for (intptr_t i = 0; i < param_count; ++i) {
+      JSONObject param(&jsarr);
+      type = ParameterTypeAt(i);
+      param.AddProperty("parameterType", type);
+      bool fixed = i < fixed_param_count;
+      param.AddProperty("fixed", fixed);
+      if (!fixed && has_named) {
+        name = ParameterNameAt(i);
+        param.AddProperty("name", name.ToCString());
+        param.AddProperty("required", IsRequiredAt(i));
+      }
+    }
+  }
 }
 
 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 9c07f25..0bce1aa 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -4345,7 +4345,7 @@
 
 ISOLATE_UNIT_TEST_CASE(PrintJSONPrimitives) {
   // WARNING: This MUST be big enough for the serialised JSON string.
-  const int kBufferSize = 1024;
+  const int kBufferSize = 4096;
   char buffer[kBufferSize];
   Isolate* isolate = Isolate::Current();
 
@@ -4396,6 +4396,7 @@
         "\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
         "\"_kind\":\"RegularFunction\",\"static\":false,\"const\":false,"
+        "\"implicit\":false,"
         "\"_intrinsic\":false,\"_native\":false,"
         "\"location\":{\"type\":\"SourceLocation\","
         "\"script\":{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\","
@@ -4543,18 +4544,42 @@
     ElideJSONSubstring("objects", buffer, buffer);
     ElideJSONSubstring("libraries", buffer, buffer);
     ElideJSONSubstring("_List@", buffer, buffer);
-    StripTokenPositions(buffer);
-    EXPECT_STREQ(
+    ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+    EXPECT_SUBSTRING(
         "{\"type\":\"@Instance\",\"_vmType\":\"Array\",\"class\":{\"type\":\"@"
         "Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_List\",\"_vmName\":"
         "\"\",\"location\":{\"type\":\"SourceLocation\",\"script\":{\"type\":"
-        "\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
-        "patch\\/array.dart\",\"_kind\":\"kernel\"}"
-        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+        "array.dart\",\"_kind\":\"kernel\"},\"tokenPos\":248,\"endTokenPos\":"
+        "7758},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+        "\"name\":\"dart.core\",\"uri\":\"dart:core\"},\"typeParameters\":[{"
+        "\"type\":\"@"
+        "Instance\",\"_vmType\":\"TypeParameter\",\"class\":{\"type\":\"@"
+        "Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_TypeParameter\",\"_"
+        "vmName\":\"\",\"location\":{\"type\":"
+        "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+        "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+        "type_patch.dart\",\"_kind\":\"kernel\"},\"tokenPos\":1584,"
+        "\"endTokenPos\":1729},\"library\":{\"type\":\"@Library\",\"fixedId\":"
         "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+        "\"identityHashCode\":",
+        buffer);
+
+    EXPECT_SUBSTRING(
+        "\"kind\":\"TypeParameter\",\"id\":\"\",\"name\":\"X0\","
+        "\"parameterizedClass\":{\"type\":\"@Instance\",\"_vmType\":\"Class\","
+        "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":"
+        "\"Null\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+        "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:"
+        "core\\/"
+        "null.dart\",\"_kind\":\"kernel\"},\"tokenPos\":925,\"endTokenPos\":"
+        "1165},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+        "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+        "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
         "\"identityHashCode\":0,\"kind\":\"List\",\"id\":\"\",\"length\":0}",
         buffer);
   }
+  OS::PrintErr("\n\n\n");
   // GrowableObjectArray reference
   {
     JSONStream js;
@@ -4568,16 +4593,40 @@
     ElideJSONSubstring("libraries", buffer, buffer);
     ElideJSONSubstring("_GrowableList@", buffer, buffer);
     StripTokenPositions(buffer);
-    EXPECT_STREQ(
+    ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+    EXPECT_SUBSTRING(
         "{\"type\":\"@Instance\",\"_vmType\":\"GrowableObjectArray\",\"class\":"
         "{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_"
         "GrowableList\",\"_vmName\":\"\",\"location\":{\"type\":"
         "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
-        "\"id\":\"\",\"uri\":\"dart:core-patch\\/growable_array.dart\",\"_"
-        "kind\":\"kernel\"}},"
-        "\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
-        "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"identityHashCode\":0,"
-        "\"kind\":\"List\",\"id\":\"\",\"length\":0}",
+        "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+        "growable_array.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"},"
+        "\"typeParameters\":[{\"type\":\"@Instance\",\"_vmType\":"
+        "\"TypeParameter\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+        "\"id\":\"\",\"name\":\"_TypeParameter\",\"_vmName\":\""
+        "\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+        "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
+        "patch\\/"
+        "type_patch.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+        "\"identityHashCode\":",
+        buffer);
+
+    EXPECT_SUBSTRING(
+        "\"kind\":\"TypeParameter\",\"id\":"
+        "\"\",\"name\":\"X0\",\"parameterizedClass\":{\"type\":\"@Instance\","
+        "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+        "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+        "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+        "\"id\":\"\",\"uri\":\"dart:core\\/"
+        "null.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+        "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+        "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
+        "\"identityHashCode\":0,\"kind\":\"List\",\"id\":\"\",\"length\":0}",
         buffer);
   }
   // LinkedHashMap reference
@@ -4593,15 +4642,61 @@
     ElideJSONSubstring("libraries", buffer, buffer);
     ElideJSONSubstring("_InternalLinkedHashMap@", buffer, buffer);
     StripTokenPositions(buffer);
-    EXPECT_STREQ(
+    ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+    EXPECT_SUBSTRING(
         "{\"type\":\"@Instance\",\"_vmType\":\"LinkedHashMap\",\"class\":{"
         "\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_"
         "InternalLinkedHashMap\",\"_vmName\":\"\",\"location\":{\"type\":"
         "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
-        "\"id\":\"\",\"uri\":\"dart:collection-patch\\/compact_hash.dart\",\"_"
-        "kind\":\"kernel\"}},"
-        "\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
-        "\"name\":\"dart.collection\",\"uri\":\"dart:collection\"}},"
+        "\"id\":\"\",\"uri\":\"dart:collection-patch\\/"
+        "compact_hash.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "true,\"id\":\"\",\"name\":\"dart.collection\",\"uri\":\"dart:"
+        "collection\"},\"typeParameters\":[{\"type\":\"@Instance\",\"_vmType\":"
+        "\"TypeParameter\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+        "\"id\":\"\",\"name\":\"_TypeParameter\",\"_vmName\":\""
+        "\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+        "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
+        "patch\\/"
+        "type_patch.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+        "\"identityHashCode\":",
+        buffer);
+
+    EXPECT_SUBSTRING(
+        "\"kind\":\"TypeParameter\",\"id\":"
+        "\"\",\"name\":\"X0\",\"parameterizedClass\":{\"type\":\"@Instance\","
+        "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+        "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+        "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+        "\"id\":\"\",\"uri\":\"dart:core\\/"
+        "null.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+        "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+        "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}},{\"type\":"
+        "\"@Instance\",\"_vmType\":\"TypeParameter\",\"class\":{\"type\":\"@"
+        "Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_TypeParameter\",\"_"
+        "vmName\":\"\",\"location\":{\"type\":"
+        "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+        "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+        "type_patch.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+        "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+        "\"identityHashCode\":",
+        buffer);
+
+    EXPECT_SUBSTRING(
+        "\"kind\":\"TypeParameter\",\"id\":"
+        "\"\",\"name\":\"X1\",\"parameterizedClass\":{\"type\":\"@Instance\","
+        "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+        "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+        "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+        "\"id\":\"\",\"uri\":\"dart:core\\/"
+        "null.dart\",\"_kind\":\"kernel\"}"
+        "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+        "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+        "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
         "\"identityHashCode\":0,\"kind\":\"Map\",\"id\":\"\",\"length\":0}",
         buffer);
   }
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index b9fd76f..3f7adfe 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2522,6 +2522,9 @@
 
   // Accessed from generated code.
   std::atomic<uword> type_test_stub_entry_point_;
+#if defined(DART_COMPRESSED_POINTERS)
+  uint32_t padding_;  // Makes Windows and Posix agree on layout.
+#endif
   COMPRESSED_POINTER_FIELD(CodePtr, type_test_stub)
   VISIT_FROM(type_test_stub)
 
@@ -2805,6 +2808,9 @@
 // Abstract base class for RawTypedData/RawExternalTypedData/RawTypedDataView.
 class UntaggedTypedDataBase : public UntaggedPointerBase {
  protected:
+#if defined(DART_COMPRESSED_POINTERS)
+  uint32_t padding_;  // Makes Windows and Posix agree on layout.
+#endif
   // The length of the view in element sizes (obtainable via
   // [TypedDataBase::ElementSizeInBytes]).
   COMPRESSED_SMI_FIELD(SmiPtr, length);
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 7f5a223..4c87d36 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
 namespace dart {
 
 #define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 49
+#define SERVICE_PROTOCOL_MINOR_VERSION 50
 
 class Array;
 class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index fe8233a..6e29e0f 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -117,6 +117,7 @@
   - [NativeFunction](#nativefunction)
   - [Null](#null)
   - [Object](#object)
+  - [Parameter](#parameter)[
   - [PortList](#portlist)
   - [ReloadReport](#reloadreport)
   - [Response](#response)
@@ -139,6 +140,7 @@
   - [TimelineFlags](#timelineflags)
   - [Timestamp](#timestamp)
   - [TypeArguments](#typearguments)
+  - [TypeParameters](#typeparameters)[
   - [UresolvedSourceLocation](#unresolvedsourcelocation)
   - [Version](#version)
   - [VM](#vm)
@@ -1694,6 +1696,11 @@
 
   // The library which contains this class.
   @Library library;
+
+  // The type parameters for the class.
+  //
+  // Provided if the class is generic.
+  @Instance[] typeParameters [optional];
 }
 ```
 
@@ -1710,6 +1717,11 @@
   // The library which contains this class.
   @Library library;
 
+  // The type parameters for the class.
+  //
+  // Provided if the class is generic.
+  @Instance[] typeParameters [optional];
+
   // The error which occurred during class finalization, if it exists.
   @Error error [optional];
 
@@ -2427,6 +2439,9 @@
   // Is this function const?
   bool const;
 
+  // Is this function implicitly defined (e.g., implicit getter/setter)?
+  bool implicit;
+
   // The location of this function in the source code.
   SourceLocation location [optional];
 }
@@ -2449,9 +2464,15 @@
   // Is this function const?
   bool const;
 
+  // Is this function implicitly defined (e.g., implicit getter/setter)?
+  bool implicit;
+
   // The location of this function in the source code.
   SourceLocation location [optional];
 
+  // The signature of the function.
+  @Instance signature;
+
   // The compiled code associated with this function.
   @Code code [optional];
 }
@@ -2529,12 +2550,29 @@
   //   Type
   @Class typeClass [optional];
 
-  // The parameterized class of a type parameter:
+  // The parameterized class of a type parameter.
   //
   // Provided for instance kinds:
   //   TypeParameter
   @Class parameterizedClass [optional];
 
+  // The return type of a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  @Instance returnType [optional];
+
+  // The list of parameter types for a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  Parameter[] parameters [optional];
+
+  // The type parameters for a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  @Instance[] typeParameters [optional];
 
   // The pattern of a RegExp instance.
   //
@@ -2694,6 +2732,24 @@
   //   TypeParameter
   @Class parameterizedClass [optional];
 
+  // The return type of a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  @Instance returnType [optional];
+
+  // The list of parameter types for a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  Parameter[] parameters [optional];
+
+  // The type parameters for a function.
+  //
+  // Provided for instance kinds:
+  //   FunctionType
+  @Instance[] typeParameters [optional];
+
   // The fields of this Instance.
   BoundField[] fields [optional];
 
@@ -2911,6 +2967,9 @@
   // An instance of the Dart class TypeRef.
   TypeRef,
 
+  // An instance of the Dart class FunctionType.
+  FunctionType,
+
   // An instance of the Dart class BoundedType.
   BoundedType,
 
@@ -3362,7 +3421,29 @@
 }
 ```
 
-An _Object_ is a  persistent object that is owned by some isolate.
+An _Object_ is a persistent object that is owned by some isolate.
+
+### Parameter
+
+```
+class Parameter {
+  // The type of the parameter.
+  @Instance parameterType;
+
+  // Represents whether or not this parameter is fixed or optional.
+  bool fixed;
+
+  // The name of a named optional parameter.
+  string name [optional];
+
+  // Whether or not this named optional parameter is marked as required.
+  bool required [optional];
+}
+```
+
+A _Parameter_ is a representation of a function parameter.
+
+See [Instance](#instance).
 
 ### PortList
 
@@ -3914,6 +3995,24 @@
 A _TypeArguments_ object represents the type argument vector for some
 instantiated generic type.
 
+### TypeParameters
+
+```
+class TypeParameters {
+  // The names of the type parameters.
+  string[] names;
+
+  // The bounds set on each type parameter.
+  @TypeArguments bounds;
+
+  // The default types for each type parameter.
+  @TypeArguments defaults;
+}
+```
+
+A _TypeParameters_ object represents the type argument vector for some
+uninstantiated generic type.
+
 ### UnresolvedSourceLocation
 
 ```
@@ -4076,5 +4175,6 @@
 3.47 | Added `shows` and `hides` properties to `LibraryDependency`.
 3.48 | Added `Profiler` stream, `UserTagChanged` event kind, and `updatedTag` and `previousTag` properties to `Event`.
 3.49 | Added `CpuSamples` event kind, and `cpuSamples` property to `Event`.
+3.50 | Added `returnType`, `parameters`, and `typeParameters` to `@Instance`, and `implicit` to `@Function`. Added `Parameter` type.
 
 [discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index ad8c574..5934703 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -497,7 +497,7 @@
 
 ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_SimpleCall) {
   // WARNING: This MUST be big enough for the serialised JSON string.
-  const int kBufferSize = 1024;
+  const int kBufferSize = 2048;
   char buffer[kBufferSize];
   const char* kScript =
       "helper0() {}\n"
@@ -537,6 +537,7 @@
       "\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true,"
       "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"},"
       "\"_kind\":\"RegularFunction\",\"static\":true,\"const\":false,"
+      "\"implicit\":false,"
       "\"_intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
       "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
       "\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
@@ -617,7 +618,8 @@
       "\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
       "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
       "},\"_kind\":\"RegularFunction\","
-      "\"static\":false,\"const\":false,\"_intrinsic\":false,"
+      "\"static\":false,\"const\":false,\"implicit\":false,\"_intrinsic\":"
+      "false,"
       "\"_native\":false,"
       "\"location\":{\"type\":\"SourceLocation\","
       "\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
@@ -649,7 +651,8 @@
       "\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
       "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
       "},\"_kind\":\"RegularFunction\","
-      "\"static\":false,\"const\":false,\"_intrinsic\":false,"
+      "\"static\":false,\"const\":false,\"implicit\":false,\"_intrinsic\":"
+      "false,"
       "\"_native\":false,"
       "\"location\":{\"type\":\"SourceLocation\","
       "\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
@@ -705,7 +708,8 @@
       "\"target\":{\"type\":\"@Function\",\"fixedId\":true,\"id\":\"\","
       "\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true,"
       "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"},\"_"
-      "kind\":\"RegularFunction\",\"static\":true,\"const\":false,\"_"
+      "kind\":\"RegularFunction\",\"static\":true,\"const\":false,\"implicit\":"
+      "false,\"_"
       "intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
       "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
       "\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
index feb5ef1..033b303 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
@@ -9,6 +9,7 @@
 
 import 'dart:_js_helper' show patch, NoReifyGeneric, Primitives;
 import 'dart:_foreign_helper' show JS;
+import 'dart:_interceptors' show JavaScriptObject;
 import 'dart:_runtime' as dart;
 
 @patch
@@ -367,7 +368,7 @@
     int ms = JS('!', '#.getTime()', o);
     return DateTime.fromMillisecondsSinceEpoch(ms);
   } else if (o is _DartObject &&
-      !identical(dart.getReifiedType(o), dart.jsobject)) {
+      !identical(dart.getReifiedType(o), dart.typeRep<JavaScriptObject>())) {
     return o._dartObj;
   } else {
     return _wrapToDart(o);
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
index 1f362a8..9e99b26 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
@@ -92,13 +92,13 @@
         return JS('', '#.constructor', obj);
       }
       var result = JS('', '#[#]', obj, _extensionType);
-      if (result == null) return JS('', '#', jsobject);
+      if (result == null) return typeRep<JavaScriptObject>();
       return result;
     case "function":
       // All Dart functions and callable classes must set _runtimeType
       var result = JS('', '#[#]', obj, _runtimeType);
       if (result != null) return result;
-      return JS('', '#', jsobject);
+      return typeRep<JavaScriptObject>();
     case "undefined":
       return JS('', '#', Null);
     case "number":
@@ -109,7 +109,7 @@
       return JS('', '#', String);
     case "symbol":
     default:
-      return JS('', '#', jsobject);
+      return typeRep<JavaScriptObject>();
   }
 }
 
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
index e4afbf4..2cd212a 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
@@ -10,7 +10,8 @@
 
 import 'dart:_debugger' show stackTraceMapper, trackCall;
 import 'dart:_foreign_helper' show JS, JSExportName, rest, spread;
-import 'dart:_interceptors' show JSArray, jsNull, JSFunction, NativeError;
+import 'dart:_interceptors'
+    show JSArray, jsNull, JSFunction, NativeError, JavaScriptObject;
 import 'dart:_internal' as internal show LateError, Symbol;
 import 'dart:_js_helper'
     show
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index 7874940..e48e530 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -154,7 +154,8 @@
 }
 
 @notNull
-bool _isJsObject(obj) => JS('!', '# === #', getReifiedType(obj), jsobject);
+bool _isJsObject(obj) =>
+    JS('!', '# === #', getReifiedType(obj), typeRep<JavaScriptObject>());
 
 /// Asserts that [f] is a native JS functions and returns it if so.
 ///
@@ -237,7 +238,7 @@
     return raw;
   }
 
-  Object rawJSTypeForCheck() => _getRawJSType() ?? jsobject;
+  Object rawJSTypeForCheck() => _getRawJSType() ?? typeRep<JavaScriptObject>();
 
   @notNull
   @JSExportName('is')
@@ -478,12 +479,6 @@
 
 final bottom = unwrapType(Null);
 
-class JSObjectType extends DartType {
-  toString() => 'NativeJavaScriptObject';
-}
-
-final jsobject = JSObjectType();
-
 /// Dev Compiler's implementation of Type, wrapping its internal [_type].
 class _Type extends Type {
   /// The internal type representation, either a [DartType] or class constructor
@@ -1518,8 +1513,43 @@
       return ${_equalType(t2, Function)};
     }
 
-    // All JS types are subtypes of anonymous JS types.
-    if ($t1 === $jsobject && ${_jsInstanceOf(t2, AnonymousJSType)}) {
+    // Even though lazy and anonymous JS types are natural subtypes of
+    // JavaScriptObject, JS types should be treated as mutual subtypes of each
+    // other. This allows users to be able to interface with both extension
+    // types on JavaScriptObject and package:js using the same object.
+    //
+    // Therefore, the following relationships hold true:
+    //
+    // JavaScriptObject <: package:js types
+    // package:js types <: JavaScriptObject
+    //
+    // TODO: This doesn't allow package:js type <: another package:js type yet.
+
+    if (${_isInterfaceSubtype(t1, JavaScriptObject, strictMode)}
+        && (${_jsInstanceOf(t2, LazyJSType)}
+            || ${_jsInstanceOf(t2, AnonymousJSType)}
+            // TODO: Since package:js types are instances of LazyJSType and
+            // AnonymousJSType, we don't have a mechanism to determine if *some*
+            // package:js type implements t2. This will possibly require keeping
+            // a map of these relationships for this subtyping check. For now,
+            // don't execute the following checks.
+            // || _isInterfaceSubtype(LazyJSType, t2, strictMode)
+            // || _isInterfaceSubtype(AnonymousJSType, t2, strictMode)
+            )) {
+      return true;
+    }
+
+    if (${_isInterfaceSubtype(JavaScriptObject, t2, strictMode)}
+        && (${_jsInstanceOf(t1, LazyJSType)}
+            || ${_jsInstanceOf(t1, AnonymousJSType)}
+            // TODO: We don't have a check in `isInterfaceSubtype` to check that
+            // a class is a subtype of *some* package:js class. This will likely
+            // require modifying `_isInterfaceSubtype` to check if the
+            // interfaces of t1 include a package:js type. For now, don't
+            // execute the following checks.
+            // || _isInterfaceSubtype(t1, LazyJSType, strictMode)
+            // || _isInterfaceSubtype(t1, AnonymousJSType, strictMode)
+            )) {
       return true;
     }
 
diff --git a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
index 71c559c..fdc771d 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
@@ -74,45 +74,40 @@
   operator []=(int index, E value);
 }
 
-/**
- * The interface implemented by JavaScript objects.  These are methods in
- * addition to the regular Dart Object methods like [Object.hashCode].
- *
- * This is the type that should be exported by a JavaScript interop library.
- */
+/// The interface implemented by JavaScript objects.
+///
+/// These are methods in addition to the regular Dart Object methods like
+/// [Object.hashCode]. This is the type that should be exported by a JavaScript
+/// interop library.
 abstract class JSObject {}
 
-/**
- * Interceptor base class for JavaScript objects not recognized as some more
- * specific native type.
- */
+/// Interceptor base class for JavaScript objects not recognized as some more
+/// specific native type.
+
+/// Unlike dart2js, ddc does not intercept JS objects, so this is only used as
+/// an on-type for JS interop extension types. All JS interop objects should be
+/// castable to this type.
 abstract class JavaScriptObject extends Interceptor implements JSObject {
   const JavaScriptObject();
-
-  // It would be impolite to stash a property on the object.
-  int get hashCode => 0;
-
-  Type get runtimeType => JSObject;
 }
 
-/**
- * Interceptor for plain JavaScript objects created as JavaScript object
- * literals or `new Object()`.
- */
+/// Interceptor for plain JavaScript objects created as JavaScript object
+/// literals or `new Object()`.
+///
+/// Note that this isn't being used today in ddc. Instead of using interceptors,
+/// we have other type logic to distinguish JS types.
 class PlainJavaScriptObject extends JavaScriptObject {
   const PlainJavaScriptObject();
 }
 
-/**
- * Interceptor for unclassified JavaScript objects, typically objects with a
- * non-trivial prototype chain.
- *
- * This class also serves as a fallback for unknown JavaScript exceptions.
- */
+/// Interceptor for unclassified JavaScript objects, typically objects with a
+/// non-trivial prototype chain.
+///
+/// This class also serves as a fallback for unknown JavaScript exceptions.
+/// Note that this isn't being used today in ddc. Instead of using interceptors,
+/// we have other type logic to distinguish JS types.
 class UnknownJavaScriptObject extends JavaScriptObject {
   const UnknownJavaScriptObject();
-
-  String toString() => JS<String>('!', 'String(#)', this);
 }
 
 class NativeError extends Interceptor {
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 7f6f21b..15695c1 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -13442,7 +13442,7 @@
    *     var createdElement = document.body.children[0];
    *     print(createdElement.classes[0]); // Prints 'something'
    * ```
-   * 
+   *
    * See also:
    *
    * * [insertAdjacentText]
@@ -36529,7 +36529,7 @@
    * This is equivalent to the `height` function in jQuery and the calculated
    * `height` CSS value, converted to a dimensionless num in pixels. Unlike
    * [Element.getBoundingClientRect], `height` will return the same numerical
-   * width if the element is hidden or not.
+   * height if the element is hidden or not.
    */
   num get height;
 
@@ -37100,7 +37100,7 @@
       new _EventStream<T>(e, _eventType, useCapture);
 
   /**
-   * Gets an [Stream] for this event type, on the specified element.
+   * Gets a [Stream] for this event type, on the specified element.
    *
    * This will always return a broadcast stream so multiple listeners can be
    * used simultaneously.
@@ -37126,7 +37126,7 @@
   }
 
   /**
-   * Gets an [ElementEventStream] for this event type, on the list of elements.
+   * Gets a [Stream] for this event type, on the list of elements.
    *
    * This will always return a broadcast stream so multiple listeners can be
    * used simultaneously.
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 455de12..ad56eea 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -89,13 +89,11 @@
   static KeyRange createKeyRange_only(/*Key*/ value) =>
       _only(_class(), _translateKey(value));
 
-  static KeyRange createKeyRange_lowerBound(
-          /*Key*/ bound,
+  static KeyRange createKeyRange_lowerBound(/*Key*/ bound,
           [bool open = false]) =>
       _lowerBound(_class(), _translateKey(bound), open);
 
-  static KeyRange createKeyRange_upperBound(
-          /*Key*/ bound,
+  static KeyRange createKeyRange_upperBound(/*Key*/ bound,
           [bool open = false]) =>
       _upperBound(_class(), _translateKey(bound), open);
 
diff --git a/tests/language/constructor/tear_off_test.dart b/tests/language/constructor/tear_off_test.dart
index f890b44..a0764886 100644
--- a/tests/language/constructor/tear_off_test.dart
+++ b/tests/language/constructor/tear_off_test.dart
@@ -24,18 +24,16 @@
   const NGenRedir._(this.x);
 }
 
-class NFac {
+class NFac implements NFacRedir {
   final int x;
-  factory NFac(int x) => NFacRedir._(x);
-  factory NFac.named(int x) => NFacRedir._(x);
-  NFac._(this.x);
+  factory NFac(int x) => NFac._(x);
+  factory NFac.named(int x) => NFac._(x);
+  const NFac._(this.x);
 }
 
 class NFacRedir {
-  final int x;
   const factory NFacRedir(int x) = NFac._;
   const factory NFacRedir.named(int x) = NFac._;
-  NFacRedir._(this.x);
 }
 
 // Generic classes.
@@ -52,18 +50,16 @@
   const GGenRedir._(this.x);
 }
 
-class GFac<T> {
+class GFac<T> implements GFacRedir<T> {
   final int x;
-  factory GFac(int x) => GFacRedir._(x);
-  factory GFac.named(int x) => GFacRedir._(x);
-  GFac._(this.x);
+  factory GFac(int x) => GFac._(x);
+  factory GFac.named(int x) => GFac._(x);
+  const GFac._(this.x);
 }
 
 class GFacRedir<T> {
-  final int x;
   const factory GFacRedir(int x) = GFac._;
   const factory GFacRedir.named(int x) = GFac._;
-  GFacRedir._(this.x);
 }
 
 class Optional<T> {
@@ -96,9 +92,9 @@
   GGen<int>.new.expectStaticType<Exactly<GGen<int> Function(int)>>();
   GGen<int>.named.expectStaticType<Exactly<GGen<int> Function(int)>>();
   GGenRedir<int>.new
-      .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+      .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
   GGenRedir<int>.named
-      .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+      .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
   GFac<int>.new.expectStaticType<Exactly<GFac<int> Function(int)>>();
   GFac<int>.named.expectStaticType<Exactly<GFac<int> Function(int)>>();
   GFacRedir<int>.new
@@ -106,26 +102,26 @@
   GFacRedir<int>.named
       .expectStaticType<Exactly<GFacRedir<int> Function(int)>>();
 
-  contextType<GGen<int> Function(int)>(
+  context<GGen<int> Function(int)>(
       GGen.new..expectStaticType<Exactly<GGen<int> Function(int)>>());
-  contextType<GGen<int> Function(int)>(
+  context<GGen<int> Function(int)>(
       GGen.named..expectStaticType<Exactly<GGen<int> Function(int)>>());
-  contextType<GGenRedir<int> Function(int)>(GGenRedir.new
+  context<GGenRedir<int> Function(int)>(GGenRedir.new
     ..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
-  contextType<GGenRedir<int> Function(int)>(GGenRedir.named
+  context<GGenRedir<int> Function(int)>(GGenRedir.named
     ..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
-  contextType<GFac<int> Function(int)>(
+  context<GFac<int> Function(int)>(
       GFac.new..expectStaticType<Exactly<GFac<int> Function(int)>>());
-  contextType<GFac<int> Function(int)>(
+  context<GFac<int> Function(int)>(
       GFac.named..expectStaticType<Exactly<GFac<int> Function(int)>>());
-  contextType<GFacRedir<int> Function(int)>(
+  context<GFacRedir<int> Function(int)>(
       GFacRedir.new..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
-  contextType<GFacRedir<int> Function(int)>(GFacRedir.named
+  context<GFacRedir<int> Function(int)>(GFacRedir.named
     ..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
 
-  contextType<Optional<int> Function()>(Optional.new
+  context<Optional<int> Function()>(Optional.new
     ..expectStaticType<Exactly<Optional<int> Function([int, int])>>());
-  contextType<Optional<int> Function()>(Optional.named
+  context<Optional<int> Function()>(Optional.named
     ..expectStaticType<Exactly<Optional<int> Function({int x, int y})>>());
 
   // Check that tear-offs are canonicalized where possible
diff --git a/tests/language/static_type_helper.dart b/tests/language/static_type_helper.dart
index 4a7809a..14acd63 100644
--- a/tests/language/static_type_helper.dart
+++ b/tests/language/static_type_helper.dart
@@ -6,7 +6,7 @@
 Type typeOf<T>() => T;
 
 /// Ensures a context type of [T] for the operand.
-void context<T>(T x) {}
+Object? context<T>(T x) => x;
 
 /// Captures the context type of the call and returns the same type.
 ///
diff --git a/tests/language/type_object/explicit_instantiated_type_literal_test.dart b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
index 07fa243..6b3b07f 100644
--- a/tests/language/type_object/explicit_instantiated_type_literal_test.dart
+++ b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
@@ -18,8 +18,8 @@
 Type type<T>() => T;
 
 void main() {
-  C.expectStaticType<Type>();
-  C<int>.expectStaticType<Type>();
+  (C).expectStaticType<Exactly<Type>>();
+  (C<int>).expectStaticType<Exactly<Type>>();
 
   Expect.identical(C<num>, C);
   Expect.identical(C<int>, C<int>);
@@ -30,8 +30,8 @@
   Expect.identical(C<dynamic>, C<dynamic>);
   Expect.equals(C<dynamic>, type<C<dynamic>>());
 
-  prefix.C.expectStaticType<Type>();
-  prefix.C<int>.expectStaticType<Type>();
+  (prefix.C).expectStaticType<Exactly<Type>>();
+  (prefix.C<int>).expectStaticType<Exactly<Type>>();
 
   Expect.identical(prefix.C<num>, prefix.C);
   Expect.identical(prefix.C<int>, prefix.C<int>);
diff --git a/tests/language/typedef/aliased_constructor_tear_off_test.dart b/tests/language/typedef/aliased_constructor_tear_off_test.dart
index e63b693..7d51dfb 100644
--- a/tests/language/typedef/aliased_constructor_tear_off_test.dart
+++ b/tests/language/typedef/aliased_constructor_tear_off_test.dart
@@ -14,7 +14,7 @@
 void use(Type type) {}
 
 class C<T> {
-  final T value;
+  final T x;
   C(this.x);
   C.named(this.x);
 }
@@ -37,7 +37,7 @@
   // or if instantiated with a constant type.
   const List<Object> constructors = [
     Special.new,
-    Spceial.named,
+    Special.named,
     Direct.new,
     Direct.named,
     Bounded.new,
@@ -64,12 +64,12 @@
       Wrapping.new,
       Wrapping.named,
     ],
-    const <C<int, int> Function(C<int>)>[
+    const <C<int> Function(int)>[
       Extra.new,
       Extra.named,
     ]
   ];
-  Expect.notNull(constructors); // Use variable.
+  Expect.isNotNull(constructors); // Use variable.
 
   // The static type is as expected.
 
@@ -83,8 +83,8 @@
   Bounded.new.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
   Bounded.named.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
 
-  Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
-  Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
+  Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
+  Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
 
   Extra.new.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
   Extra.named.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
@@ -105,24 +105,24 @@
   Extra<int, String>.named.expectStaticType<Exactly<C<int> Function(int)>>();
 
   // Implicitly instantiated.
-  contextType<C<int> Function(int)>(
-      Direct<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int> Function(int)>(
-      Direct<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Direct.new..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Direct.named..expectStaticType<Exactly<C<int> Function(int)>>());
 
-  contextType<C<int> Function(int)>(
-      Bounded<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int> Function(int)>(
-      Bounded<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Bounded.new..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Bounded.named..expectStaticType<Exactly<C<int> Function(int)>>());
 
-  contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.new
+  context<C<C<int>> Function(C<int>)>(Wrapping.new
     ..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
-  contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.named
+  context<C<C<int>> Function(C<int>)>(Wrapping.named
     ..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
 
-  contextType<C<int, String> Function(int)>(Extra<int, String>.new
+  context<C<int> Function(int)>(Extra.new
     ..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int, String> Function(int)>(Extra<int, String>.named
+  context<C<int> Function(int)>(Extra.named
     ..expectStaticType<Exactly<C<int> Function(int)>>());
 
   // Uninstantiated tear-offs always canonicalize.
@@ -176,35 +176,35 @@
 
   // Implicit instantiation.
   Expect.identical(
-    contextType<C<int> Function(int)>(Direct.new),
+    context<C<int> Function(int)>(Direct.new),
     C<int>.new,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Direct.named),
+    context<C<int> Function(int)>(Direct.named),
     C<int>.named,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Bounded.new),
+    context<C<int> Function(int)>(Bounded.new),
     C<int>.new,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Bounded.named),
+    context<C<int> Function(int)>(Bounded.named),
     C<int>.named,
   );
   Expect.identical(
-    contextType<C<C<int>> Function(C<int>)>(Wrapping.new),
+    context<C<C<int>> Function(C<int>)>(Wrapping.new),
     C<C<int>>.new,
   );
   Expect.identical(
-    contextType<C<C<int>> Function(C<int>)>(Wrapping.named),
+    context<C<C<int>> Function(C<int>)>(Wrapping.named),
     C<C<int>>.named,
   );
   Expect.identical(
-    contextType<D<int, String> Function()>(Swapped.new),
+    context<D<int, String> Function()>(Swapped.new),
     D<int, String>.new,
   );
   Expect.identical(
-    contextType<D<int, String> Function()>(Swapped.named),
+    context<D<int, String> Function()>(Swapped.named),
     D<int, String>.named,
   );
 
diff --git a/tests/language/typedef/aliased_type_literal_instantiation_test.dart b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
index c99e904..25dc8f9 100644
--- a/tests/language/typedef/aliased_type_literal_instantiation_test.dart
+++ b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
@@ -10,7 +10,7 @@
 import "package:expect/expect.dart";
 
 class C<T> {
-  final T value;
+  final T x;
   C(this.x);
   C.named(this.x);
 }
@@ -55,7 +55,7 @@
   Expect.identical(e2, co);
   Expect.identical(e3, ci);
 
-  (<T>() {
+  (<T extends num>() {
     // Using a non-constant type.
     Expect.equals(Direct<T>, ci);
     Expect.equals(Bounded<T>, ci);
diff --git a/tools/VERSION b/tools/VERSION
index 1d8f46a..ca41d7f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 345
+PRERELEASE 346
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index f24f9ed..72cf73a 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -117,7 +117,9 @@
         "/**",
         " * An opaque canvas object representing a gradient.",
         " *",
-        " * Created by calling [createLinearGradient] or [createRadialGradient] on a",
+        " * Created by calling the methods",
+        " * [CanvasRenderingContext2D.createLinearGradient] or",
+        " * [CanvasRenderingContext2D.createRadialGradient] on a",
         " * [CanvasRenderingContext2D] object.",
         " *",
         " * Example usage:",
@@ -164,7 +166,8 @@
         "/**",
         " * An opaque object representing a pattern of image, canvas, or video.",
         " *",
-        " * Created by calling [createPattern] on a [CanvasRenderingContext2D] object.",
+        " * Created by calling [CanvasRenderingContext2D.createPattern] on a",
+        " * [CanvasRenderingContext2D] object.",
         " *",
         " * Example usage:",
         " *",
@@ -2553,7 +2556,7 @@
           "   * * [COMMENT_NODE] if this node is a [Comment].",
           "   * * [DOCUMENT_FRAGMENT_NODE] if this node is a [DocumentFragment].",
           "   * * [DOCUMENT_NODE] if this node is a [Document].",
-          "   * * [DOCUMENT_TYPE_NODE] if this node is a [DocumentType] node.",
+          "   * * [DOCUMENT_TYPE_NODE] if this node is a [_DocumentType] node.",
           "   * * [ELEMENT_NODE] if this node is an [Element].",
           "   * * [ENTITY_NODE] if this node is an entity.",
           "   * * [ENTITY_REFERENCE_NODE] if this node is an entity reference.",
@@ -3171,7 +3174,7 @@
         " * The message event handler receives a [MessageEvent] object",
         " * as its sole argument.",
         " * You can also define open, close, and error handlers,",
-        " * as specified by [WebSocketEvents].",
+        " * as specified by [Event]s.",
         " *",
         " * For more information, see the",
         " * [WebSockets](http://www.dartlang.org/docs/library-tour/#html-websockets)",
@@ -4355,7 +4358,8 @@
           "   * Length of time in milliseconds before a request is automatically",
           "   * terminated.",
           "   *",
-          "   * When the time has passed, a [TimeoutEvent] is dispatched.",
+          "   * When the time has passed, a [HttpRequestEventTarget.timeoutEvent] is",
+          "   * dispatched.",
           "   *",
           "   * If [timeout] is set to 0, then the request will not time out.",
           "   *",
@@ -4370,7 +4374,6 @@
         "upload": [
           "/**",
           "   * [EventTarget] that can hold listeners to track the progress of the request.",
-          "   * The events fired will be members of [HttpRequestUploadEvents].",
           "   */"
         ],
         "withCredentials": [
@@ -5157,9 +5160,9 @@
           "/**",
           "   * Get a Stream that fires events when AudioProcessingEvents occur.",
           "   * This particular stream is special in that it only allows one listener to a",
-          "   * given stream. Converting the returned Stream [asBroadcast] will likely ruin",
-          "   * the soft-real-time properties which which these events are fired and can",
-          "   * be processed.",
+          "   * given stream. Converting the returned [Stream.asBroadcastStream] will",
+          "   * likely ruin the soft-real-time properties which which these events are",
+          "   * fired and can be processed.",
           "   */"
         ]
       }
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 6e529a4..944d36a 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -207,9 +207,9 @@
         prefix_arg, 'cd', library_dir, ';', copy_dart_script, output_dir, library_filename
     ])
     subprocess.call([command], shell=True)
-    prebuilt_dartfmt = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dartfmt')
+    dart_bin = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart')
     sdk_file = os.path.join(library_dir, output_dir, library_filename)
-    formatCommand = ' '.join([prebuilt_dartfmt, '-w', sdk_file])
+    formatCommand = ' '.join([dart_bin, 'format', sdk_file])
     subprocess.call([formatCommand], shell=True)
 
 
diff --git a/tools/dom/src/CssRectangle.dart b/tools/dom/src/CssRectangle.dart
index d26aac7..6aa6393 100644
--- a/tools/dom/src/CssRectangle.dart
+++ b/tools/dom/src/CssRectangle.dart
@@ -182,8 +182,8 @@
    *
    * This is equivalent to the `height` function in jQuery and the calculated
    * `height` CSS value, converted to a dimensionless num in pixels. Unlike
-   * [getBoundingClientRect], `height` will return the same numerical width if
-   * the element is hidden or not.
+   * [Element.getBoundingClientRect], `height` will return the same numerical
+   * height if the element is hidden or not.
    */
   num get height;
 
@@ -192,8 +192,8 @@
    *
    * This is equivalent to the `width` function in jQuery and the calculated
    * `width` CSS value, converted to a dimensionless num in pixels. Unlike
-   * [getBoundingClientRect], `width` will return the same numerical width if
-   * the element is hidden or not.
+   * [Element.getBoundingClientRect], `width` will return the same numerical
+   * width if the element is hidden or not.
    */
   num get width;
 
diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
index feadc26..90b19aa 100644
--- a/tools/dom/src/EventStreamProvider.dart
+++ b/tools/dom/src/EventStreamProvider.dart
@@ -38,7 +38,7 @@
       new _EventStream<T>(e, _eventType, useCapture);
 
   /**
-   * Gets an [ElementEventStream] for this event type, on the specified element.
+   * Gets a [Stream] for this event type, on the specified element.
    *
    * This will always return a broadcast stream so multiple listeners can be
    * used simultaneously.
@@ -64,7 +64,7 @@
   }
 
   /**
-   * Gets an [ElementEventStream] for this event type, on the list of elements.
+   * Gets a [Stream] for this event type, on the list of elements.
    *
    * This will always return a broadcast stream so multiple listeners can be
    * used simultaneously.
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index 0b19506..fd4069b 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -18,6 +18,7 @@
  * For information on writing web apps with Dart, see https://dart.dev/web.
  *
  * {@category Web}
+ * {@canonicalFor dart:_internal.HttpStatus}
  */
 library dart.dom.html;
 
diff --git a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
index dc05346..8373820 100644
--- a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
@@ -69,8 +69,6 @@
  * basic mechanism that stores data as a [Map],
  * and where both the keys and the values are strings.
  *
- * * [dart:web_sql]&mdash;a database that can be queried with SQL.
- *
  * MDN provides [API
  * documentation](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API).
  *
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index 2e9ba25..ec1f2e4 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -279,7 +279,7 @@
    * options, such as typeface and size, and the current
    * [CanvasRenderingContext2D.fillStyle] for style options such as color.
    * The current [CanvasRenderingContext2D.textAlign] and
-   * [CanvasRenderingContext2D.textBaseLine] properties are also applied to the
+   * [CanvasRenderingContext2D.textBaseline] properties are also applied to the
    * drawn text.
    */
   void fillText(String text, num x, num y, [num$NULLABLE maxWidth]) {
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 4368af2..fadfc3b 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -215,7 +215,7 @@
   CssStyleDeclarationBase get style;
 
   /**
-   * Access dimensions and position of the Elements in this list.
+   * Access dimensions and position of the [Element]s in this list.
    *
    * Setting the height or width properties will set the height or width
    * property for all elements in the list. This returns a rectangle with the
@@ -224,46 +224,48 @@
    * property. Getting the height or width returns the height or width of the
    * first Element in this list.
    *
-   * Unlike [getBoundingClientRect], the dimensions of this rectangle
+   * Unlike [Element.getBoundingClientRect], the dimensions of this rectangle
    * will return the same numerical height if the element is hidden or not.
    */
   CssRect get contentEdge;
 
   /**
-   * Access dimensions and position of the first Element's content + padding box
-   * in this list.
+   * Access dimensions and position of the first [Element]'s content + padding
+   * box in this list.
    *
    * This returns a rectangle with the dimensions actually available for content
    * in this element, in pixels, regardless of this element's box-sizing
-   * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
-   * will return the same numerical height if the element is hidden or not. This
-   * can be used to retrieve jQuery's `innerHeight` value for an element. This
-   * is also a rectangle equalling the dimensions of clientHeight and
-   * clientWidth.
+   * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+   * rectangle will return the same numerical height if the element is hidden
+   * or not. This can be used to retrieve jQuery's `innerHeight` value for an
+   * element. This is also a rectangle equalling the dimensions of clientHeight
+   * and clientWidth.
    */
   CssRect get paddingEdge;
 
   /**
-   * Access dimensions and position of the first Element's content + padding +
+   * Access dimensions and position of the first [Element]'s content + padding +
    * border box in this list.
    *
    * This returns a rectangle with the dimensions actually available for content
    * in this element, in pixels, regardless of this element's box-sizing
-   * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
-   * will return the same numerical height if the element is hidden or not. This
-   * can be used to retrieve jQuery's `outerHeight` value for an element.
+   * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+   * rectangle will return the same numerical height if the element is hidden
+   * or not. This can be used to retrieve jQuery's `outerHeight` value for an
+   * element.
    */
   CssRect get borderEdge;
 
   /**
-   * Access dimensions and position of the first Element's content + padding +
+   * Access dimensions and position of the first [Element]'s content + padding +
    * border + margin box in this list.
    *
    * This returns a rectangle with the dimensions actually available for content
    * in this element, in pixels, regardless of this element's box-sizing
-   * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
-   * will return the same numerical height if the element is hidden or not. This
-   * can be used to retrieve jQuery's `outerHeight` value for an element.
+   * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+   * rectangle will return the same numerical height if the element is hidden
+   * or not. This can be used to retrieve jQuery's `outerHeight` value for an
+   * element.
    */
   CssRect get marginEdge;
 $!STREAM_GETTER_SIGNATURES
@@ -927,9 +929,9 @@
    *
    * The [frames] parameter is an Iterable<Map>, where the
    * map entries specify CSS animation effects. The
-   * [timing] paramter can be a double, representing the number of milliseconds
-   * for the transition, or a Map with fields corresponding to those
-   * of the [Timing] object.
+   * [timing] parameter can be a double, representing the number of
+   * milliseconds for the transition, or a Map with fields corresponding to
+   * those of the [timing] object.
    */
   @SupportedBrowser(SupportedBrowser.CHROME, '36')
   Animation animate(Iterable<Map<String, dynamic>> frames, [timing]) {
@@ -1081,11 +1083,13 @@
    * * 'beforeEnd': As the last child of this element.
    * * 'afterEnd': Immediately after this element.
    *
+   * ```dart
    *     var html = '<div class="something">content</div>';
    *     // Inserts as the first child
    *     document.body.insertAdjacentHtml('afterBegin', html);
    *     var createdElement = document.body.children[0];
    *     print(createdElement.classes[0]); // Prints 'something'
+   * ```
    *
    * See also:
    *
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index 19aa838..50f57db 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -463,7 +463,7 @@
 
 
 /**
- * A control that when used with other [ReadioButtonInputElement] controls
+ * A control that when used with other [RadioButtonInputElement] controls
  * forms a radio button group in which only one control can be checked at a
  * time.
  *
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 98e07f0..15f8219 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -157,8 +157,8 @@
   /**
    * Gets an instance of the Indexed DB factory to being using Indexed DB.
    *
-   * Use [indexed_db.IdbFactory.supported] to check if Indexed DB is supported on the
-   * current platform.
+   * Use [dart:indexed_db.IdbFactory.supported] to check if Indexed DB is
+   * supported on the current platform.
    */
   @SupportedBrowser(SupportedBrowser.CHROME, '23.0')
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15.0')
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 44d7ea4..7e92f1d 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -148,7 +148,7 @@
    * * Using credentials is only useful for cross-origin requests.
    * * The `Access-Control-Allow-Origin` header of `url` cannot contain a wildcard (*).
    * * The `Access-Control-Allow-Credentials` header of `url` must be set to true.
-   * * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllRequestHeaders].
+   * * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllResponseHeaders].
    *
    * The following is equivalent to the [getString] sample above:
    *