Version 2.19.0-9.0.dev

Merge commit '09680ec704a94f37da82cec1c4a63125d81f8410' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55f8cdd..7438d5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,11 @@
   non-final variable.
 - fix`use_build_context_synchronously` to handle `await`s in `if` conditions.
 
+#### `dart:io`
+
+- **Breaking Change** [#49305](https://github.com/dart-lang/sdk/issues/49305):
+  Disallow negative or hexadecimal content-length headers.
+
 ## 2.18.0
 
 ### Language
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index 1a88115..ff8ea9d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -30,8 +30,8 @@
   /// Initialize a newly created instance that will propose classes and mixins.
   ChangeTo.classOrMixin() : _kind = _ReplacementKind.classOrMixin;
 
-  /// Initialize a newly created instance that will propose formal parameters.
-  ChangeTo.formalParameter() : _kind = _ReplacementKind.formalParameter;
+  /// Initialize a newly created instance that will propose fields.
+  ChangeTo.field() : _kind = _ReplacementKind.field;
 
   /// Initialize a newly created instance that will propose functions.
   ChangeTo.function() : _kind = _ReplacementKind.function;
@@ -42,6 +42,11 @@
   /// Initialize a newly created instance that will propose methods.
   ChangeTo.method() : _kind = _ReplacementKind.method;
 
+  /// Initialize a newly created instance that will propose super formal
+  /// parameters.
+  ChangeTo.superFormalParameter()
+      : _kind = _ReplacementKind.superFormalParameter;
+
   @override
   List<Object> get fixArguments => [_proposedName];
 
@@ -58,14 +63,16 @@
       await _proposeAnnotation(builder);
     } else if (_kind == _ReplacementKind.classOrMixin) {
       await _proposeClassOrMixin(builder, node);
-    } else if (_kind == _ReplacementKind.formalParameter) {
-      await _proposeFormalParameter(builder);
+    } else if (_kind == _ReplacementKind.field) {
+      await _proposeField(builder);
     } else if (_kind == _ReplacementKind.function) {
       await _proposeFunction(builder);
     } else if (_kind == _ReplacementKind.getterOrSetter) {
       await _proposeGetterOrSetter(builder);
     } else if (_kind == _ReplacementKind.method) {
       await _proposeMethod(builder);
+    } else if (_kind == _ReplacementKind.superFormalParameter) {
+      await _proposeSuperFormalParameter(builder);
     }
   }
 
@@ -123,76 +130,69 @@
     }
   }
 
-  Future<void> _proposeClassOrMixinMember(ChangeBuilder builder,
-      Expression? target, _ElementPredicate predicate) async {
-    final node = this.node;
+  Future<void> _proposeClassOrMixinMember(
+      ChangeBuilder builder,
+      SimpleIdentifier node,
+      Expression? target,
+      _ElementPredicate predicate) async {
     var targetIdentifierElement =
         target is Identifier ? target.staticElement : null;
-    if (node is SimpleIdentifier) {
-      var finder = _ClosestElementFinder(node.name, predicate);
-      // unqualified invocation
-      if (target == null) {
-        var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
-        if (clazz != null) {
-          var classElement = clazz.declaredElement!;
-          _updateFinderWithClassMembers(finder, classElement);
-        }
-      } else if (target is ExtensionOverride) {
-        _updateFinderWithExtensionMembers(finder, target.staticElement);
-      } else if (targetIdentifierElement is ExtensionElement) {
-        _updateFinderWithExtensionMembers(finder, targetIdentifierElement);
-      } else {
-        var classElement = getTargetClassElement(target);
-        if (classElement != null) {
-          _updateFinderWithClassMembers(finder, classElement);
-        }
+    var finder = _ClosestElementFinder(node.name, predicate);
+    // unqualified invocation
+    if (target == null) {
+      var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
+      if (clazz != null) {
+        var classElement = clazz.declaredElement!;
+        _updateFinderWithClassMembers(finder, classElement);
       }
-      // if we have close enough element, suggest to use it
-      await _suggest(builder, node, finder._element?.displayName);
+    } else if (target is ExtensionOverride) {
+      _updateFinderWithExtensionMembers(finder, target.staticElement);
+    } else if (targetIdentifierElement is ExtensionElement) {
+      _updateFinderWithExtensionMembers(finder, targetIdentifierElement);
+    } else {
+      var classElement = getTargetClassElement(target);
+      if (classElement != null) {
+        _updateFinderWithClassMembers(finder, classElement);
+      }
     }
+    // if we have close enough element, suggest to use it
+    await _suggest(builder, node, finder._element?.displayName);
   }
 
-  Future<void> _proposeFormalParameter(ChangeBuilder builder) async {
-    var parent = node.parent;
-    if (parent is! SuperFormalParameter) return;
+  Future<void> _proposeField(ChangeBuilder builder) async {
+    final node = this.node;
+    if (node is! FieldFormalParameter) return;
 
+    var exclusions = <String>{};
     var constructorDeclaration =
-        parent.thisOrAncestorOfType<ConstructorDeclaration>();
-    if (constructorDeclaration == null) return;
-
-    var formalParameters = constructorDeclaration.parameters.parameters
-        .whereType<DefaultFormalParameter>();
-
-    var finder =
-        _ClosestElementFinder(parent.identifier.name, (Element e) => true);
-
-    var superInvocation = constructorDeclaration.initializers.lastOrNull;
-
-    if (superInvocation is SuperConstructorInvocation) {
-      var staticElement = superInvocation.staticElement;
-      if (staticElement == null) return;
-
-      var list = _formalParameterSuggestions(staticElement, formalParameters);
-      finder._updateList(list);
-    } else {
-      var targetClassNode = parent.thisOrAncestorOfType<ClassDeclaration>();
-      if (targetClassNode == null) return;
-
-      var targetClassElement = targetClassNode.declaredElement!;
-      var superType = targetClassElement.supertype;
-      if (superType == null) return;
-
-      for (var constructor in superType.constructors) {
-        if (constructor.name.isEmpty) {
-          var list = _formalParameterSuggestions(constructor, formalParameters);
-          finder._updateList(list);
-          break;
+        node.thisOrAncestorOfType<ConstructorDeclaration>();
+    var initializers = constructorDeclaration?.initializers;
+    if (initializers != null) {
+      for (var initializer in initializers) {
+        if (initializer is ConstructorFieldInitializer) {
+          exclusions.add(initializer.fieldName.name);
+        }
+      }
+    }
+    var formalParameterList = node.thisOrAncestorOfType<FormalParameterList>();
+    if (formalParameterList != null) {
+      for (var parameter in formalParameterList.parameters) {
+        var name = parameter.identifier?.name;
+        if (name != null) {
+          exclusions.add(name);
         }
       }
     }
 
-    // If we have a close enough element, suggest to use it.
-    await _suggest(builder, node, finder._element?.name);
+    var type = node.type?.type;
+    await _proposeClassOrMixinMember(builder, node.identifier, null,
+        (Element element) {
+      return element is FieldElement &&
+          !exclusions.contains(element.name) &&
+          !element.isSynthetic &&
+          !element.isExternal &&
+          (type == null || typeSystem.isAssignableTo(type, element.type));
+    });
   }
 
   Future<void> _proposeFunction(ChangeBuilder builder) async {
@@ -245,7 +245,8 @@
       // find getter or setter
       var wantGetter = node.inGetterContext();
       var wantSetter = node.inSetterContext();
-      await _proposeClassOrMixinMember(builder, target, (Element element) {
+      await _proposeClassOrMixinMember(builder, node, target,
+          (Element element) {
         if (element is PropertyAccessorElement) {
           return wantGetter && element.isGetter ||
               wantSetter && element.isSetter;
@@ -259,13 +260,57 @@
   }
 
   Future<void> _proposeMethod(ChangeBuilder builder) async {
+    final node = this.node;
     var parent = node.parent;
-    if (parent is MethodInvocation) {
-      await _proposeClassOrMixinMember(builder, parent.realTarget,
+    if (parent is MethodInvocation && node is SimpleIdentifier) {
+      await _proposeClassOrMixinMember(builder, node, parent.realTarget,
           (Element element) => element is MethodElement && !element.isOperator);
     }
   }
 
+  Future<void> _proposeSuperFormalParameter(ChangeBuilder builder) async {
+    var parent = node.parent;
+    if (parent is! SuperFormalParameter) return;
+
+    var constructorDeclaration =
+        parent.thisOrAncestorOfType<ConstructorDeclaration>();
+    if (constructorDeclaration == null) return;
+
+    var formalParameters = constructorDeclaration.parameters.parameters
+        .whereType<DefaultFormalParameter>();
+
+    var finder =
+        _ClosestElementFinder(parent.identifier.name, (Element e) => true);
+
+    var superInvocation = constructorDeclaration.initializers.lastOrNull;
+
+    if (superInvocation is SuperConstructorInvocation) {
+      var staticElement = superInvocation.staticElement;
+      if (staticElement == null) return;
+
+      var list = _formalParameterSuggestions(staticElement, formalParameters);
+      finder._updateList(list);
+    } else {
+      var targetClassNode = parent.thisOrAncestorOfType<ClassDeclaration>();
+      if (targetClassNode == null) return;
+
+      var targetClassElement = targetClassNode.declaredElement!;
+      var superType = targetClassElement.supertype;
+      if (superType == null) return;
+
+      for (var constructor in superType.constructors) {
+        if (constructor.name.isEmpty) {
+          var list = _formalParameterSuggestions(constructor, formalParameters);
+          finder._updateList(list);
+          break;
+        }
+      }
+    }
+
+    // If we have a close enough element, suggest to use it.
+    await _suggest(builder, node, finder._element?.name);
+  }
+
   Future<void> _suggest(
       ChangeBuilder builder, AstNode node, String? name) async {
     if (name != null) {
@@ -333,8 +378,9 @@
 enum _ReplacementKind {
   annotation,
   classOrMixin,
-  formalParameter,
+  field,
   function,
   getterOrSetter,
-  method
+  method,
+  superFormalParameter,
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index c3cc63d..57a79eb 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -960,6 +960,7 @@
       CreateClass.new,
     ],
     CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD: [
+      ChangeTo.field,
       CreateField.new,
     ],
     CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER: [
@@ -1070,7 +1071,7 @@
       ReplaceReturnType.new,
     ],
     CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED: [
-      ChangeTo.formalParameter,
+      ChangeTo.superFormalParameter,
     ],
     CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY: [
       AddSwitchCaseBreak.new,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
index c652290..0f5c01d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
@@ -194,6 +194,78 @@
 ''');
   }
 
+  Future<void> test_fieldFormalParameter_external() async {
+    await resolveTestCode('''
+class C {
+  external int one;
+  C(this.oen);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_fieldFormalParameter_getter() async {
+    await resolveTestCode('''
+class C {
+  int get one => 1;
+  C(this.oen);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_fieldFormalParameter_initializer() async {
+    await resolveTestCode('''
+class C {
+  int one;
+  C(this.oen): one = 1;
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_fieldFormalParameter_used() async {
+    await resolveTestCode('''
+class C {
+  int one;
+  C(this.one, this.oen);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_fieldFormalParameter_withoutType() async {
+    await resolveTestCode('''
+class C {
+  var one;
+  C(this.oen);
+}
+''');
+    await assertHasFix('''
+class C {
+  var one;
+  C(this.one);
+}
+''');
+  }
+
+  Future<void> test_fieldFormalParameter_withType() async {
+    await resolveTestCode('''
+class C {
+  int one = 1;
+  var done = '';
+  C(String this.on);
+}
+''');
+    await assertHasFix('''
+class C {
+  int one = 1;
+  var done = '';
+  C(String this.done);
+}
+''');
+  }
+
   Future<void> test_function_fromImport() async {
     await resolveTestCode('''
 void f() {
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index d6be12e..d9e2f98 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -47,7 +47,7 @@
         unit.extensions.forEach(_resolveExtensionFields);
         unit.mixins.forEach(_resolveClassFields);
 
-        _scope = builder.element.scope;
+        _scope = unit.enclosingElement2.scope;
         unit.topLevelVariables.forEach(_resolveVariable);
       }
     }
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 195bceb..6742fe3 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -78,6 +78,173 @@
 ''');
   }
 
+  test_augmentation_class_constructor_superConstructor_generic_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A<int> {
+  B() : super.named(0);
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A<T> {
+  A.named(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/a.dart
+      definingUnit
+        classes
+          class B @35
+            supertype: A<int>
+            constructors
+              @56
+                superConstructor: ConstructorMember
+                  base: self::@class::A::@constructor::named
+                  substitution: {T: int}
+  definingUnit
+    classes
+      class A @31
+        typeParameters
+          covariant T @33
+            defaultType: dynamic
+        constructors
+          named @42
+            periodOffset: 41
+            nameEnd: 47
+            parameters
+              requiredPositional a @50
+                type: T
+''');
+  }
+
+  test_augmentation_class_constructor_superConstructor_notGeneric_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A {
+  B() : super.named();
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A {
+  A.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/a.dart
+      definingUnit
+        classes
+          class B @35
+            supertype: A
+            constructors
+              @51
+                superConstructor: self::@class::A::@constructor::named
+  definingUnit
+    classes
+      class A @31
+        constructors
+          named @39
+            periodOffset: 38
+            nameEnd: 44
+''');
+  }
+
+  test_augmentation_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A {
+  B() : super();
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A {}
+''');
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/a.dart
+      definingUnit
+        classes
+          class B @35
+            supertype: A
+            constructors
+              @51
+                superConstructor: self::@class::A::@constructor::•
+  definingUnit
+    classes
+      class A @31
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_augmentation_class_notSimplyBounded_circularity_via_typedef() async {
+    // C's type parameter T is not simply bounded because its bound, F, expands
+    // to `dynamic F(C)`, which refers to C.
+    newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class C<T extends F> {}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+typedef F(C value);
+''');
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/a.dart
+      definingUnit
+        classes
+          notSimplyBounded class C @35
+            typeParameters
+              covariant T @37
+                bound: dynamic
+                defaultType: dynamic
+            constructors
+              synthetic @-1
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @33
+        aliasedType: dynamic Function(C<dynamic>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @37
+              type: C<dynamic>
+          returnType: dynamic
+''');
+  }
+
+  test_augmentation_class_notSimplyBounded_self() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class C<T extends C> {}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/a.dart
+      definingUnit
+        classes
+          notSimplyBounded class C @35
+            typeParameters
+              covariant T @37
+                bound: C<dynamic>
+                defaultType: dynamic
+            constructors
+              synthetic @-1
+  definingUnit
+''');
+  }
+
   test_augmentation_documented() async {
     newFile('$testPackageLibPath/a.dart', r'''
 /// My documentation.
@@ -96,6 +263,138 @@
 ''');
   }
 
+  test_augmentation_importScope_constant() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+final a = 0;
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const b = a;
+''');
+
+    final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/b.dart
+      imports
+        package:test/a.dart
+      definingUnit
+        topLevelVariables
+          static const b @52
+            type: int
+            constantInitializer
+              SimpleIdentifier
+                token: a @56
+                staticElement: package:test/a.dart::@getter::a
+                staticType: int
+        accessors
+          synthetic static get b @-1
+            returnType: int
+  definingUnit
+''');
+  }
+
+  test_augmentation_importScope_constant_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  static const a = 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const b = A.a;
+''');
+
+    final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/b.dart
+      imports
+        package:test/a.dart
+      definingUnit
+        topLevelVariables
+          static const b @52
+            type: int
+            constantInitializer
+              PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: A @56
+                  staticElement: package:test/a.dart::@class::A
+                  staticType: null
+                period: . @57
+                identifier: SimpleIdentifier
+                  token: a @58
+                  staticElement: package:test/a.dart::@class::A::@getter::a
+                  staticType: int
+                staticElement: package:test/a.dart::@class::A::@getter::a
+                staticType: int
+        accessors
+          synthetic static get b @-1
+            returnType: int
+  definingUnit
+''');
+  }
+
+  test_augmentation_importScope_constant_instanceCreation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  const A {};
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const a = A();
+''');
+
+    final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  augmentationImports
+    package:test/b.dart
+      imports
+        package:test/a.dart
+      definingUnit
+        topLevelVariables
+          static const a @52
+            type: A
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: A @56
+                      staticElement: package:test/a.dart::@class::A
+                      staticType: null
+                    type: A
+                  staticElement: package:test/a.dart::@class::A::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @57
+                  rightParenthesis: ) @58
+                staticType: A
+        accessors
+          synthetic static get a @-1
+            returnType: A
+  definingUnit
+''');
+  }
+
   test_augmentation_importScope_topInference() async {
     newFile('$testPackageLibPath/a.dart', r'''
 final a = 0;
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index e5d7229..bc9c67a 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -14,6 +14,7 @@
 import 'package:dart2js_info/json_info_codec.dart';
 import 'package:dart2js_info/binary_serialization.dart' as dump_info;
 import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/core_types.dart' as ir;
 
 import '../compiler_api.dart' as api;
 import 'common.dart';
@@ -184,11 +185,47 @@
     return classTypeInfo;
   }
 
+  /// Returns all immediately extended, implemented, or mixed-in types of
+  /// [clazz].
+  List<ClassEntity> getImmediateSupers(ClassEntity clazz) {
+    final superclass =
+        environment.getSuperClass(clazz, skipUnnamedMixinApplications: true);
+    // Ignore 'Object' to reduce overhead.
+    return [
+      if (superclass != null &&
+          superclass != closedWorld.commonElements.objectClass)
+        superclass,
+      ...closedWorld.dartTypes
+          .getInterfaces(clazz)
+          .map((i) => i.element)
+          .where((cls) => cls != null),
+    ];
+  }
+
   ClassInfo visitClass(ClassEntity clazz) {
-    // Omit class if it is not needed.
-    ClassInfo classInfo = ClassInfo(
+    // True if [info] can be safely removed from the output.
+    bool filterClassInfo(ClassInfo info) =>
+        !compiler.backendStrategy.emitterTask.neededClasses.contains(clazz) &&
+        info.fields.isEmpty &&
+        info.functions.isEmpty;
+
+    ClassInfo classInfo = state.entityToInfo[clazz];
+    if (classInfo != null) {
+      return filterClassInfo(classInfo) ? null : classInfo;
+    }
+    final supers = <ClassInfo>[];
+    getImmediateSupers(clazz).forEach((superInterface) {
+      final superclass =
+          environment.lookupClass(superInterface.library, superInterface.name);
+      if (superclass == null) return;
+      final classInfo = visitClass(superclass);
+      if (classInfo == null) return;
+      supers.add(classInfo);
+    });
+    classInfo = ClassInfo(
         name: clazz.name,
         isAbstract: clazz.isAbstract,
+        supers: supers,
         outputUnit: _unitInfoForClass(clazz));
     state.entityToInfo[clazz] = classInfo;
 
@@ -229,9 +266,7 @@
 
     classInfo.size = size;
 
-    if (!compiler.backendStrategy.emitterTask.neededClasses.contains(clazz) &&
-        classInfo.fields.isEmpty &&
-        classInfo.functions.isEmpty) {
+    if (filterClassInfo(classInfo)) {
       return null;
     }
 
@@ -417,11 +452,13 @@
   final JClosedWorld closedWorld;
   final DumpInfoTask dumpInfoTask;
   final state = DumpInfoStateData();
+  final ir.CoreTypes coreTypes;
 
   JElementEnvironment get environment => closedWorld.elementEnvironment;
 
   KernelInfoCollector(
-      this.component, this.compiler, this.dumpInfoTask, this.closedWorld);
+      this.component, this.compiler, this.dumpInfoTask, this.closedWorld)
+      : this.coreTypes = ir.CoreTypes(component);
 
   void run() {
     // TODO(markzipan): Add CFE constants to `state.info.constants`.
@@ -506,9 +543,29 @@
   }
 
   ClassInfo visitClass(ir.Class clazz, {ClassEntity classEntity}) {
-    // Omit class if it is not needed.
-    ClassInfo classInfo = ClassInfo(
-        name: clazz.name, isAbstract: clazz.isAbstract, outputUnit: null);
+    if (state.entityToInfo[classEntity] != null)
+      return state.entityToInfo[classEntity];
+
+    final supers = <ClassInfo>[];
+    clazz.supers.forEach((supertype) {
+      final superclass = supertype.classNode;
+      // Ignore 'Object' to reduce overhead.
+      if (superclass == coreTypes.objectClass) {
+        return;
+      }
+      final superclassLibrary =
+          environment.lookupLibrary(superclass.enclosingLibrary.importUri);
+      final superclassEntity =
+          environment.lookupClass(superclassLibrary, superclass.name);
+      if (superclassEntity == null) return;
+      ClassInfo classInfo =
+          visitClass(superclass, classEntity: superclassEntity);
+      if (classInfo != null) supers.add(classInfo);
+    });
+
+    ClassInfo classInfo = ClassInfo.fromKernel(
+        name: clazz.name, isAbstract: clazz.isAbstract, supers: supers);
+    state.entityToInfo[classEntity] = classInfo;
 
     clazz.members.forEach((ir.Member member) {
       final isSetter = member is ir.Procedure && member.isSetter;
@@ -861,6 +918,17 @@
     final kClassInfo = kClassInfos.first;
     kernelInfo.state.entityToInfo[clazz] = kClassInfo;
 
+    /// Add synthetically injected superclasses like `Interceptor` and
+    /// `LegacyJavaScriptObject`.
+    final syntheticSuperclass = closedWorld.commonElements
+        .getDefaultSuperclass(clazz, closedWorld.nativeData);
+    if (syntheticSuperclass != closedWorld.commonElements.objectClass) {
+      final classInfo = kernelInfo.state.entityToInfo[syntheticSuperclass];
+      if (classInfo != null) {
+        kClassInfo.supers.add(classInfo);
+      }
+    }
+
     int size = dumpInfoTask.sizeOf(clazz);
     final disambiguatedMemberName = '$parentName/${clazz.name}';
     environment.forEachLocalClassMember(clazz, (member) {
@@ -1647,9 +1715,11 @@
   visitClass(ClassInfo info) {
     info.functions = filterDeadInfo<FunctionInfo>(info.functions);
     info.fields = filterDeadInfo<FieldInfo>(info.fields);
+    info.supers = filterDeadInfo<ClassInfo>(info.supers);
 
     info.functions.forEach(visitFunction);
     info.fields.forEach(visitField);
+    info.supers.forEach(visitClass);
   }
 
   @override
@@ -1684,6 +1754,7 @@
 
 /// Returns a fully resolved name for [info] for disambiguation.
 String fullyResolvedNameForInfo(BasicInfo info) {
+  if (info == null) return '';
   var name = info.name;
   var currentInfo = info;
   while (currentInfo.parent != null) {
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 746d0ef..ad4ddfd 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -87,7 +87,7 @@
     "Dynamic invocation of '[]'.": 12,
     "Dynamic invocation of 'compareTo'.": 1,
     "Dynamic invocation of 'forEach'.": 2,
-    "Dynamic invocation of 'map'.": 2
+    "Dynamic invocation of 'map'.": 3
   },
   "pkg/dart2js_info/lib/src/binary/sink.dart": {
     "Dynamic access of 'index'.": 1
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 817e514..f9a7434 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -96,10 +96,11 @@
     "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
     "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
     "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4"
-  ]
+  ],
+  "supers": []
 }]*/
 class Class1<T> {
-  /*spec.member: Class1.field:
+  /*member: Class1.field:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
   "kind": "closure",
@@ -187,70 +188,6 @@
     {"id":"function/dart:_rti::findType","mask":null},
     {"id":"function/dart:_rti::instanceType","mask":null}]
   */
-  /*canary.member: Class1.field:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
-  "kind": "closure",
-  "name": "Class1_field_closure",
-  "size": 242,
-  "outputUnit": "outputUnit/main",
-  "parent": "field/memory:sdk/tests/web/native/main.dart::Class1.field",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call"
-}],
-   function=[{
-  "id": "field/memory:sdk/tests/web/native/main.dart::Class1.field",
-  "kind": "field",
-  "name": "field",
-  "size": 318,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure"
-  ],
-  "inferredType": "[subclass=Closure]",
-  "code": "set$field(field) {\n      this.field = type$.Type_Function._as(field);\n    }",
-  "type": "Type Function()"
-}],
-   holding=[
-    {"id":"field/memory:sdk/tests/web/native/main.dart::Class1.field","mask":null},
-    {"id":"function/dart:_js_helper::throwCyclicInit","mask":null},
-    {"id":"function/dart:_late_helper::throwLateFieldADI","mask":null},
-    {"id":"function/dart:_rti::Rti._bind","mask":null},
-    {"id":"function/dart:_rti::Rti._eval","mask":null},
-    {"id":"function/dart:_rti::_arrayInstanceType","mask":null},
-    {"id":"function/dart:_rti::_asBool","mask":null},
-    {"id":"function/dart:_rti::_asBoolQ","mask":null},
-    {"id":"function/dart:_rti::_asBoolS","mask":null},
-    {"id":"function/dart:_rti::_asDouble","mask":null},
-    {"id":"function/dart:_rti::_asDoubleQ","mask":null},
-    {"id":"function/dart:_rti::_asDoubleS","mask":null},
-    {"id":"function/dart:_rti::_asInt","mask":null},
-    {"id":"function/dart:_rti::_asIntQ","mask":null},
-    {"id":"function/dart:_rti::_asIntS","mask":null},
-    {"id":"function/dart:_rti::_asNum","mask":null},
-    {"id":"function/dart:_rti::_asNumQ","mask":null},
-    {"id":"function/dart:_rti::_asNumS","mask":null},
-    {"id":"function/dart:_rti::_asObject","mask":null},
-    {"id":"function/dart:_rti::_asString","mask":null},
-    {"id":"function/dart:_rti::_asStringQ","mask":null},
-    {"id":"function/dart:_rti::_asStringS","mask":null},
-    {"id":"function/dart:_rti::_asTop","mask":null},
-    {"id":"function/dart:_rti::_generalAsCheckImplementation","mask":null},
-    {"id":"function/dart:_rti::_generalIsTestImplementation","mask":null},
-    {"id":"function/dart:_rti::_generalNullableAsCheckImplementation","mask":null},
-    {"id":"function/dart:_rti::_generalNullableIsTestImplementation","mask":null},
-    {"id":"function/dart:_rti::_installSpecializedAsCheck","mask":null},
-    {"id":"function/dart:_rti::_installSpecializedIsTest","mask":null},
-    {"id":"function/dart:_rti::_instanceType","mask":null},
-    {"id":"function/dart:_rti::_isBool","mask":null},
-    {"id":"function/dart:_rti::_isInt","mask":null},
-    {"id":"function/dart:_rti::_isNum","mask":null},
-    {"id":"function/dart:_rti::_isObject","mask":null},
-    {"id":"function/dart:_rti::_isString","mask":null},
-    {"id":"function/dart:_rti::_isTop","mask":null},
-    {"id":"function/dart:_rti::findType","mask":null},
-    {"id":"function/dart:_rti::instanceType","mask":null}]
-  */
   var field = () => T;
   /*member: Class1.funcField:
    function=[{
@@ -272,7 +209,7 @@
   */
   var funcField;
 
-  /*spec.member: Class1.:
+  /*member: Class1.:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
   "kind": "closure",
@@ -337,47 +274,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null}]
   */
-  /*canary.member: Class1.:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
-  "kind": "closure",
-  "name": "Class1_closure",
-  "size": 204,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1",
-  "kind": "function",
-  "name": "Class1",
-  "size": 355,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[exact=Class1]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes field)",
-  "inlinedCount": 0,
-  "code": "Class1$($T) {\n      var t1 = new A.Class1(new A.Class1_field_closure($T), null, $T._eval$1(\"Class1<0>\"));\n      t1.Class1$0($T);\n      return t1;\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 3
-}],
-   holding=[
-    {"id":"function/dart:_rti::Rti._eval","mask":null},
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null}]
-  */
   Class1() {
     field = () => T;
   }
@@ -443,7 +339,7 @@
   "functionKind": 3
 }]*/
   factory Class1.fact() => new Class1<T>();
-  /*spec.member: Class1.fact2:
+  /*member: Class1.fact2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
   "kind": "closure",
@@ -508,47 +404,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc","mask":null}]
   */
-  /*canary.member: Class1.fact2:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
-  "kind": "closure",
-  "name": "Class1_Class1$fact2_closure",
-  "size": 314,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2",
-  "kind": "function",
-  "name": "Class1.fact2",
-  "size": 419,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": true,
-    "external": false
-  },
-  "returnType": "Class1<#Afree>",
-  "inferredReturnType": "[exact=Class1]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "Class1_Class1$fact2($T) {\n      return A.Class1$setFunc(new A.Class1_Class1$fact2_closure($T), $T);\n    }",
-  "type": "Class1<#A> Function<#A extends Object?>()",
-  "functionKind": 3
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc","mask":null}]
-  */
   factory Class1.fact2() => new Class1.setFunc(() => new Set<T>());
 
   /*member: Class1.method1:function=[{
@@ -575,7 +430,7 @@
   "functionKind": 2
 }]*/
   method1() => T;
-  /*spec.member: Class1.method2:
+  /*member: Class1.method2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
   "kind": "closure",
@@ -639,46 +494,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null}]
   */
-  /*canary.member: Class1.method2:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
-  "kind": "closure",
-  "name": "Class1_method2_closure",
-  "size": 262,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method2",
-  "kind": "function",
-  "name": "method2",
-  "size": 330,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "method2$0() {\n      return new A.Class1_method2_closure(this);\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 2
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null}]
-  */
   method2() {
     return () => T;
   }
@@ -707,7 +522,7 @@
   "functionKind": 2
 }]*/
   method3<S>() => S;
-  /*spec.member: Class1.method4:
+  /*member: Class1.method4:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
   "kind": "closure",
@@ -771,51 +586,11 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null}]
   */
-  /*canary.member: Class1.method4:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
-  "kind": "closure",
-  "name": "Class1_method4_closure",
-  "size": 236,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method4",
-  "kind": "function",
-  "name": "method4",
-  "size": 306,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "method4$1$0($S) {\n      return new A.Class1_method4_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 2
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null}]
-  */
   method4<S>() {
     return () => S;
   }
 
-  /*spec.member: Class1.method5:
+  /*member: Class1.method5:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
@@ -914,58 +689,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null}]
   */
-  /*canary.member: Class1.method5:
-   closure=[
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
-  "kind": "closure",
-  "name": "Class1_method5_local",
-  "size": 287,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure",
-  "kind": "closure",
-  "name": "Class1_method5_local_closure",
-  "size": 260,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
-  "kind": "function",
-  "name": "method5",
-  "size": 632,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "method5$0() {\n      return new A.Class1_method5_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 2
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/dart:_rti::findType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null}]
-  */
   method5() {
     local<S>() {
       return () => S;
@@ -974,7 +697,7 @@
     return local<double>();
   }
 
-  /*spec.member: Class1.method6:
+  /*member: Class1.method6:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
@@ -1147,80 +870,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null}]
   */
-  /*canary.member: Class1.method6:
-   closure=[
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
-  "kind": "closure",
-  "name": "Class1_method6__closure",
-  "size": 415,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure",
-  "kind": "closure",
-  "name": "Class1_method6_closure",
-  "size": 363,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local",
-  "kind": "closure",
-  "name": "Class1_method6_local",
-  "size": 316,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure",
-  "kind": "closure",
-  "name": "Class1_method6_local_closure",
-  "size": 341,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
-  "kind": "function",
-  "name": "method6",
-  "size": 1573,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "method6$1$0($S) {\n      return new A.Class1_method6_closure(this, $S).call$1(new A.Class1_method6_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 2
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/dart:_rti::findType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null}]
-  */
   method6<S>() {
     local<U>() {
       return () => '$S$U';
@@ -1256,7 +905,7 @@
   "functionKind": 0
 }]*/
   static staticMethod1<S>() => S;
-  /*spec.member: Class1.staticMethod2:
+  /*member: Class1.staticMethod2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
   "kind": "closure",
@@ -1320,51 +969,11 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null}]
   */
-  /*canary.member: Class1.staticMethod2:
-   closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
-  "kind": "closure",
-  "name": "Class1_staticMethod2_closure",
-  "size": 260,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
-  "kind": "function",
-  "name": "staticMethod2",
-  "size": 345,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure"
-  ],
-  "modifiers": {
-    "static": true,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "Class1_staticMethod2($S) {\n      return new A.Class1_staticMethod2_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 0
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null}]
-  */
   static staticMethod2<S>() {
     return () => S;
   }
 
-  /*spec.member: Class1.staticMethod3:
+  /*member: Class1.staticMethod3:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
@@ -1463,58 +1072,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null}]
   */
-  /*canary.member: Class1.staticMethod3:
-   closure=[
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
-  "kind": "closure",
-  "name": "Class1_staticMethod3_local",
-  "size": 317,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure",
-  "kind": "closure",
-  "name": "Class1_staticMethod3_local_closure",
-  "size": 284,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
-  "kind": "function",
-  "name": "staticMethod3",
-  "size": 703,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure"
-  ],
-  "modifiers": {
-    "static": true,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "Class1_staticMethod3() {\n      return new A.Class1_staticMethod3_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/dart:_rti::findType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null}]
-  */
   static staticMethod3() {
     local<S>() {
       return () => S;
@@ -1523,7 +1080,7 @@
     return local<double>();
   }
 
-  /*spec.member: Class1.staticMethod4:
+  /*member: Class1.staticMethod4:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
@@ -1696,80 +1253,6 @@
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null},
     {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null}]
   */
-  /*canary.member: Class1.staticMethod4:
-   closure=[
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
-  "kind": "closure",
-  "name": "Class1_staticMethod4__closure",
-  "size": 322,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure",
-  "kind": "closure",
-  "name": "Class1_staticMethod4_closure",
-  "size": 328,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local",
-  "kind": "closure",
-  "name": "Class1_staticMethod4_local",
-  "size": 346,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call"
-},
-    {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure",
-  "kind": "closure",
-  "name": "Class1_staticMethod4_local_closure",
-  "size": 365,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure.call"
-}],
-   function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
-  "kind": "function",
-  "name": "staticMethod4",
-  "size": 1514,
-  "outputUnit": "outputUnit/main",
-  "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local",
-    "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure"
-  ],
-  "modifiers": {
-    "static": true,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "Class1_staticMethod4($S) {\n      return new A.Class1_staticMethod4_closure($S).call$1(new A.Class1_staticMethod4_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 0
-}],
-   holding=[
-    {"id":"function/dart:_rti::_setArrayType","mask":null},
-    {"id":"function/dart:_rti::findType","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null},
-    {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null}]
-  */
   static staticMethod4<S>() {
     local<U>() {
       return () => '$S$U';
@@ -1807,7 +1290,7 @@
 }]*/
 topLevelMethod1<S>() => S;
 
-/*spec.member: topLevelMethod2:
+/*member: topLevelMethod2:
  closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
   "kind": "closure",
@@ -1871,51 +1354,11 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null}]
 */
-/*canary.member: topLevelMethod2:
- closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
-  "kind": "closure",
-  "name": "topLevelMethod2_closure",
-  "size": 240,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2",
-  "kind": "function",
-  "name": "topLevelMethod2",
-  "size": 315,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "topLevelMethod2($S) {\n      return new A.topLevelMethod2_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null}]
-*/
 topLevelMethod2<S>() {
   return () => S;
 }
 
-/*spec.member: topLevelMethod3:
+/*member: topLevelMethod3:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
@@ -2014,58 +1457,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null}]
 */
-/*canary.member: topLevelMethod3:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
-  "kind": "closure",
-  "name": "topLevelMethod3_local",
-  "size": 292,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure",
-  "kind": "closure",
-  "name": "topLevelMethod3_local_closure",
-  "size": 264,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
-  "kind": "function",
-  "name": "topLevelMethod3",
-  "size": 648,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "topLevelMethod3() {\n      return new A.topLevelMethod3_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/dart:_rti::findType","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null}]
-*/
 topLevelMethod3() {
   local<S>() {
     return () => S;
@@ -2074,7 +1465,7 @@
   return local<double>();
 }
 
-/*spec.member: topLevelMethod4:
+/*member: topLevelMethod4:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
@@ -2247,80 +1638,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null}]
 */
-/*canary.member: topLevelMethod4:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
-  "kind": "closure",
-  "name": "topLevelMethod4__closure",
-  "size": 302,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure",
-  "kind": "closure",
-  "name": "topLevelMethod4_closure",
-  "size": 303,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local",
-  "kind": "closure",
-  "name": "topLevelMethod4_local",
-  "size": 321,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure",
-  "kind": "closure",
-  "name": "topLevelMethod4_local_closure",
-  "size": 345,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
-  "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
-  "kind": "function",
-  "name": "topLevelMethod4",
-  "size": 1409,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure",
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local",
-    "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "topLevelMethod4($S) {\n      return new A.topLevelMethod4_closure($S).call$1(new A.topLevelMethod4_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/dart:_rti::findType","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null}]
-*/
 topLevelMethod4<S>() {
   local<U>() {
     return () => '$S$U';
@@ -2332,7 +1649,7 @@
   return local2(local<double>());
 }
 
-/*spec.member: twoLocals:
+/*member: twoLocals:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
@@ -2432,66 +1749,13 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null}]
 */
-/*canary.member: twoLocals:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
-  "kind": "closure",
-  "name": "twoLocals_local1",
-  "size": 149,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
-  "function": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2",
-  "kind": "closure",
-  "name": "twoLocals_local2",
-  "size": 210,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
-  "function": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
-  "kind": "function",
-  "name": "twoLocals",
-  "size": 441,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
-    "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[subclass=Closure]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads nothing; writes nothing)",
-  "inlinedCount": 0,
-  "code": "twoLocals() {\n      return new A.twoLocals_local2(new A.twoLocals_local1());\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null}]
-*/
 dynamic twoLocals() {
   local1() {}
   local2() => local1();
   return local2;
 }
 
-/*spec.member: nested:
+/*member: nested:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
@@ -2589,57 +1853,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null}]
 */
-/*canary.member: nested:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
-  "kind": "closure",
-  "name": "nested_nested1",
-  "size": 225,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::nested",
-  "function": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2",
-  "kind": "closure",
-  "name": "nested_nested1_nested2",
-  "size": 227,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::nested",
-  "function": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::nested",
-  "kind": "function",
-  "name": "nested",
-  "size": 568,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
-    "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[null]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "nested() {\n      var t1 = {};\n      t1.x = null;\n      new A.nested_nested1(t1).call$0();\n      t1.x.call$0();\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null}]
-*/
 dynamic nested() {
   dynamic x;
   nested1() {
@@ -2651,7 +1864,7 @@
   x();
 }
 
-/*spec.member: nested2:
+/*member: nested2:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
@@ -2783,68 +1996,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null}]
 */
-/*canary.member: nested2:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
-  "kind": "closure",
-  "name": "nested2_local1",
-  "size": 195,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure",
-  "kind": "closure",
-  "name": "nested2_local1__closure",
-  "size": 193,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure",
-  "kind": "closure",
-  "name": "nested2_local1_closure",
-  "size": 311,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
-  "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::nested2",
-  "kind": "function",
-  "name": "nested2",
-  "size": 764,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
-    "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure",
-    "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[null]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "nested2() {\n      A.print(new A.nested2_local1().call$0());\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/dart:core::print","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null}]
-*/
 dynamic nested2() {
   dynamic y;
   int local1() {
@@ -2855,7 +2006,7 @@
   print(y);
 }
 
-/*spec.member: siblings:
+/*member: siblings:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
@@ -2987,68 +2138,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null}]
 */
-/*canary.member: siblings:
- closure=[
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
-  "kind": "closure",
-  "name": "siblings_local1",
-  "size": 244,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
-  "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure",
-  "kind": "closure",
-  "name": "siblings_local1_closure",
-  "size": 193,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
-  "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call"
-},
-  {
-  "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure%0",
-  "kind": "closure",
-  "name": "siblings_local1_closure",
-  "size": 197,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
-  "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call%0"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::siblings",
-  "kind": "function",
-  "name": "siblings",
-  "size": 701,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
-    "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure",
-    "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure%0"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[null]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "siblings() {\n      A.print(new A.siblings_local1().call$0());\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/dart:core::print","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null}]
-*/
 dynamic siblings() {
   int local1() {
     int a = (() => 1)();
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 2ab399c..95af0bd 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -121,7 +121,7 @@
 
 import 'lib.dart' deferred as lib;
 
-/*spec.member: main:
+/*member: main:
  closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
   "kind": "closure",
@@ -194,49 +194,6 @@
   {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null},
   {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null}]
 */
-/*canary.member: main:
- closure=[{
-  "id": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
-  "kind": "closure",
-  "name": "main_closure",
-  "size": 201,
-  "outputUnit": "outputUnit/main",
-  "parent": "function/memory:sdk/tests/web/native/main.dart::main",
-  "function": "function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"
-}],
- function=[{
-  "id": "function/memory:sdk/tests/web/native/main.dart::main",
-  "kind": "function",
-  "name": "main",
-  "size": 301,
-  "outputUnit": "outputUnit/main",
-  "parent": "library/memory:sdk/tests/web/native/main.dart::",
-  "children": [
-    "closure/memory:sdk/tests/web/native/main.dart::main.main_closure"
-  ],
-  "modifiers": {
-    "static": false,
-    "const": false,
-    "factory": false,
-    "external": false
-  },
-  "returnType": "dynamic",
-  "inferredReturnType": "[exact=_Future]",
-  "parameters": [],
-  "sideEffects": "SideEffects(reads anything; writes anything)",
-  "inlinedCount": 0,
-  "code": "main() {\n      return A.loadDeferredLibrary(\"lib\").then$1$1(new A.main_closure(), type$.Null);\n    }",
-  "type": "dynamic Function()",
-  "functionKind": 0
-}],
- holding=[
-  {"id":"function/dart:_js_helper::loadDeferredLibrary","mask":null},
-  {"id":"function/dart:_rti::_setArrayType","mask":null},
-  {"id":"function/dart:_rti::findType","mask":null},
-  {"id":"function/dart:async::_Future.then","mask":"[exact=_Future]"},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null},
-  {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null}]
-*/
 main() => lib.loadLibrary().then((_) {
       (lib.funky)();
     });
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index bfcfa23..6a9ec09 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -27,7 +27,8 @@
   },
   "children": [
     "function/memory:sdk/tests/web/native/lib2.dart::A.method"
-  ]
+  ],
+  "supers": []
 }]*/
 class A {
   const A();
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index ed843d7..e95b65c 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -2,130 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*spec.library: 
- constant=[
-  {
-  "id": "constant/B.C_A = new A.A();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 19,
-  "outputUnit": "outputUnit/1",
-  "code": "B.C_A = new A.A();\n"
-},
-  {
-  "id": "constant/B.C_Deferred = B.C_A;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 22,
-  "outputUnit": "outputUnit/1",
-  "code": "B.C_Deferred = B.C_A;\n"
-},
-  {
-  "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
-  "kind": "constant",
-  "name": "",
-  "size": 131,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
-},
-  {
-  "id": "constant/B.C__RootZone = new A._RootZone();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 35,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C__RootZone = new A._RootZone();\n"
-},
-  {
-  "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 51,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
-},
-  {
-  "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 49,
-  "outputUnit": "outputUnit/main",
-  "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
-},
-  {
-  "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 41,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSArray_methods = J.JSArray.prototype;\n"
-},
-  {
-  "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 37,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSInt_methods = J.JSInt.prototype;\n"
-},
-  {
-  "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 43,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSString_methods = J.JSString.prototype;\n"
-},
-  {
-  "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 59,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
-}],
- deferredFiles=[{
-  "main.dart": {
-    "name": "<unnamed>",
-    "imports": {
-      "lib1": [
-        "out_1.part.js"
-      ]
-    }
-  }
-}],
- dependencies=[{}],
- library=[{
-  "id": "library/memory:sdk/tests/web/native/main.dart::",
-  "kind": "library",
-  "name": "<unnamed>",
-  "size": 857,
-  "children": [
-    "function/memory:sdk/tests/web/native/main.dart::main"
-  ],
-  "canonicalUri": "memory:sdk/tests/web/native/main.dart"
-}],
- outputUnits=[
-  {
-  "id": "outputUnit/1",
-  "kind": "outputUnit",
-  "name": "1",
-  "size": 846,
-  "filename": "out_1.part.js",
-  "imports": [
-    "lib1"
-  ]
-},
-  {
-  "id": "outputUnit/main",
-  "kind": "outputUnit",
-  "name": "main",
-  "filename": "out",
-  "imports": []
-}]
-*/
-
-/*canary.library:
+/*library: 
  constant=[
   {
   "id": "constant/B.C_A = new A.A();\n",
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index 81cdb3e..1b882b7 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -166,6 +166,9 @@
     "function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs",
     "function/memory:sdk/tests/web/native/main.dart::Foo.singleArg",
     "function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg"
+  ],
+  "supers": [
+    "class/dart:_interceptors::LegacyJavaScriptObject"
   ]
 }]*/
 class Foo {
@@ -278,7 +281,10 @@
   "modifiers": {
     "abstract": false
   },
-  "children": []
+  "children": [],
+  "supers": [
+    "class/dart:_interceptors::LegacyJavaScriptObject"
+  ]
 }]*/
 class Bar {
   external static singleArg(a);
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index 5fa0d76..4bc7922 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -98,7 +98,8 @@
     "function/memory:sdk/tests/web/native/main.dart::C.C._default",
     "function/memory:sdk/tests/web/native/main.dart::C.C.create",
     "function/memory:sdk/tests/web/native/main.dart::C.compute"
-  ]
+  ],
+  "supers": []
 }]*/
 class C {
   /*member: C.value:
@@ -291,7 +292,8 @@
   "children": [
     "field/memory:sdk/tests/web/native/main.dart::A.a",
     "function/memory:sdk/tests/web/native/main.dart::A.A"
-  ]
+  ],
+  "supers": []
 }],
  classType=[{
   "id": "classType/memory:sdk/tests/web/native/main.dart::A",
diff --git a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
index 51ce89b..e769b3f 100644
--- a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
+++ b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
@@ -103,7 +103,8 @@
   "modifiers": {
     "abstract": false
   },
-  "children": []
+  "children": [],
+  "supers": []
 }]*/
 class Super<T> {
   void method(T t) {}
@@ -121,7 +122,8 @@
   },
   "children": [
     "function/memory:sdk/tests/web/native/main.dart::Mixin.method"
-  ]
+  ],
+  "supers": []
 }]*/
 class Mixin {
   /*member: Mixin.method:
@@ -206,6 +208,10 @@
   },
   "children": [
     "function/memory:sdk/tests/web/native/main.dart::Clazz.method"
+  ],
+  "supers": [
+    "class/memory:sdk/tests/web/native/main.dart::Mixin",
+    "class/memory:sdk/tests/web/native/main.dart::Super"
   ]
 }]*/
 /*member: Clazz.method:
@@ -291,6 +297,9 @@
   "children": [
     "function/memory:sdk/tests/web/native/main.dart::Subclass.Subclass",
     "function/memory:sdk/tests/web/native/main.dart::Subclass.test"
+  ],
+  "supers": [
+    "class/memory:sdk/tests/web/native/main.dart::Clazz"
   ]
 }]*/
 /*member: Subclass.:function=[{
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
index 0d707ce..ecf2ef7 100644
--- a/pkg/dart2js_info/lib/binary_serialization.dart
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -117,6 +117,7 @@
       sink.writeBool(info.isAbstract);
       sink.writeList(info.fields, visitField);
       sink.writeList(info.functions, visitFunction);
+      sink.writeList(info.supers, visitClass);
     });
   }
 
@@ -387,6 +388,7 @@
         info.isAbstract = source.readBool();
         info.fields.addAll(source.readList(readField));
         info.functions.addAll(source.readList(readFunction));
+        info.supers.addAll(source.readList(readClass));
 
         setParent(BasicInfo child) => child.parent = info;
         info.fields.forEach(setParent);
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
index 509edb0..cfc7242 100644
--- a/pkg/dart2js_info/lib/info.dart
+++ b/pkg/dart2js_info/lib/info.dart
@@ -257,14 +257,19 @@
   // but this should be fixed.
   List<FieldInfo> fields = <FieldInfo>[];
 
+  /// Classes in the supertype hierarchy for this class.
+  List<ClassInfo> supers = <ClassInfo>[];
+
   ClassInfo(
       {required String name,
       required this.isAbstract,
+      required this.supers,
       OutputUnitInfo? outputUnit,
       int size = 0})
       : super(InfoKind.clazz, name, outputUnit, size, null);
 
-  ClassInfo.fromKernel({required String name, required this.isAbstract})
+  ClassInfo.fromKernel(
+      {required String name, required this.isAbstract, required this.supers})
       : super(InfoKind.clazz, name, null, 0, null);
 
   ClassInfo.internal() : super.internal(InfoKind.clazz);
diff --git a/pkg/dart2js_info/lib/json_info_codec.dart b/pkg/dart2js_info/lib/json_info_codec.dart
index 937ea4d..a969a9d 100644
--- a/pkg/dart2js_info/lib/json_info_codec.dart
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -113,9 +113,10 @@
         result.classes.add(child);
       } else if (child is ClassTypeInfo) {
         result.classTypes.add(child);
-      } else {
-        assert(child is TypedefInfo);
+      } else if (child is TypedefInfo) {
         result.typedefs.add(child);
+      } else {
+        throw StateError('Invalid LibraryInfo child: $child');
       }
     }
     return result;
@@ -132,11 +133,14 @@
     for (var child in json['children'].map((id) => parseId(id))) {
       if (child is FunctionInfo) {
         result.functions.add(child);
-      } else {
-        assert(child is FieldInfo);
+      } else if (child is FieldInfo) {
         result.fields.add(child);
+      } else {
+        throw StateError('Invalid ClassInfo child: $child');
       }
     }
+    result.supers.addAll(
+        json['supers'].map<ClassInfo>((id) => parseId(id) as ClassInfo));
     return result;
   }
 
@@ -350,6 +354,7 @@
         info is LibraryInfo ||
             info is ConstantInfo ||
             info is OutputUnitInfo ||
+            info is ClassInfo ||
             info.parent != null,
         "$info");
 
@@ -510,7 +515,8 @@
         // TODO(sigmund): change format, include only when abstract is true.
         'modifiers': {'abstract': info.isAbstract},
         'children':
-            _toSortedSerializedIds([...info.fields, ...info.functions], idFor)
+            _toSortedSerializedIds([...info.fields, ...info.functions], idFor),
+        'supers': _toSortedSerializedIds(info.supers, idFor)
       });
   }
 
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
index e81cb1a..a8b3435 100644
--- a/pkg/dart2js_info/lib/proto_info_codec.dart
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -35,6 +35,7 @@
     assert(info is LibraryInfo ||
         info is ConstantInfo ||
         info is OutputUnitInfo ||
+        info is ClassInfo ||
         info.parent != null);
 
     int id;
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
index c0bf81b..9e3fa09 100644
--- a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -278,7 +278,8 @@
         },
         "children": [
           "field/dart:_foreign_helper::JS_CONST.code"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::ArrayIterator": {
         "id": "class/dart:_interceptors::ArrayIterator",
@@ -298,7 +299,8 @@
           "function/dart:_interceptors::ArrayIterator.ArrayIterator",
           "function/dart:_interceptors::ArrayIterator.current",
           "function/dart:_interceptors::ArrayIterator.moveNext"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::Interceptor": {
         "id": "class/dart:_interceptors::Interceptor",
@@ -312,7 +314,8 @@
         },
         "children": [
           "function/dart:_interceptors::Interceptor.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::JSArray": {
         "id": "class/dart:_interceptors::JSArray",
@@ -333,6 +336,9 @@
           "function/dart:_interceptors::JSArray.length",
           "function/dart:_interceptors::JSArray.markFixedList",
           "function/dart:_interceptors::JSArray.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
         ]
       },
       "dart:_interceptors::JSBool": {
@@ -347,6 +353,10 @@
         },
         "children": [
           "function/dart:_interceptors::JSBool.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor",
+          "class/dart:core::bool"
         ]
       },
       "dart:_interceptors::JSInt": {
@@ -359,7 +369,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSNumber"
+        ]
       },
       "dart:_interceptors::JSNull": {
         "id": "class/dart:_interceptors::JSNull",
@@ -373,6 +386,10 @@
         },
         "children": [
           "function/dart:_interceptors::JSNull.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor",
+          "class/dart:core::Null"
         ]
       },
       "dart:_interceptors::JSNumNotInt": {
@@ -385,7 +402,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSNumber"
+        ]
       },
       "dart:_interceptors::JSNumber": {
         "id": "class/dart:_interceptors::JSNumber",
@@ -399,6 +419,9 @@
         },
         "children": [
           "function/dart:_interceptors::JSNumber.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
         ]
       },
       "dart:_interceptors::JSString": {
@@ -416,6 +439,9 @@
           "function/dart:_interceptors::JSString.isEmpty",
           "function/dart:_interceptors::JSString.length",
           "function/dart:_interceptors::JSString.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
         ]
       },
       "dart:_interceptors::JSUnmodifiableArray": {
@@ -428,7 +454,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSArray"
+        ]
       },
       "dart:_interceptors::JavaScriptObject": {
         "id": "class/dart:_interceptors::JavaScriptObject",
@@ -440,7 +469,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
+        ]
       },
       "dart:_internal::LateError": {
         "id": "class/dart:_internal::LateError",
@@ -456,6 +488,9 @@
           "field/dart:_internal::LateError._message",
           "function/dart:_internal::LateError.LateError.fieldADI",
           "function/dart:_internal::LateError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::BoundClosure": {
@@ -482,6 +517,9 @@
           "function/dart:_js_helper::BoundClosure.receiverFieldName",
           "function/dart:_js_helper::BoundClosure.receiverOf",
           "function/dart:_js_helper::BoundClosure.toString"
+        ],
+        "supers": [
+          "class/dart:_js_helper::TearOffClosure"
         ]
       },
       "dart:_js_helper::Closure": {
@@ -504,7 +542,8 @@
           "function/dart:_js_helper::Closure.fromTearOff",
           "function/dart:_js_helper::Closure.isCsp",
           "function/dart:_js_helper::Closure.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::Primitives": {
         "id": "class/dart:_js_helper::Primitives",
@@ -523,7 +562,8 @@
           "function/dart:_js_helper::Primitives.objectToHumanReadableString",
           "function/dart:_js_helper::Primitives.objectTypeName",
           "function/dart:_js_helper::Primitives.stringConcatUnchecked"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::RuntimeError": {
         "id": "class/dart:_js_helper::RuntimeError",
@@ -539,6 +579,9 @@
           "field/dart:_js_helper::RuntimeError.message",
           "function/dart:_js_helper::RuntimeError.RuntimeError",
           "function/dart:_js_helper::RuntimeError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::StaticClosure": {
@@ -554,6 +597,9 @@
         "children": [
           "function/dart:_js_helper::StaticClosure.StaticClosure",
           "function/dart:_js_helper::StaticClosure.toString"
+        ],
+        "supers": [
+          "class/dart:_js_helper::TearOffClosure"
         ]
       },
       "dart:_js_helper::TearOffClosure": {
@@ -566,7 +612,10 @@
         "modifiers": {
           "abstract": true
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_js_helper::Closure"
+        ]
       },
       "dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
         "id": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
@@ -584,7 +633,8 @@
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
-        ]
+        ],
+        "supers": []
       },
       "dart:_recipe_syntax::Recipe": {
         "id": "class/dart:_recipe_syntax::Recipe",
@@ -600,7 +650,8 @@
           "function/dart:_recipe_syntax::Recipe.digitValue",
           "function/dart:_recipe_syntax::Recipe.isDigit",
           "function/dart:_recipe_syntax::Recipe.isIdentifierStart"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::Rti": {
         "id": "class/dart:_rti::Rti",
@@ -666,7 +717,8 @@
           "function/dart:_rti::Rti._setRest",
           "function/dart:_rti::Rti._setSpecializedTestResource",
           "function/dart:_rti::Rti.allocate"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::TypeRule": {
         "id": "class/dart:_rti::TypeRule",
@@ -681,7 +733,8 @@
         "children": [
           "function/dart:_rti::TypeRule.lookupSupertype",
           "function/dart:_rti::TypeRule.lookupTypeVariable"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Error": {
         "id": "class/dart:_rti::_Error",
@@ -697,6 +750,9 @@
           "field/dart:_rti::_Error._message",
           "function/dart:_rti::_Error.compose",
           "function/dart:_rti::_Error.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_rti::_FunctionParameters": {
@@ -721,7 +777,8 @@
           "function/dart:_rti::_FunctionParameters._setOptionalPositional",
           "function/dart:_rti::_FunctionParameters._setRequiredPositional",
           "function/dart:_rti::_FunctionParameters.allocate"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Parser": {
         "id": "class/dart:_rti::_Parser",
@@ -761,7 +818,8 @@
           "function/dart:_rti::_Parser.toTypes",
           "function/dart:_rti::_Parser.toTypesNamed",
           "function/dart:_rti::_Parser.universe"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Type": {
         "id": "class/dart:_rti::_Type",
@@ -775,7 +833,8 @@
         },
         "children": [
           "field/dart:_rti::_Type._rti"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_TypeError": {
         "id": "class/dart:_rti::_TypeError",
@@ -790,6 +849,9 @@
         "children": [
           "function/dart:_rti::_TypeError._TypeError.forType",
           "function/dart:_rti::_TypeError._TypeError.fromMessage"
+        ],
+        "supers": [
+          "class/dart:_rti::_Error"
         ]
       },
       "dart:_rti::_Universe": {
@@ -865,7 +927,8 @@
           "function/dart:_rti::_Universe.sharedEmptyArray",
           "function/dart:_rti::_Universe.typeParameterVariances",
           "function/dart:_rti::_Universe.typeRules"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Utils": {
         "id": "class/dart:_rti::_Utils",
@@ -903,7 +966,8 @@
           "function/dart:_rti::_Utils.objectKeys",
           "function/dart:_rti::_Utils.stringLessThan",
           "function/dart:_rti::_Utils.substring"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::IterableBase": {
         "id": "class/dart:collection::IterableBase",
@@ -917,7 +981,8 @@
         },
         "children": [
           "function/dart:collection::IterableBase.iterableToFullString"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::ListBase": {
         "id": "class/dart:collection::ListBase",
@@ -931,7 +996,8 @@
         },
         "children": [
           "function/dart:collection::ListBase.listToString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::ArgumentError": {
         "id": "class/dart:core::ArgumentError",
@@ -953,6 +1019,9 @@
           "function/dart:core::ArgumentError._errorExplanation",
           "function/dart:core::ArgumentError._errorName",
           "function/dart:core::ArgumentError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::AssertionError": {
@@ -969,6 +1038,9 @@
           "field/dart:core::AssertionError.message",
           "function/dart:core::AssertionError.AssertionError",
           "function/dart:core::AssertionError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::ConcurrentModificationError": {
@@ -985,6 +1057,9 @@
           "field/dart:core::ConcurrentModificationError.modifiedObject",
           "function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
           "function/dart:core::ConcurrentModificationError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::CyclicInitializationError": {
@@ -1001,6 +1076,9 @@
           "field/dart:core::CyclicInitializationError.variableName",
           "function/dart:core::CyclicInitializationError.CyclicInitializationError",
           "function/dart:core::CyclicInitializationError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::Error": {
@@ -1017,7 +1095,8 @@
           "function/dart:core::Error._objectToString",
           "function/dart:core::Error._stringToSafeString",
           "function/dart:core::Error.safeToString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::IndexError": {
         "id": "class/dart:core::IndexError",
@@ -1035,6 +1114,10 @@
           "function/dart:core::IndexError.IndexError",
           "function/dart:core::IndexError._errorExplanation",
           "function/dart:core::IndexError._errorName"
+        ],
+        "supers": [
+          "class/dart:core::ArgumentError",
+          "class/dart:core::RangeError"
         ]
       },
       "dart:core::Null": {
@@ -1049,7 +1132,8 @@
         },
         "children": [
           "function/dart:core::Null.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::NullThrownError": {
         "id": "class/dart:core::NullThrownError",
@@ -1064,6 +1148,9 @@
         "children": [
           "function/dart:core::NullThrownError.NullThrownError",
           "function/dart:core::NullThrownError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::Object": {
@@ -1078,7 +1165,8 @@
         },
         "children": [
           "function/dart:core::Object.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::RangeError": {
         "id": "class/dart:core::RangeError",
@@ -1096,6 +1184,9 @@
           "function/dart:core::RangeError.RangeError.value",
           "function/dart:core::RangeError._errorExplanation",
           "function/dart:core::RangeError._errorName"
+        ],
+        "supers": [
+          "class/dart:core::ArgumentError"
         ]
       },
       "dart:core::StateError": {
@@ -1110,6 +1201,9 @@
         },
         "children": [
           "field/dart:core::StateError.message"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::StringBuffer": {
@@ -1132,7 +1226,8 @@
           "function/dart:core::StringBuffer.toString",
           "function/dart:core::StringBuffer.write",
           "function/dart:core::StringBuffer.writeAll"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::UnsupportedError": {
         "id": "class/dart:core::UnsupportedError",
@@ -1148,6 +1243,9 @@
           "field/dart:core::UnsupportedError.message",
           "function/dart:core::UnsupportedError.UnsupportedError",
           "function/dart:core::UnsupportedError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::_Enum": {
@@ -1163,7 +1261,8 @@
         "children": [
           "field/dart:core::_Enum._name",
           "field/dart:core::_Enum.index"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::bool": {
         "id": "class/dart:core::bool",
@@ -1177,7 +1276,8 @@
         },
         "children": [
           "function/dart:core::bool.toString"
-        ]
+        ],
+        "supers": []
       }
     },
     "classType": {
@@ -28711,7 +28811,7 @@
       "id": "outputUnit/main",
       "kind": "outputUnit",
       "name": "main",
-      "size": 90269,
+      "size": 90293,
       "filename": "hello_world.js",
       "imports": []
     }
@@ -28721,12 +28821,12 @@
   "dump_minor_version": 1,
   "program": {
     "entrypoint": "function/hello_world.dart::main",
-    "size": 90269,
-    "ramUsage": "194.188 MB",
+    "size": 90293,
+    "ramUsage": "195.313 MB",
     "dart2jsVersion": null,
-    "compilationMoment": "2022-07-08 12:57:36.142141",
-    "compilationDuration": 1321045,
-    "toJsonDuration": 1000,
+    "compilationMoment": "2022-07-14 17:35:15.006337",
+    "compilationDuration": 1289072,
+    "toJsonDuration": 2000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
     "isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
index f583ac5..063aef8 100644
--- a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -413,7 +413,8 @@
         },
         "children": [
           "field/dart:_foreign_helper::JS_CONST.code"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::ArrayIterator": {
         "id": "class/dart:_interceptors::ArrayIterator",
@@ -433,7 +434,8 @@
           "function/dart:_interceptors::ArrayIterator.ArrayIterator",
           "function/dart:_interceptors::ArrayIterator.current",
           "function/dart:_interceptors::ArrayIterator.moveNext"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::Interceptor": {
         "id": "class/dart:_interceptors::Interceptor",
@@ -449,7 +451,8 @@
           "function/dart:_interceptors::Interceptor.==",
           "function/dart:_interceptors::Interceptor.hashCode",
           "function/dart:_interceptors::Interceptor.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:_interceptors::JSArray": {
         "id": "class/dart:_interceptors::JSArray",
@@ -481,6 +484,10 @@
           "function/dart:_interceptors::JSArray.length",
           "function/dart:_interceptors::JSArray.markFixedList",
           "function/dart:_interceptors::JSArray.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor",
+          "class/dart:core::List"
         ]
       },
       "dart:_interceptors::JSBool": {
@@ -496,6 +503,10 @@
         "children": [
           "function/dart:_interceptors::JSBool.hashCode",
           "function/dart:_interceptors::JSBool.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor",
+          "class/dart:core::bool"
         ]
       },
       "dart:_interceptors::JSInt": {
@@ -508,7 +519,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSNumber"
+        ]
       },
       "dart:_interceptors::JSNull": {
         "id": "class/dart:_interceptors::JSNull",
@@ -524,6 +538,10 @@
           "function/dart:_interceptors::JSNull.==",
           "function/dart:_interceptors::JSNull.hashCode",
           "function/dart:_interceptors::JSNull.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor",
+          "class/dart:core::Null"
         ]
       },
       "dart:_interceptors::JSNumNotInt": {
@@ -536,7 +554,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSNumber"
+        ]
       },
       "dart:_interceptors::JSNumber": {
         "id": "class/dart:_interceptors::JSNumber",
@@ -553,6 +574,9 @@
           "function/dart:_interceptors::JSNumber._shrOtherPositive",
           "function/dart:_interceptors::JSNumber.hashCode",
           "function/dart:_interceptors::JSNumber.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
         ]
       },
       "dart:_interceptors::JSString": {
@@ -571,6 +595,9 @@
           "function/dart:_interceptors::JSString.isEmpty",
           "function/dart:_interceptors::JSString.length",
           "function/dart:_interceptors::JSString.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
         ]
       },
       "dart:_interceptors::JSUnmodifiableArray": {
@@ -583,7 +610,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::JSArray"
+        ]
       },
       "dart:_interceptors::JavaScriptObject": {
         "id": "class/dart:_interceptors::JavaScriptObject",
@@ -595,7 +625,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::Interceptor"
+        ]
       },
       "dart:_interceptors::LegacyJavaScriptObject": {
         "id": "class/dart:_interceptors::LegacyJavaScriptObject",
@@ -610,6 +643,9 @@
         "children": [
           "function/dart:_interceptors::LegacyJavaScriptObject.hashCode",
           "function/dart:_interceptors::LegacyJavaScriptObject.toString"
+        ],
+        "supers": [
+          "class/dart:_interceptors::JavaScriptObject"
         ]
       },
       "dart:_interceptors::PlainJavaScriptObject": {
@@ -622,7 +658,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::LegacyJavaScriptObject"
+        ]
       },
       "dart:_interceptors::UnknownJavaScriptObject": {
         "id": "class/dart:_interceptors::UnknownJavaScriptObject",
@@ -634,7 +673,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_interceptors::LegacyJavaScriptObject"
+        ]
       },
       "dart:_internal::LateError": {
         "id": "class/dart:_internal::LateError",
@@ -651,6 +693,9 @@
           "function/dart:_internal::LateError.LateError.fieldADI",
           "function/dart:_internal::LateError.LateError.localNI",
           "function/dart:_internal::LateError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_internal::NotNullableError": {
@@ -666,6 +711,10 @@
         "children": [
           "field/dart:_internal::NotNullableError._name",
           "function/dart:_internal::NotNullableError.NotNullableError"
+        ],
+        "supers": [
+          "class/dart:core::Error",
+          "class/dart:core::TypeError"
         ]
       },
       "dart:_js_helper::BoundClosure": {
@@ -695,6 +744,9 @@
           "function/dart:_js_helper::BoundClosure.receiverFieldName",
           "function/dart:_js_helper::BoundClosure.receiverOf",
           "function/dart:_js_helper::BoundClosure.toString"
+        ],
+        "supers": [
+          "class/dart:_js_helper::TearOffClosure"
         ]
       },
       "dart:_js_helper::Closure": {
@@ -717,7 +769,8 @@
           "function/dart:_js_helper::Closure.fromTearOff",
           "function/dart:_js_helper::Closure.isCsp",
           "function/dart:_js_helper::Closure.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::Closure0Args": {
         "id": "class/dart:_js_helper::Closure0Args",
@@ -729,7 +782,10 @@
         "modifiers": {
           "abstract": true
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_js_helper::Closure"
+        ]
       },
       "dart:_js_helper::Closure2Args": {
         "id": "class/dart:_js_helper::Closure2Args",
@@ -741,7 +797,10 @@
         "modifiers": {
           "abstract": true
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_js_helper::Closure"
+        ]
       },
       "dart:_js_helper::DeferredNotLoadedError": {
         "id": "class/dart:_js_helper::DeferredNotLoadedError",
@@ -757,6 +816,9 @@
           "field/dart:_js_helper::DeferredNotLoadedError.libraryName",
           "function/dart:_js_helper::DeferredNotLoadedError.DeferredNotLoadedError",
           "function/dart:_js_helper::DeferredNotLoadedError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::ExceptionAndStackTrace": {
@@ -773,7 +835,8 @@
           "field/dart:_js_helper::ExceptionAndStackTrace.dartException",
           "field/dart:_js_helper::ExceptionAndStackTrace.stackTrace",
           "function/dart:_js_helper::ExceptionAndStackTrace.ExceptionAndStackTrace"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::JsLinkedHashMap": {
         "id": "class/dart:_js_helper::JsLinkedHashMap",
@@ -815,6 +878,10 @@
           "function/dart:_js_helper::JsLinkedHashMap.keys",
           "function/dart:_js_helper::JsLinkedHashMap.length",
           "function/dart:_js_helper::JsLinkedHashMap.toString"
+        ],
+        "supers": [
+          "class/dart:collection::LinkedHashMap",
+          "class/dart:collection::MapBase"
         ]
       },
       "dart:_js_helper::JsNoSuchMethodError": {
@@ -833,6 +900,9 @@
           "field/dart:_js_helper::JsNoSuchMethodError._receiver",
           "function/dart:_js_helper::JsNoSuchMethodError.JsNoSuchMethodError",
           "function/dart:_js_helper::JsNoSuchMethodError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::LinkedHashMapCell": {
@@ -851,7 +921,8 @@
           "field/dart:_js_helper::LinkedHashMapCell.hashMapCellKey",
           "field/dart:_js_helper::LinkedHashMapCell.hashMapCellValue",
           "function/dart:_js_helper::LinkedHashMapCell.LinkedHashMapCell"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::LinkedHashMapKeyIterable": {
         "id": "class/dart:_js_helper::LinkedHashMapKeyIterable",
@@ -867,7 +938,8 @@
           "field/dart:_js_helper::LinkedHashMapKeyIterable._map",
           "function/dart:_js_helper::LinkedHashMapKeyIterable.LinkedHashMapKeyIterable",
           "function/dart:_js_helper::LinkedHashMapKeyIterable.length"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::LinkedHashMapKeyIterator": {
         "id": "class/dart:_js_helper::LinkedHashMapKeyIterator",
@@ -884,7 +956,8 @@
           "field/dart:_js_helper::LinkedHashMapKeyIterator._current",
           "field/dart:_js_helper::LinkedHashMapKeyIterator._map",
           "field/dart:_js_helper::LinkedHashMapKeyIterator._modifications"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::NullError": {
         "id": "class/dart:_js_helper::NullError",
@@ -901,6 +974,9 @@
           "field/dart:_js_helper::NullError._method",
           "function/dart:_js_helper::NullError.NullError",
           "function/dart:_js_helper::NullError.toString"
+        ],
+        "supers": [
+          "class/dart:core::TypeError"
         ]
       },
       "dart:_js_helper::NullThrownFromJavaScriptException": {
@@ -917,6 +993,9 @@
           "field/dart:_js_helper::NullThrownFromJavaScriptException._irritant",
           "function/dart:_js_helper::NullThrownFromJavaScriptException.NullThrownFromJavaScriptException",
           "function/dart:_js_helper::NullThrownFromJavaScriptException.toString"
+        ],
+        "supers": [
+          "class/dart:core::Exception"
         ]
       },
       "dart:_js_helper::Primitives": {
@@ -940,7 +1019,8 @@
           "function/dart:_js_helper::Primitives.objectToHumanReadableString",
           "function/dart:_js_helper::Primitives.objectTypeName",
           "function/dart:_js_helper::Primitives.stringConcatUnchecked"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::RuntimeError": {
         "id": "class/dart:_js_helper::RuntimeError",
@@ -956,6 +1036,9 @@
           "field/dart:_js_helper::RuntimeError.message",
           "function/dart:_js_helper::RuntimeError.RuntimeError",
           "function/dart:_js_helper::RuntimeError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::StaticClosure": {
@@ -971,6 +1054,9 @@
         "children": [
           "function/dart:_js_helper::StaticClosure.StaticClosure",
           "function/dart:_js_helper::StaticClosure.toString"
+        ],
+        "supers": [
+          "class/dart:_js_helper::TearOffClosure"
         ]
       },
       "dart:_js_helper::TearOffClosure": {
@@ -983,7 +1069,10 @@
         "modifiers": {
           "abstract": true
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:_js_helper::Closure"
+        ]
       },
       "dart:_js_helper::TypeErrorDecoder": {
         "id": "class/dart:_js_helper::TypeErrorDecoder",
@@ -1023,7 +1112,8 @@
           "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOn",
           "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnNull",
           "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnUndefined"
-        ]
+        ],
+        "supers": []
       },
       "dart:_js_helper::UnknownJsTypeError": {
         "id": "class/dart:_js_helper::UnknownJsTypeError",
@@ -1039,6 +1129,9 @@
           "field/dart:_js_helper::UnknownJsTypeError._message",
           "function/dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError",
           "function/dart:_js_helper::UnknownJsTypeError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_js_helper::_AssertionError": {
@@ -1054,6 +1147,9 @@
         "children": [
           "function/dart:_js_helper::_AssertionError._AssertionError",
           "function/dart:_js_helper::_AssertionError.toString"
+        ],
+        "supers": [
+          "class/dart:core::AssertionError"
         ]
       },
       "dart:_js_helper::_StackTrace": {
@@ -1071,6 +1167,9 @@
           "field/dart:_js_helper::_StackTrace._trace",
           "function/dart:_js_helper::_StackTrace._StackTrace",
           "function/dart:_js_helper::_StackTrace.toString"
+        ],
+        "supers": [
+          "class/dart:core::StackTrace"
         ]
       },
       "dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
@@ -1089,7 +1188,8 @@
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
           "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
-        ]
+        ],
+        "supers": []
       },
       "dart:_late_helper::_Cell": {
         "id": "class/dart:_late_helper::_Cell",
@@ -1108,7 +1208,8 @@
           "function/dart:_late_helper::_Cell._readLocal",
           "function/dart:_late_helper::_Cell.readLocal",
           "function/dart:_late_helper::_Cell.value"
-        ]
+        ],
+        "supers": []
       },
       "dart:_recipe_syntax::Recipe": {
         "id": "class/dart:_recipe_syntax::Recipe",
@@ -1124,7 +1225,8 @@
           "function/dart:_recipe_syntax::Recipe.digitValue",
           "function/dart:_recipe_syntax::Recipe.isDigit",
           "function/dart:_recipe_syntax::Recipe.isIdentifierStart"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::Rti": {
         "id": "class/dart:_rti::Rti",
@@ -1190,7 +1292,8 @@
           "function/dart:_rti::Rti._setRest",
           "function/dart:_rti::Rti._setSpecializedTestResource",
           "function/dart:_rti::Rti.allocate"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::TypeRule": {
         "id": "class/dart:_rti::TypeRule",
@@ -1205,7 +1308,8 @@
         "children": [
           "function/dart:_rti::TypeRule.lookupSupertype",
           "function/dart:_rti::TypeRule.lookupTypeVariable"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Error": {
         "id": "class/dart:_rti::_Error",
@@ -1221,6 +1325,9 @@
           "field/dart:_rti::_Error._message",
           "function/dart:_rti::_Error.compose",
           "function/dart:_rti::_Error.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:_rti::_FunctionParameters": {
@@ -1245,7 +1352,8 @@
           "function/dart:_rti::_FunctionParameters._setOptionalPositional",
           "function/dart:_rti::_FunctionParameters._setRequiredPositional",
           "function/dart:_rti::_FunctionParameters.allocate"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Parser": {
         "id": "class/dart:_rti::_Parser",
@@ -1285,7 +1393,8 @@
           "function/dart:_rti::_Parser.toTypes",
           "function/dart:_rti::_Parser.toTypesNamed",
           "function/dart:_rti::_Parser.universe"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Type": {
         "id": "class/dart:_rti::_Type",
@@ -1299,7 +1408,8 @@
         },
         "children": [
           "field/dart:_rti::_Type._rti"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_TypeError": {
         "id": "class/dart:_rti::_TypeError",
@@ -1314,6 +1424,10 @@
         "children": [
           "function/dart:_rti::_TypeError._TypeError.forType",
           "function/dart:_rti::_TypeError._TypeError.fromMessage"
+        ],
+        "supers": [
+          "class/dart:_rti::_Error",
+          "class/dart:core::TypeError"
         ]
       },
       "dart:_rti::_Universe": {
@@ -1389,7 +1503,8 @@
           "function/dart:_rti::_Universe.sharedEmptyArray",
           "function/dart:_rti::_Universe.typeParameterVariances",
           "function/dart:_rti::_Universe.typeRules"
-        ]
+        ],
+        "supers": []
       },
       "dart:_rti::_Utils": {
         "id": "class/dart:_rti::_Utils",
@@ -1427,7 +1542,8 @@
           "function/dart:_rti::_Utils.objectKeys",
           "function/dart:_rti::_Utils.stringLessThan",
           "function/dart:_rti::_Utils.substring"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::AsyncError": {
         "id": "class/dart:async::AsyncError",
@@ -1445,6 +1561,9 @@
           "function/dart:async::AsyncError.AsyncError",
           "function/dart:async::AsyncError.defaultStackTrace",
           "function/dart:async::AsyncError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:async::Completer": {
@@ -1459,7 +1578,8 @@
         },
         "children": [
           "function/dart:async::Completer.Completer"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::DeferredLoadException": {
         "id": "class/dart:async::DeferredLoadException",
@@ -1475,6 +1595,9 @@
           "field/dart:async::DeferredLoadException._s",
           "function/dart:async::DeferredLoadException.DeferredLoadException",
           "function/dart:async::DeferredLoadException.toString"
+        ],
+        "supers": [
+          "class/dart:core::Exception"
         ]
       },
       "dart:async::Future": {
@@ -1491,7 +1614,8 @@
           "function/dart:async::Future.Future.error",
           "function/dart:async::Future.Future.value",
           "function/dart:async::Future.wait"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::StreamIterator": {
         "id": "class/dart:async::StreamIterator",
@@ -1505,7 +1629,8 @@
         },
         "children": [
           "function/dart:async::StreamIterator.StreamIterator"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::Timer": {
         "id": "class/dart:async::Timer",
@@ -1519,7 +1644,8 @@
         },
         "children": [
           "function/dart:async::Timer._createTimer"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::Zone": {
         "id": "class/dart:async::Zone",
@@ -1536,7 +1662,8 @@
           "function/dart:async::Zone._enter",
           "function/dart:async::Zone._leave",
           "function/dart:async::Zone.current"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::_AsyncAwaitCompleter": {
         "id": "class/dart:async::_AsyncAwaitCompleter",
@@ -1555,6 +1682,9 @@
           "function/dart:async::_AsyncAwaitCompleter.complete",
           "function/dart:async::_AsyncAwaitCompleter.completeError",
           "function/dart:async::_AsyncAwaitCompleter.future"
+        ],
+        "supers": [
+          "class/dart:async::Completer"
         ]
       },
       "dart:async::_AsyncCallbackEntry": {
@@ -1571,7 +1701,8 @@
           "field/dart:async::_AsyncCallbackEntry.callback",
           "field/dart:async::_AsyncCallbackEntry.next",
           "function/dart:async::_AsyncCallbackEntry._AsyncCallbackEntry"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::_AsyncCompleter": {
         "id": "class/dart:async::_AsyncCompleter",
@@ -1587,6 +1718,9 @@
           "function/dart:async::_AsyncCompleter._AsyncCompleter",
           "function/dart:async::_AsyncCompleter._completeError",
           "function/dart:async::_AsyncCompleter.complete"
+        ],
+        "supers": [
+          "class/dart:async::_Completer"
         ]
       },
       "dart:async::_AsyncRun": {
@@ -1606,7 +1740,8 @@
           "function/dart:async::_AsyncRun._scheduleImmediateJsOverride",
           "function/dart:async::_AsyncRun._scheduleImmediateWithSetImmediate",
           "function/dart:async::_AsyncRun._scheduleImmediateWithTimer"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::_Completer": {
         "id": "class/dart:async::_Completer",
@@ -1621,6 +1756,9 @@
         "children": [
           "field/dart:async::_Completer.future",
           "function/dart:async::_Completer.completeError"
+        ],
+        "supers": [
+          "class/dart:async::Completer"
         ]
       },
       "dart:async::_Future": {
@@ -1670,6 +1808,9 @@
           "function/dart:async::_Future._setValue",
           "function/dart:async::_Future._thenAwait",
           "function/dart:async::_Future.then"
+        ],
+        "supers": [
+          "class/dart:async::Future"
         ]
       },
       "dart:async::_FutureListener": {
@@ -1705,7 +1846,8 @@
           "function/dart:async::_FutureListener.hasErrorTest",
           "function/dart:async::_FutureListener.matchesErrorTest",
           "function/dart:async::_FutureListener.shouldChain"
-        ]
+        ],
+        "supers": []
       },
       "dart:async::_RootZone": {
         "id": "class/dart:async::_RootZone",
@@ -1731,6 +1873,9 @@
           "function/dart:async::_RootZone.runGuarded",
           "function/dart:async::_RootZone.runUnary",
           "function/dart:async::_RootZone.scheduleMicrotask"
+        ],
+        "supers": [
+          "class/dart:async::_Zone"
         ]
       },
       "dart:async::_StreamIterator": {
@@ -1748,6 +1893,9 @@
           "field/dart:async::_StreamIterator._stateData",
           "field/dart:async::_StreamIterator._subscription",
           "function/dart:async::_StreamIterator._StreamIterator"
+        ],
+        "supers": [
+          "class/dart:async::StreamIterator"
         ]
       },
       "dart:async::_TimerImpl": {
@@ -1765,6 +1913,9 @@
           "field/dart:async::_TimerImpl._once",
           "field/dart:async::_TimerImpl._tick",
           "function/dart:async::_TimerImpl._TimerImpl"
+        ],
+        "supers": [
+          "class/dart:async::Timer"
         ]
       },
       "dart:async::_Zone": {
@@ -1779,6 +1930,9 @@
         },
         "children": [
           "function/dart:async::_Zone.inSameErrorZone"
+        ],
+        "supers": [
+          "class/dart:async::Zone"
         ]
       },
       "dart:async::_ZoneFunction": {
@@ -1794,7 +1948,8 @@
         "children": [
           "field/dart:async::_ZoneFunction.function",
           "field/dart:async::_ZoneFunction.zone"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::IterableBase": {
         "id": "class/dart:collection::IterableBase",
@@ -1808,7 +1963,8 @@
         },
         "children": [
           "function/dart:collection::IterableBase.iterableToFullString"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::LinkedHashMap": {
         "id": "class/dart:collection::LinkedHashMap",
@@ -1822,7 +1978,8 @@
         },
         "children": [
           "function/dart:collection::LinkedHashMap.LinkedHashMap._empty"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::LinkedHashSet": {
         "id": "class/dart:collection::LinkedHashSet",
@@ -1836,7 +1993,8 @@
         },
         "children": [
           "function/dart:collection::LinkedHashSet.LinkedHashSet"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::ListBase": {
         "id": "class/dart:collection::ListBase",
@@ -1850,7 +2008,8 @@
         },
         "children": [
           "function/dart:collection::ListBase.listToString"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::MapBase": {
         "id": "class/dart:collection::MapBase",
@@ -1864,6 +2023,9 @@
         },
         "children": [
           "function/dart:collection::MapBase.mapToString"
+        ],
+        "supers": [
+          "class/dart:collection::MapMixin"
         ]
       },
       "dart:collection::MapMixin": {
@@ -1879,7 +2041,8 @@
         "children": [
           "function/dart:collection::MapMixin.length",
           "function/dart:collection::MapMixin.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::SetMixin": {
         "id": "class/dart:collection::SetMixin",
@@ -1893,7 +2056,8 @@
         },
         "children": [
           "function/dart:collection::SetMixin.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::_LinkedCustomHashSet": {
         "id": "class/dart:collection::_LinkedCustomHashSet",
@@ -1909,6 +2073,9 @@
           "field/dart:collection::_LinkedCustomHashSet._equality",
           "field/dart:collection::_LinkedCustomHashSet._hasher",
           "field/dart:collection::_LinkedCustomHashSet._validKey"
+        ],
+        "supers": [
+          "class/dart:collection::_LinkedHashSet"
         ]
       },
       "dart:collection::_LinkedHashSet": {
@@ -1948,6 +2115,10 @@
           "function/dart:collection::_LinkedHashSet.contains",
           "function/dart:collection::_LinkedHashSet.iterator",
           "function/dart:collection::_LinkedHashSet.length"
+        ],
+        "supers": [
+          "class/dart:collection::LinkedHashSet",
+          "class/dart:collection::_SetBase"
         ]
       },
       "dart:collection::_LinkedHashSetCell": {
@@ -1965,7 +2136,8 @@
           "field/dart:collection::_LinkedHashSetCell._next",
           "field/dart:collection::_LinkedHashSetCell._previous",
           "function/dart:collection::_LinkedHashSetCell._LinkedHashSetCell"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::_LinkedHashSetIterator": {
         "id": "class/dart:collection::_LinkedHashSetIterator",
@@ -1985,7 +2157,8 @@
           "function/dart:collection::_LinkedHashSetIterator._LinkedHashSetIterator",
           "function/dart:collection::_LinkedHashSetIterator.current",
           "function/dart:collection::_LinkedHashSetIterator.moveNext"
-        ]
+        ],
+        "supers": []
       },
       "dart:collection::_LinkedIdentityHashSet": {
         "id": "class/dart:collection::_LinkedIdentityHashSet",
@@ -1999,6 +2172,9 @@
         },
         "children": [
           "function/dart:collection::_LinkedIdentityHashSet._LinkedIdentityHashSet"
+        ],
+        "supers": [
+          "class/dart:collection::_LinkedHashSet"
         ]
       },
       "dart:collection::_SetBase": {
@@ -2011,7 +2187,8 @@
         "modifiers": {
           "abstract": true
         },
-        "children": []
+        "children": [],
+        "supers": []
       },
       "dart:core::ArgumentError": {
         "id": "class/dart:core::ArgumentError",
@@ -2033,6 +2210,9 @@
           "function/dart:core::ArgumentError._errorExplanation",
           "function/dart:core::ArgumentError._errorName",
           "function/dart:core::ArgumentError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::AssertionError": {
@@ -2049,6 +2229,9 @@
           "field/dart:core::AssertionError.message",
           "function/dart:core::AssertionError.AssertionError",
           "function/dart:core::AssertionError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::ConcurrentModificationError": {
@@ -2065,6 +2248,9 @@
           "field/dart:core::ConcurrentModificationError.modifiedObject",
           "function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
           "function/dart:core::ConcurrentModificationError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::CyclicInitializationError": {
@@ -2081,6 +2267,9 @@
           "field/dart:core::CyclicInitializationError.variableName",
           "function/dart:core::CyclicInitializationError.CyclicInitializationError",
           "function/dart:core::CyclicInitializationError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::Duration": {
@@ -2096,7 +2285,8 @@
         "children": [
           "field/dart:core::Duration._duration",
           "function/dart:core::Duration.inMilliseconds"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::Error": {
         "id": "class/dart:core::Error",
@@ -2115,7 +2305,8 @@
           "function/dart:core::Error.safeToString",
           "function/dart:core::Error.stackTrace",
           "function/dart:core::Error.throwWithStackTrace"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::Exception": {
         "id": "class/dart:core::Exception",
@@ -2129,7 +2320,8 @@
         },
         "children": [
           "function/dart:core::Exception.Exception"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::IndexError": {
         "id": "class/dart:core::IndexError",
@@ -2147,6 +2339,10 @@
           "function/dart:core::IndexError.IndexError",
           "function/dart:core::IndexError._errorExplanation",
           "function/dart:core::IndexError._errorName"
+        ],
+        "supers": [
+          "class/dart:core::ArgumentError",
+          "class/dart:core::RangeError"
         ]
       },
       "dart:core::List": {
@@ -2163,7 +2359,8 @@
           "function/dart:core::List.List.filled",
           "function/dart:core::List.List.from",
           "function/dart:core::List.List.generate"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::Null": {
         "id": "class/dart:core::Null",
@@ -2178,7 +2375,8 @@
         "children": [
           "function/dart:core::Null.hashCode",
           "function/dart:core::Null.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::NullThrownError": {
         "id": "class/dart:core::NullThrownError",
@@ -2193,6 +2391,9 @@
         "children": [
           "function/dart:core::NullThrownError.NullThrownError",
           "function/dart:core::NullThrownError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::Object": {
@@ -2209,7 +2410,8 @@
           "function/dart:core::Object.==",
           "function/dart:core::Object.hashCode",
           "function/dart:core::Object.toString"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::RangeError": {
         "id": "class/dart:core::RangeError",
@@ -2228,6 +2430,9 @@
           "function/dart:core::RangeError.RangeError.value",
           "function/dart:core::RangeError._errorExplanation",
           "function/dart:core::RangeError._errorName"
+        ],
+        "supers": [
+          "class/dart:core::ArgumentError"
         ]
       },
       "dart:core::StackOverflowError": {
@@ -2244,6 +2449,9 @@
           "function/dart:core::StackOverflowError.StackOverflowError",
           "function/dart:core::StackOverflowError.stackTrace",
           "function/dart:core::StackOverflowError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::StackTrace": {
@@ -2258,7 +2466,8 @@
         },
         "children": [
           "function/dart:core::StackTrace.current"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::StateError": {
         "id": "class/dart:core::StateError",
@@ -2274,6 +2483,9 @@
           "field/dart:core::StateError.message",
           "function/dart:core::StateError.StateError",
           "function/dart:core::StateError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::StringBuffer": {
@@ -2296,7 +2508,8 @@
           "function/dart:core::StringBuffer.toString",
           "function/dart:core::StringBuffer.write",
           "function/dart:core::StringBuffer.writeAll"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::TypeError": {
         "id": "class/dart:core::TypeError",
@@ -2308,7 +2521,10 @@
         "modifiers": {
           "abstract": false
         },
-        "children": []
+        "children": [],
+        "supers": [
+          "class/dart:core::Error"
+        ]
       },
       "dart:core::UnsupportedError": {
         "id": "class/dart:core::UnsupportedError",
@@ -2324,6 +2540,9 @@
           "field/dart:core::UnsupportedError.message",
           "function/dart:core::UnsupportedError.UnsupportedError",
           "function/dart:core::UnsupportedError.toString"
+        ],
+        "supers": [
+          "class/dart:core::Error"
         ]
       },
       "dart:core::_Enum": {
@@ -2339,7 +2558,8 @@
         "children": [
           "field/dart:core::_Enum._name",
           "field/dart:core::_Enum.index"
-        ]
+        ],
+        "supers": []
       },
       "dart:core::_Exception": {
         "id": "class/dart:core::_Exception",
@@ -2355,6 +2575,9 @@
           "field/dart:core::_Exception.message",
           "function/dart:core::_Exception._Exception",
           "function/dart:core::_Exception.toString"
+        ],
+        "supers": [
+          "class/dart:core::Exception"
         ]
       },
       "dart:core::_StringStackTrace": {
@@ -2370,6 +2593,9 @@
         "children": [
           "field/dart:core::_StringStackTrace._stackTrace",
           "function/dart:core::_StringStackTrace.toString"
+        ],
+        "supers": [
+          "class/dart:core::StackTrace"
         ]
       },
       "dart:core::bool": {
@@ -2385,7 +2611,8 @@
         "children": [
           "function/dart:core::bool.hashCode",
           "function/dart:core::bool.toString"
-        ]
+        ],
+        "supers": []
       }
     },
     "classType": {
@@ -67158,7 +67385,7 @@
       "id": "outputUnit/1",
       "kind": "outputUnit",
       "name": "1",
-      "size": 594,
+      "size": 618,
       "filename": "hello_world_deferred.js_1.part.js",
       "imports": [
         "deferred_import"
@@ -67168,7 +67395,7 @@
       "id": "outputUnit/main",
       "kind": "outputUnit",
       "name": "main",
-      "size": 188115,
+      "size": 188139,
       "filename": "hello_world_deferred.js",
       "imports": []
     }
@@ -67187,12 +67414,12 @@
   "dump_minor_version": 1,
   "program": {
     "entrypoint": "function/hello_world_deferred.dart::main",
-    "size": 188709,
-    "ramUsage": "218.516 MB",
+    "size": 188757,
+    "ramUsage": "222.625 MB",
     "dart2jsVersion": null,
-    "compilationMoment": "2022-07-08 12:58:35.955576",
-    "compilationDuration": 1806706,
-    "toJsonDuration": 3000,
+    "compilationMoment": "2022-07-14 17:35:30.061216",
+    "compilationDuration": 1870645,
+    "toJsonDuration": 2000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
     "isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 5b20745..95d75be 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -20,11 +20,11 @@
       final proto = AllInfoProtoCodec().encode(decoded);
 
       expect(proto.program.entrypointId, isNotNull);
-      expect(proto.program.size, 90269);
+      expect(proto.program.size, 90293);
       expect(proto.program.compilationMoment.toInt(),
-          DateTime.parse("2022-07-08 12:57:36.142141").microsecondsSinceEpoch);
+          DateTime.parse("2022-07-14 17:35:15.006337").microsecondsSinceEpoch);
       expect(proto.program.toProtoDuration.toInt(),
-          Duration(milliseconds: 1).inMicroseconds);
+          Duration(milliseconds: 2).inMicroseconds);
       expect(proto.program.dumpInfoDuration.toInt(),
           Duration(milliseconds: 0).inMicroseconds);
       expect(proto.program.noSuchMethodEnabled, isFalse);
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
index be06468..0145a79 100644
--- a/pkg/dart2js_info/test/parse_test.dart
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -20,11 +20,11 @@
       expect(program, isNotNull);
 
       expect(program!.entrypoint, isNotNull);
-      expect(program.size, 90269);
+      expect(program.size, 90293);
       expect(program.compilationMoment,
-          DateTime.parse("2022-07-08 12:57:36.142141"));
-      expect(program.compilationDuration, Duration(microseconds: 1321045));
-      expect(program.toJsonDuration, Duration(milliseconds: 1));
+          DateTime.parse("2022-07-14 17:35:15.006337"));
+      expect(program.compilationDuration, Duration(microseconds: 1289072));
+      expect(program.toJsonDuration, Duration(milliseconds: 2));
       expect(program.dumpInfoDuration, Duration(seconds: 0));
       expect(program.noSuchMethodEnabled, false);
       expect(program.minified, false);
diff --git a/pkg/dev_compiler/lib/ddc.dart b/pkg/dev_compiler/lib/ddc.dart
index feaa482..2fb2b45 100755
--- a/pkg/dev_compiler/lib/ddc.dart
+++ b/pkg/dev_compiler/lib/ddc.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 /// Command line entry point for Dart Development Compiler (dartdevc), used to
 /// compile a collection of dart libraries into a single JS module
 
@@ -21,7 +19,7 @@
 ///
 /// [sendPort] may be passed in when started in an isolate. If provided, it is
 /// used for bazel worker communication instead of stdin/stdout.
-Future internalMain(List<String> args, [SendPort sendPort]) async {
+Future internalMain(List<String> args, [SendPort? sendPort]) async {
   // Always returns a new modifiable list.
   var parsedArgs = ParsedArguments.from(args);
 
@@ -51,7 +49,7 @@
 
   /// Keeps track of our last compilation result so it can potentially be
   /// re-used in a worker.
-  CompilerResult lastResult;
+  CompilerResult? lastResult;
 
   /// Performs each individual work request.
   @override
@@ -74,7 +72,7 @@
       output.writeln(message.toString());
     }));
     return WorkResponse()
-      ..exitCode = lastResult.success ? 0 : 1
+      ..exitCode = lastResult!.success ? 0 : 1
       ..output = output.toString();
   }
 }
@@ -87,12 +85,12 @@
 
   print('>>> BATCH START');
 
-  String line;
-  CompilerResult result;
+  String? line;
+  CompilerResult? result;
 
   while ((line = stdin.readLineSync(encoding: utf8))?.isNotEmpty == true) {
     totalTests++;
-    var args = batchArgs.merge(line.split(RegExp(r'\s+')));
+    var args = batchArgs.merge(line!.split(RegExp(r'\s+')));
 
     String outcome;
     try {
diff --git a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
index 933dce6..6374d43 100644
--- a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:dev_compiler/src/kernel/expression_compiler.dart';
 import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart';
@@ -109,11 +107,11 @@
         const TypeMatcher<FunctionNode>()
             .having(
                 (c) => c.fileOffset,
-                '${fun.parent.toText(astTextStrategyForTesting)} : fileOffset',
+                '${fun.parent!.toText(astTextStrategyForTesting)} : fileOffset',
                 isNot(equals(-1)))
             .having(
                 (c) => c.fileEndOffset,
-                '${fun.parent.toText(astTextStrategyForTesting)} : fileEndOffset',
+                '${fun.parent!.toText(astTextStrategyForTesting)} : fileEndOffset',
                 isNot(equals(-1))));
 
     super.visitFunctionNode(fun);
diff --git a/pkg/dev_compiler/test/worker/worker_test.dart b/pkg/dev_compiler/test/worker/worker_test.dart
index 6e3e03e..ea2d52b 100644
--- a/pkg/dev_compiler/test/worker/worker_test.dart
+++ b/pkg/dev_compiler/test/worker/worker_test.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
@@ -379,9 +377,9 @@
 }
 
 Future<WorkResponse> _readResponse(MessageGrouper messageGrouper) async {
-  var buffer = await messageGrouper.next as List<int>;
+  var buffer = await messageGrouper.next as List<int>?;
   try {
-    return WorkResponse.fromBuffer(buffer);
+    return WorkResponse.fromBuffer(buffer!);
   } catch (_) {
     var bufferAsString =
         buffer == null ? '' : 'String: ${utf8.decode(buffer)}\n';
diff --git a/sdk/lib/_http/http_headers.dart b/sdk/lib/_http/http_headers.dart
index 2ccf23a..dad7403 100644
--- a/sdk/lib/_http/http_headers.dart
+++ b/sdk/lib/_http/http_headers.dart
@@ -4,6 +4,8 @@
 
 part of dart._http;
 
+final _digitsValidator = RegExp(r"^\d+$");
+
 class _HttpHeaders implements HttpHeaders {
   final Map<String, List<String>> _headers;
   // The original header names keyed by the lowercase header names.
@@ -373,12 +375,18 @@
 
   void _addContentLength(String name, value) {
     if (value is int) {
-      contentLength = value;
+      if (value < 0) {
+        throw HttpException("Content-Length must contain only digits");
+      }
     } else if (value is String) {
-      contentLength = int.parse(value);
+      if (!_digitsValidator.hasMatch(value)) {
+        throw HttpException("Content-Length must contain only digits");
+      }
+      value = int.parse(value);
     } else {
       throw HttpException("Unexpected type for header named $name");
     }
+    contentLength = value;
   }
 
   void _addTransferEncoding(String name, value) {
diff --git a/tests/standalone/io/http_headers_content_length_test.dart b/tests/standalone/io/http_headers_content_length_test.dart
index 9997ffe..3ccf962 100644
--- a/tests/standalone/io/http_headers_content_length_test.dart
+++ b/tests/standalone/io/http_headers_content_length_test.dart
@@ -6,6 +6,8 @@
 
 import "package:expect/expect.dart";
 
+// See also http_headers_test.dart.
+
 Future<void> main() async {
   final server = await HttpServer.bind("localhost", 0);
   final request = await HttpClient().get("localhost", server.port, "/");
diff --git a/tests/standalone/io/http_headers_test.dart b/tests/standalone/io/http_headers_test.dart
index f2cfb6c..99884f6 100644
--- a/tests/standalone/io/http_headers_test.dart
+++ b/tests/standalone/io/http_headers_test.dart
@@ -361,6 +361,48 @@
   Expect.equals("v; a=\"ø\"", HeaderValue("v", {"a": "ø"}).toString());
 }
 
+void testContentLength() {
+  // See also http_headers_content_length_test.dart.
+  var headers = new _HttpHeaders("1.1");
+  headers.set("content-length", ["256"]);
+  Expect.equals(256, headers.contentLength);
+  Expect.listEquals(["256"], headers["content-length"]!);
+  Expect.equals("256", headers.value("content-length"));
+
+  headers = new _HttpHeaders("1.1");
+  headers.set("content-length", [256]);
+  Expect.equals(256, headers.contentLength);
+  Expect.listEquals(["256"], headers["content-length"]!);
+  Expect.equals("256", headers.value("content-length"));
+
+  headers = new _HttpHeaders("1.1");
+  var e = Expect.throws<HttpException>(
+      () => headers.set("content-length", ["cat"]));
+  Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+  headers = new _HttpHeaders("1.1");
+  e = Expect.throws(
+      () => headers.set("content-length", ["-3"]), (e) => e is HttpException);
+  Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+  headers = new _HttpHeaders("1.1");
+  e = Expect.throws(
+      () => headers.set("content-length", [-3]), (e) => e is HttpException);
+  Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+  headers = new _HttpHeaders("1.1");
+  e = Expect.throws(
+      () => headers.set("content-length", [[]]), (e) => e is HttpException);
+  Expect.isTrue(
+      e.message.contains("Unexpected type for header named content-length"));
+
+  headers = new _HttpHeaders("1.1");
+  headers.set("content-length", ["1", "2"]);
+  Expect.equals(2, headers.contentLength);
+  Expect.listEquals(["2"], headers["content-length"]!);
+  Expect.equals("2", headers.value("content-length"));
+}
+
 void testContentType() {
   void check(ContentType contentType, String primaryType, String subType,
       [Map<String, String?>? parameters]) {
@@ -743,6 +785,7 @@
   testTransferEncoding();
   testEnumeration();
   testHeaderValue();
+  testContentLength();
   testContentType();
   testKnownContentTypes();
   testContentTypeCache();
diff --git a/tests/standalone_2/io/http_headers_content_length_test.dart b/tests/standalone_2/io/http_headers_content_length_test.dart
index 6679db2..fb29369 100644
--- a/tests/standalone_2/io/http_headers_content_length_test.dart
+++ b/tests/standalone_2/io/http_headers_content_length_test.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.9
 
+// See also http_headers_test.dart.
+
 import "dart:io";
 
 import "package:expect/expect.dart";
diff --git a/tools/VERSION b/tools/VERSION
index b2c2691..af12ecc 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 8
+PRERELEASE 9
 PRERELEASE_PATCH 0
\ No newline at end of file