Implement longest path to Object

Change-Id: Ibf882536dde5a218f5fda085359d419e3ee0d831
Reviewed-on: https://dart-review.googlesource.com/c/93410
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 89f7efa..a47bf6c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -430,13 +430,17 @@
 
     List<KernelTypeBuilder> interfaces;
 
+    int maxInheritancePath;
+
     if (supernode == null) {
       // This should be Object.
       classMembers = localMembers;
       classSetters = localSetters;
       superclasses = new List<KernelTypeBuilder>(0);
       interfaces = new List<KernelTypeBuilder>(0);
+      maxInheritancePath = 0;
     } else {
+      maxInheritancePath = supernode.maxInheritancePath + 1;
       superclasses =
           new List<KernelTypeBuilder>(supernode.superclasses.length + 1);
       superclasses.setRange(0, superclasses.length - 1,
@@ -479,19 +483,23 @@
           }
         }
         for (int i = 0; i < directInterfaces.length; i++) {
-          addInterface(interfaces, superclasses, directInterfaces[i]);
+          KernelTypeBuilder directInterface = directInterfaces[i];
+          addInterface(interfaces, superclasses, directInterface);
           ClassHierarchyNode interfaceNode =
-              hierarchy.getNodeFromType(directInterfaces[i]);
+              hierarchy.getNodeFromType(directInterface);
           if (interfaceNode != null) {
-            List<KernelTypeBuilder> types = substSupertypes(
-                directInterfaces[i], interfaceNode.superclasses);
+            if (maxInheritancePath < interfaceNode.maxInheritancePath + 1) {
+              maxInheritancePath = interfaceNode.maxInheritancePath + 1;
+            }
+            List<KernelTypeBuilder> types =
+                substSupertypes(directInterface, interfaceNode.superclasses);
             for (int i = 0; i < types.length; i++) {
               addInterface(interfaces, superclasses, types[i]);
             }
 
             if (interfaceNode.interfaces != null) {
-              List<KernelTypeBuilder> types = substSupertypes(
-                  directInterfaces[i], interfaceNode.interfaces);
+              List<KernelTypeBuilder> types =
+                  substSupertypes(directInterface, interfaceNode.interfaces);
               for (int i = 0; i < types.length; i++) {
                 addInterface(interfaces, superclasses, types[i]);
               }
@@ -535,6 +543,7 @@
       interfaceSetters,
       superclasses,
       interfaces,
+      maxInheritancePath,
     );
   }
 
@@ -843,6 +852,9 @@
   /// any classes from [superclasses].
   final List<KernelTypeBuilder> interfaces;
 
+  /// The longest inheritance path from [cls] to `Object`.
+  final int maxInheritancePath;
+
   int get depth => superclasses.length;
 
   ClassHierarchyNode(
@@ -852,14 +864,20 @@
       this.interfaceMembers,
       this.interfaceSetters,
       this.superclasses,
-      this.interfaces);
+      this.interfaces,
+      this.maxInheritancePath);
 
   String toString([StringBuffer sb]) {
     sb ??= new StringBuffer();
     sb
       ..write(cls.fullNameForErrors)
-      ..writeln(":")
-      ..writeln("  superclasses:");
+      ..writeln(":");
+    if (maxInheritancePath != this.depth) {
+      sb
+        ..write("  Longest path to Object: ")
+        ..writeln(maxInheritancePath);
+    }
+    sb..writeln("  superclasses:");
     int depth = 0;
     for (KernelTypeBuilder superclass in superclasses) {
       sb.write("  " * (depth + 2));
diff --git a/pkg/front_end/test/fasta/types/dill_hierachy_test.dart b/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
index da9048f..31304d3 100644
--- a/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
+++ b/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
@@ -46,6 +46,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -55,6 +56,7 @@
   interfaceSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -64,6 +66,7 @@
   interfaceSetters:
 
 D:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B<T>, A, C<U>
@@ -73,6 +76,7 @@
   interfaceSetters:
 
 E:
+  Longest path to Object: 4
   superclasses:
     Object
   interfaces: D<int, double>, B<int>, A, C<double>
@@ -82,6 +86,7 @@
   interfaceSetters:
 
 F:
+  Longest path to Object: 4
   superclasses:
     Object
   interfaces: D<int, bool>, B<int>, A, C<bool>
diff --git a/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect b/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
index dad4f9b..231e9e1 100644
--- a/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/abstract_members.dart.hierarchy.expect
@@ -75,6 +75,7 @@
   classSetters:
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Interface1, Interface2, Interface3
@@ -118,6 +119,7 @@
     A.property2
 
 B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> A
@@ -166,6 +168,7 @@
     A.property2
 
 MyClass:
+  Longest path to Object: 4
   superclasses:
     Object
       -> A
@@ -221,6 +224,7 @@
     MyClass.property2
 
 MyMock1:
+  Longest path to Object: 4
   superclasses:
     Object
       -> A
@@ -270,6 +274,7 @@
     A.property2
 
 MyMock2:
+  Longest path to Object: 5
   superclasses:
     Object
       -> A
@@ -320,6 +325,7 @@
     A.property2
 
 MyMock3:
+  Longest path to Object: 4
   superclasses:
     Object
       -> A
diff --git a/pkg/front_end/testcases/bug32426.dart.hierarchy.expect b/pkg/front_end/testcases/bug32426.dart.hierarchy.expect
index 9e96032..b816c89 100644
--- a/pkg/front_end/testcases/bug32426.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/bug32426.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I
diff --git a/pkg/front_end/testcases/bug32866.dart.hierarchy.expect b/pkg/front_end/testcases/bug32866.dart.hierarchy.expect
index 74b5528..ec9f23e 100644
--- a/pkg/front_end/testcases/bug32866.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/bug32866.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
diff --git a/pkg/front_end/testcases/bug33099.dart.hierarchy.expect b/pkg/front_end/testcases/bug33099.dart.hierarchy.expect
index 883d29c..443af04 100644
--- a/pkg/front_end/testcases/bug33099.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/bug33099.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 Object with MyTest:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: MyTest
@@ -85,6 +86,7 @@
   interfaceSetters:
 
 MyTest2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _MyTest2&Object&MyTest
diff --git a/pkg/front_end/testcases/bug34511.dart.hierarchy.expect b/pkg/front_end/testcases/bug34511.dart.hierarchy.expect
index 60cd20b..57d451c 100644
--- a/pkg/front_end/testcases/bug34511.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/bug34511.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 Object with A<() -> Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A<() -> Z>
@@ -65,6 +66,7 @@
   interfaceSetters:
 
 B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _B&Object&A<Z>
diff --git a/pkg/front_end/testcases/clone_function_type.dart.hierarchy.expect b/pkg/front_end/testcases/clone_function_type.dart.hierarchy.expect
index aa9301e..49f41ab 100644
--- a/pkg/front_end/testcases/clone_function_type.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/clone_function_type.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 Object with Am1<(null) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(null) -> null, Z>
@@ -65,6 +66,7 @@
   interfaceSetters:
 
 Bm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Bm1&Object&Am1<Z>
@@ -95,6 +97,7 @@
   interfaceSetters:
 
 Object with Am1<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -124,6 +127,7 @@
   interfaceSetters:
 
 Cm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Cm1&Object&Am1<Z>
@@ -154,6 +158,7 @@
   interfaceSetters:
 
 Object with Am1<() -> int, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> int, Z>
@@ -183,6 +188,7 @@
   interfaceSetters:
 
 Dm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Dm1&Object&Am1<Z>
@@ -213,6 +219,7 @@
   interfaceSetters:
 
 Object with Am1<() -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> null, Z>
@@ -242,6 +249,7 @@
   interfaceSetters:
 
 Em1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Em1&Object&Am1<Z>
@@ -272,6 +280,7 @@
   interfaceSetters:
 
 Object with Am1<() -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> null, Z>
@@ -301,6 +310,7 @@
   interfaceSetters:
 
 Fm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Fm1&Object&Am1<Z>
@@ -331,6 +341,7 @@
   interfaceSetters:
 
 Object with Am1<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -360,6 +371,7 @@
   interfaceSetters:
 
 Gm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Gm1&Object&Am1<Z>
@@ -390,6 +402,7 @@
   interfaceSetters:
 
 Object with Am1<(null) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(null) -> null, Z>
@@ -419,6 +432,7 @@
   interfaceSetters:
 
 Hm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Hm1&Object&Am1<Z>
@@ -449,6 +463,7 @@
   interfaceSetters:
 
 Object with Am1<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -478,6 +493,7 @@
   interfaceSetters:
 
 Im1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Im1&Object&Am1<Z>
@@ -508,6 +524,7 @@
   interfaceSetters:
 
 Object with Am1<Function, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<Function, Z>
@@ -537,6 +554,7 @@
   interfaceSetters:
 
 Jm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Jm1&Object&Am1<Z>
@@ -567,6 +585,7 @@
   interfaceSetters:
 
 Object with Am1<(Function) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(Function) -> null, Z>
@@ -596,6 +615,7 @@
   interfaceSetters:
 
 Km1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Km1&Object&Am1<Z>
@@ -626,6 +646,7 @@
   interfaceSetters:
 
 Object with Am1<() -> (Function) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> (Function) -> null, Z>
@@ -655,6 +676,7 @@
   interfaceSetters:
 
 Lm1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Lm1&Object&Am1<Z>
@@ -685,6 +707,7 @@
   interfaceSetters:
 
 Mm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(null) -> null, Z>
@@ -714,6 +737,7 @@
   interfaceSetters:
 
 Nm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -743,6 +767,7 @@
   interfaceSetters:
 
 Om1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> int, Z>
@@ -772,6 +797,7 @@
   interfaceSetters:
 
 Pm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> null, Z>
@@ -801,6 +827,7 @@
   interfaceSetters:
 
 Qm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> null, Z>
@@ -830,6 +857,7 @@
   interfaceSetters:
 
 Rm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -859,6 +887,7 @@
   interfaceSetters:
 
 Sm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(null) -> null, Z>
@@ -888,6 +917,7 @@
   interfaceSetters:
 
 Tm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(x) -> null, Z>
@@ -917,6 +947,7 @@
   interfaceSetters:
 
 Um1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<Function, Z>
@@ -946,6 +977,7 @@
   interfaceSetters:
 
 Vm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<(Function) -> null, Z>
@@ -975,6 +1007,7 @@
   interfaceSetters:
 
 Wm1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am1<() -> (Function) -> null, Z>
@@ -1021,6 +1054,7 @@
   classSetters:
 
 Object with Am2<(null) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(null) -> null, Z>
@@ -1050,6 +1084,7 @@
   interfaceSetters:
 
 Bm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Bm2&Object&Am2<Z>
@@ -1080,6 +1115,7 @@
   interfaceSetters:
 
 Object with Am2<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1109,6 +1145,7 @@
   interfaceSetters:
 
 Cm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Cm2&Object&Am2<Z>
@@ -1139,6 +1176,7 @@
   interfaceSetters:
 
 Object with Am2<() -> int, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> int, Z>
@@ -1168,6 +1206,7 @@
   interfaceSetters:
 
 Dm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Dm2&Object&Am2<Z>
@@ -1198,6 +1237,7 @@
   interfaceSetters:
 
 Object with Am2<() -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> null, Z>
@@ -1227,6 +1267,7 @@
   interfaceSetters:
 
 Em2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Em2&Object&Am2<Z>
@@ -1257,6 +1298,7 @@
   interfaceSetters:
 
 Object with Am2<() -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> null, Z>
@@ -1286,6 +1328,7 @@
   interfaceSetters:
 
 Fm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Fm2&Object&Am2<Z>
@@ -1316,6 +1359,7 @@
   interfaceSetters:
 
 Object with Am2<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1345,6 +1389,7 @@
   interfaceSetters:
 
 Gm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Gm2&Object&Am2<Z>
@@ -1375,6 +1420,7 @@
   interfaceSetters:
 
 Object with Am2<(null) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(null) -> null, Z>
@@ -1404,6 +1450,7 @@
   interfaceSetters:
 
 Hm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Hm2&Object&Am2<Z>
@@ -1434,6 +1481,7 @@
   interfaceSetters:
 
 Object with Am2<(x) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1463,6 +1511,7 @@
   interfaceSetters:
 
 Im2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Im2&Object&Am2<Z>
@@ -1493,6 +1542,7 @@
   interfaceSetters:
 
 Object with Am2<Function, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<Function, Z>
@@ -1522,6 +1572,7 @@
   interfaceSetters:
 
 Jm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Jm2&Object&Am2<Z>
@@ -1552,6 +1603,7 @@
   interfaceSetters:
 
 Object with Am2<(Function) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(Function) -> null, Z>
@@ -1581,6 +1633,7 @@
   interfaceSetters:
 
 Km2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Km2&Object&Am2<Z>
@@ -1611,6 +1664,7 @@
   interfaceSetters:
 
 Object with Am2<() -> (Function) -> null, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> (Function) -> null, Z>
@@ -1640,6 +1694,7 @@
   interfaceSetters:
 
 Lm2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Lm2&Object&Am2<Z>
@@ -1670,6 +1725,7 @@
   interfaceSetters:
 
 Mm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(null) -> null, Z>
@@ -1699,6 +1755,7 @@
   interfaceSetters:
 
 Nm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1728,6 +1785,7 @@
   interfaceSetters:
 
 Om2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> int, Z>
@@ -1757,6 +1815,7 @@
   interfaceSetters:
 
 Pm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> null, Z>
@@ -1786,6 +1845,7 @@
   interfaceSetters:
 
 Qm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> null, Z>
@@ -1815,6 +1875,7 @@
   interfaceSetters:
 
 Rm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1844,6 +1905,7 @@
   interfaceSetters:
 
 Sm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(null) -> null, Z>
@@ -1873,6 +1935,7 @@
   interfaceSetters:
 
 Tm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(x) -> null, Z>
@@ -1902,6 +1965,7 @@
   interfaceSetters:
 
 Um2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<Function, Z>
@@ -1931,6 +1995,7 @@
   interfaceSetters:
 
 Vm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<(Function) -> null, Z>
@@ -1960,6 +2025,7 @@
   interfaceSetters:
 
 Wm2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am2<() -> (Function) -> null, Z>
@@ -2006,6 +2072,7 @@
   classSetters:
 
 Object with Am3<TdB, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdB, Z>
@@ -2035,6 +2102,7 @@
   interfaceSetters:
 
 Bm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Bm3&Object&Am3<Z>
@@ -2065,6 +2133,7 @@
   interfaceSetters:
 
 Object with Am3<TdC, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdC, Z>
@@ -2094,6 +2163,7 @@
   interfaceSetters:
 
 Cm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Cm3&Object&Am3<Z>
@@ -2124,6 +2194,7 @@
   interfaceSetters:
 
 Object with Am3<TdD, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdD, Z>
@@ -2153,6 +2224,7 @@
   interfaceSetters:
 
 Dm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Dm3&Object&Am3<Z>
@@ -2183,6 +2255,7 @@
   interfaceSetters:
 
 Object with Am3<TdE, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdE, Z>
@@ -2212,6 +2285,7 @@
   interfaceSetters:
 
 Em3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Em3&Object&Am3<Z>
@@ -2242,6 +2316,7 @@
   interfaceSetters:
 
 Object with Am3<TdF, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdF, Z>
@@ -2271,6 +2346,7 @@
   interfaceSetters:
 
 Fm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Fm3&Object&Am3<Z>
@@ -2301,6 +2377,7 @@
   interfaceSetters:
 
 Object with Am3<TdG, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdG, Z>
@@ -2330,6 +2407,7 @@
   interfaceSetters:
 
 Gm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Gm3&Object&Am3<Z>
@@ -2360,6 +2438,7 @@
   interfaceSetters:
 
 Object with Am3<TdH, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdH, Z>
@@ -2389,6 +2468,7 @@
   interfaceSetters:
 
 Hm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Hm3&Object&Am3<Z>
@@ -2419,6 +2499,7 @@
   interfaceSetters:
 
 Object with Am3<TdI, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdI, Z>
@@ -2448,6 +2529,7 @@
   interfaceSetters:
 
 Im3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Im3&Object&Am3<Z>
@@ -2478,6 +2560,7 @@
   interfaceSetters:
 
 Object with Am3<TdJ, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdJ, Z>
@@ -2507,6 +2590,7 @@
   interfaceSetters:
 
 Jm3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Jm3&Object&Am3<Z>
@@ -2537,6 +2621,7 @@
   interfaceSetters:
 
 Object with Am3<TdK, Z>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Am3<TdK, Z>
@@ -2566,6 +2651,7 @@
   interfaceSetters:
 
 Km3:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Km3&Object&Am3<Z>
diff --git a/pkg/front_end/testcases/complex_class_hierarchy.dart.hierarchy.expect b/pkg/front_end/testcases/complex_class_hierarchy.dart.hierarchy.expect
index b3c7b13..954670d 100644
--- a/pkg/front_end/testcases/complex_class_hierarchy.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/complex_class_hierarchy.dart.hierarchy.expect
@@ -164,6 +164,7 @@
   classSetters:
 
 X:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -193,6 +194,7 @@
   interfaceSetters:
 
 Y:
+  Longest path to Object: 3
   superclasses:
     Object
       -> X
@@ -223,6 +225,7 @@
   interfaceSetters:
 
 Z:
+  Longest path to Object: 4
   superclasses:
     Object
   interfaces: Y, X, A
@@ -252,6 +255,7 @@
   interfaceSetters:
 
 W:
+  Longest path to Object: 5
   superclasses:
     Object
   interfaces: Z, Y, X, A
@@ -281,6 +285,7 @@
   interfaceSetters:
 
 GX:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: G<A>
@@ -310,6 +315,7 @@
   interfaceSetters:
 
 GY:
+  Longest path to Object: 3
   superclasses:
     Object
       -> X
@@ -340,6 +346,7 @@
   interfaceSetters:
 
 GZ:
+  Longest path to Object: 4
   superclasses:
     Object
   interfaces: Y, X, A, GC, G<C>
@@ -369,6 +376,7 @@
   interfaceSetters:
 
 GW:
+  Longest path to Object: 5
   superclasses:
     Object
   interfaces: Z, Y, X, A, GD, G<D>
@@ -398,6 +406,7 @@
   interfaceSetters:
 
 GU:
+  Longest path to Object: 6
   superclasses:
     Object
       -> GW
@@ -428,6 +437,7 @@
   interfaceSetters:
 
 GV:
+  Longest path to Object: 7
   superclasses:
     Object
       -> GW
diff --git a/pkg/front_end/testcases/escape.dart.hierarchy.expect b/pkg/front_end/testcases/escape.dart.hierarchy.expect
index 07af593..6fbadf9 100644
--- a/pkg/front_end/testcases/escape.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/escape.dart.hierarchy.expect
@@ -74,6 +74,7 @@
   classSetters:
 
 X:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A, B
diff --git a/pkg/front_end/testcases/function_type_is_check.dart.hierarchy.expect b/pkg/front_end/testcases/function_type_is_check.dart.hierarchy.expect
index 98d4425..ea0ab2f 100644
--- a/pkg/front_end/testcases/function_type_is_check.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/function_type_is_check.dart.hierarchy.expect
@@ -94,6 +94,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/implicit_scope_test.dart.hierarchy.expect b/pkg/front_end/testcases/implicit_scope_test.dart.hierarchy.expect
index 336c761..671b394 100644
--- a/pkg/front_end/testcases/implicit_scope_test.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/implicit_scope_test.dart.hierarchy.expect
@@ -113,6 +113,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/inference/async_await.dart.hierarchy.expect b/pkg/front_end/testcases/inference/async_await.dart.hierarchy.expect
index 494e3cb..8a18ee5 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<int>
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.hierarchy.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.hierarchy.expect
index 0590bd0..10cabb6 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.hierarchy.expect
@@ -40,6 +40,7 @@
     C._redirecting#
 
 CImpl:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C<T>
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.hierarchy.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.hierarchy.expect
index 824f22f..2549864 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.hierarchy.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.hierarchy.expect
index 00b2c95..dc148c5 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
diff --git a/pkg/front_end/testcases/inference/future_then.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_2.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_3.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_4.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_5.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_6.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.hierarchy.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.hierarchy.expect
index 06d97d1..89a66e0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.hierarchy.expect
@@ -48,6 +48,7 @@
   classSetters:
 
 MyFuture:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Future<T>
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.hierarchy.expect
index 0d0e29f..1e44eee 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     B.x
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.hierarchy.expect
index 0d0e29f..1e44eee 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     B.x
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.hierarchy.expect
index fab6c77..245115c 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -68,6 +69,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, C
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.hierarchy.expect
index 06440ff..167ba88 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.hierarchy.expect
@@ -37,6 +37,7 @@
     C.x
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -68,6 +69,7 @@
     B.x
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, C
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.hierarchy.expect
index d7a8370..26fee5a 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.hierarchy.expect
@@ -95,6 +95,7 @@
     D.x
 
 E:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -128,6 +129,7 @@
     E.x
 
 F:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
@@ -161,6 +163,7 @@
     F.x
 
 Object with B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
@@ -192,6 +195,7 @@
   interfaceSetters:
 
 G:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _G&Object&B
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.hierarchy.expect
index 20d7855..66315ee 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.hierarchy.expect
@@ -95,6 +95,7 @@
     D.x
 
 E:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -128,6 +129,7 @@
     E.x
 
 F:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
@@ -161,6 +163,7 @@
     F.x
 
 Object with B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
@@ -192,6 +195,7 @@
     B.x
 
 G:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _G&Object&B
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.hierarchy.expect
index 31b4162..559c5bd 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -68,6 +69,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, C
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.hierarchy.expect
index 69c8242..ecf08eb 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.hierarchy.expect
@@ -59,6 +59,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A, B
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.hierarchy.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.hierarchy.expect
index 368c13e..2543994 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.hierarchy.expect
@@ -37,6 +37,7 @@
     C.x
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -68,6 +69,7 @@
     B.x
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, C
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.hierarchy.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.hierarchy.expect
index f852cff..9ae2e27 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.hierarchy.expect
@@ -55,6 +55,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I1, I2
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.hierarchy.expect
index 06b9b49..b21414f 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<int>
@@ -83,6 +84,7 @@
   interfaceSetters:
 
 M1 with M0<int, String>:
+  Longest path to Object: 3
   superclasses:
     Object
       -> M1
@@ -113,6 +115,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 4
   superclasses:
     Object
       -> M1
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.hierarchy.expect
index 3f48b79..6d65499 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<int>
@@ -83,6 +84,7 @@
   interfaceSetters:
 
 M1 with M0<int, int>:
+  Longest path to Object: 3
   superclasses:
     Object
       -> M1
@@ -113,6 +115,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 4
   superclasses:
     Object
       -> M1
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.hierarchy.expect
index 7daaa837..88712a2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<int>
@@ -83,6 +84,7 @@
   interfaceSetters:
 
 M1 with M0<int, Comparable<dynamic>>:
+  Longest path to Object: 3
   superclasses:
     Object
       -> M1
@@ -113,6 +115,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 4
   superclasses:
     Object
       -> M1
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.hierarchy.expect
index eebc3a2..3e686b6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.hierarchy.expect
@@ -114,6 +114,7 @@
   interfaceSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<int>
@@ -143,6 +144,7 @@
   interfaceSetters:
 
 M2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> M1
@@ -173,6 +175,7 @@
   interfaceSetters:
 
 M2 with M0<int, double>:
+  Longest path to Object: 4
   superclasses:
     Object
       -> M1
@@ -204,6 +207,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 5
   superclasses:
     Object
       -> M1
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.hierarchy.expect
index 45aa225..74bb85d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 M0:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<T>
@@ -83,6 +84,7 @@
   classSetters:
 
 Object with M0<dynamic>:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M0<dynamic>, I<dynamic>
@@ -112,6 +114,7 @@
   interfaceSetters:
 
 _A&Object&M0 with M1<int>:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _A&Object&M0
@@ -142,6 +145,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 5
   superclasses:
     Object
       -> _A&Object&M0
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.hierarchy.expect
index 1d1e2f0..d2343d3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 M0:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<T>
@@ -83,6 +84,7 @@
   classSetters:
 
 Object with M0<dynamic>:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M0<dynamic>, I<dynamic>
@@ -112,6 +114,7 @@
   interfaceSetters:
 
 _A&Object&M0 with M1<dynamic>:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _A&Object&M0
@@ -142,6 +145,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 5
   superclasses:
     Object
       -> _A&Object&M0
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.hierarchy.expect
index 9e4e1b8..fb14a36 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 M0:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<T, int>
@@ -65,6 +66,7 @@
   interfaceSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<String, T>
@@ -94,6 +96,7 @@
   interfaceSetters:
 
 Object with M0<dynamic>:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M0<dynamic>, I<dynamic, int>
@@ -123,6 +126,7 @@
   interfaceSetters:
 
 _A&Object&M0 with M1<dynamic>:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _A&Object&M0
@@ -153,6 +157,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 5
   superclasses:
     Object
       -> _A&Object&M0
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.hierarchy.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.hierarchy.expect
index e8cc39f..f1f8e8d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 M0:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<T, List<T>>
@@ -65,6 +66,7 @@
   interfaceSetters:
 
 M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<List<T>, T>
@@ -94,6 +96,7 @@
   interfaceSetters:
 
 Object with M0<dynamic>:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M0<dynamic>, I<dynamic, List<dynamic>>
@@ -123,6 +126,7 @@
   interfaceSetters:
 
 _A&Object&M0 with M1<dynamic>:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _A&Object&M0
@@ -153,6 +157,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 5
   superclasses:
     Object
       -> _A&Object&M0
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
index 4e3fcb5..f92d773 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.hierarchy.expect
@@ -55,6 +55,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I1, I2
@@ -85,6 +86,7 @@
   interfaceSetters:
 
 D:
+  Longest path to Object: 3
   superclasses:
     Object
       -> C
@@ -117,6 +119,7 @@
   interfaceSetters:
 
 E:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I2, I1
@@ -147,6 +150,7 @@
   interfaceSetters:
 
 F:
+  Longest path to Object: 3
   superclasses:
     Object
       -> E
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
index a0eaeca..00d3da3 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.hierarchy.expect
@@ -127,6 +127,7 @@
   classSetters:
 
 G:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: D, E, F
@@ -157,6 +158,7 @@
   interfaceSetters:
 
 H:
+  Longest path to Object: 3
   superclasses:
     Object
       -> G
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.hierarchy.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.hierarchy.expect
index 1931b4d..d958962 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.hierarchy.expect
@@ -146,6 +146,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/mixin.dart.hierarchy.expect b/pkg/front_end/testcases/mixin.dart.hierarchy.expect
index a86326c..7b25a03 100644
--- a/pkg/front_end/testcases/mixin.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin.dart.hierarchy.expect
@@ -55,6 +55,7 @@
   classSetters:
 
 Object with M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M1
@@ -86,6 +87,7 @@
   interfaceSetters:
 
 _C&Object&M1 with M2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _C&Object&M1
@@ -118,6 +120,7 @@
   interfaceSetters:
 
 C:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _C&Object&M1
@@ -169,6 +172,7 @@
   classSetters:
 
 Object with G1<S>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: G1<S>
@@ -200,6 +204,7 @@
   interfaceSetters:
 
 D:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _D&Object&G1<S>
@@ -232,6 +237,7 @@
   interfaceSetters:
 
 Object with M1:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M1
@@ -263,6 +269,7 @@
   interfaceSetters:
 
 _B&Object&M1 with M2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _B&Object&M1
@@ -295,6 +302,7 @@
   interfaceSetters:
 
 B:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _B&Object&M1
diff --git a/pkg/front_end/testcases/mixin_conflicts.dart.hierarchy.expect b/pkg/front_end/testcases/mixin_conflicts.dart.hierarchy.expect
index d311de4..8999f35 100644
--- a/pkg/front_end/testcases/mixin_conflicts.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin_conflicts.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 N:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M
@@ -68,6 +69,7 @@
   interfaceSetters:
 
 Object with N:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: N, M
@@ -99,6 +101,7 @@
   interfaceSetters:
 
 C:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _C&Object&N
@@ -131,6 +134,7 @@
   interfaceSetters:
 
 M2:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M
@@ -163,6 +167,7 @@
   interfaceSetters:
 
 N2:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M2, M
@@ -195,6 +200,7 @@
   interfaceSetters:
 
 N3:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M2, M
@@ -227,6 +233,7 @@
   interfaceSetters:
 
 Object with M2:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M2, M
@@ -259,6 +266,7 @@
   interfaceSetters:
 
 C2:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _C2&Object&M2
@@ -292,6 +300,7 @@
   interfaceSetters:
 
 Object with M2:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: M2, M
@@ -324,6 +333,7 @@
   interfaceSetters:
 
 C3:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _C3&Object&M2
diff --git a/pkg/front_end/testcases/mixin_constructors_with_default_values.dart.hierarchy.expect b/pkg/front_end/testcases/mixin_constructors_with_default_values.dart.hierarchy.expect
index 78bd7cb..d5c1ed0 100644
--- a/pkg/front_end/testcases/mixin_constructors_with_default_values.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin_constructors_with_default_values.dart.hierarchy.expect
@@ -268,6 +268,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.hierarchy.expect b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.hierarchy.expect
index 56969f8..85f7304 100644
--- a/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin_inherited_setter_for_mixed_in_field.dart.hierarchy.expect
@@ -77,6 +77,7 @@
     C._field
 
 Object with C<B>:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C<B>
@@ -112,6 +113,7 @@
     C._field
 
 Foo:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Foo&Object&C
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.hierarchy.expect
index 0482f3b..7f7d266 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     I.foo
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I
@@ -69,6 +70,7 @@
     I.foo
 
 B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> A
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.hierarchy.expect
index 785f78b..018c929 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     A.foo
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -69,6 +70,7 @@
     A.foo
 
 Object with B:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, A
@@ -100,6 +102,7 @@
     A.foo
 
 C:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _C&Object&B
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.hierarchy.expect
index 20bc332..f9e9b82 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     A.foo
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -70,6 +71,7 @@
     A.foo
 
 C:
+  Longest path to Object: 3
   superclasses:
     Object
       -> B
@@ -103,6 +105,7 @@
     A.foo
 
 D:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -135,6 +138,7 @@
     D.foo
 
 E:
+  Longest path to Object: 3
   superclasses:
     Object
       -> D
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.hierarchy.expect
index 71bf144..22986a4 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     A.foo
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A<int>
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.hierarchy.expect
index 5b5669e..a38db13 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.hierarchy.expect
@@ -55,6 +55,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I
@@ -85,6 +86,7 @@
   interfaceSetters:
 
 A with B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> A
@@ -117,6 +119,7 @@
   interfaceSetters:
 
 C:
+  Longest path to Object: 4
   superclasses:
     Object
       -> A
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.hierarchy.expect
index c3d12b3..6f90578 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.hierarchy.expect
@@ -55,6 +55,7 @@
   classSetters:
 
 M:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I1, I2
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.hierarchy.expect
index 2cea300..38e9a5f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I
@@ -67,6 +68,7 @@
   interfaceSetters:
 
 Object with A:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: A, I
@@ -97,6 +99,7 @@
   interfaceSetters:
 
 B:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _B&Object&A
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.hierarchy.expect
index 8b453b8..84d907a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 Object with M:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M
@@ -83,6 +84,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _A&Object&M
@@ -114,6 +116,7 @@
   interfaceSetters:
 
 Object with M:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M
@@ -143,6 +146,7 @@
   interfaceSetters:
 
 B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _B&Object&M
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.hierarchy.expect
index 254f85b..e270c79 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.hierarchy.expect
@@ -36,6 +36,7 @@
   classSetters:
 
 Object with A:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -65,6 +66,7 @@
   interfaceSetters:
 
 B:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _B&Object&A
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.hierarchy.expect
index 3227a6f..29f5d07 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 Object with M:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: M
@@ -83,6 +84,7 @@
   interfaceSetters:
 
 A:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _A&Object&M
diff --git a/pkg/front_end/testcases/no_such_method_private_setter.dart.hierarchy.expect b/pkg/front_end/testcases/no_such_method_private_setter.dart.hierarchy.expect
index dba9cc0..95cc6fb 100644
--- a/pkg/front_end/testcases/no_such_method_private_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/no_such_method_private_setter.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     Bar._x
 
 Foo:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Bar
diff --git a/pkg/front_end/testcases/override_check_generic_method_f_bounded.dart.hierarchy.expect b/pkg/front_end/testcases/override_check_generic_method_f_bounded.dart.hierarchy.expect
index 98db882..d53d249 100644
--- a/pkg/front_end/testcases/override_check_generic_method_f_bounded.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/override_check_generic_method_f_bounded.dart.hierarchy.expect
@@ -54,6 +54,7 @@
   classSetters:
 
 Hest:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Bar
diff --git a/pkg/front_end/testcases/private_method_tearoff.dart.hierarchy.expect b/pkg/front_end/testcases/private_method_tearoff.dart.hierarchy.expect
index 6906912..c696ebc 100644
--- a/pkg/front_end/testcases/private_method_tearoff.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/private_method_tearoff.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 Foo:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Bar
@@ -67,6 +68,7 @@
   interfaceSetters:
 
 Baz:
+  Longest path to Object: 3
   superclasses:
     Object
       -> Foo
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.hierarchy.expect
index ee525c0..8d71816 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     Mixin.field
 
 Object with Mixin:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Mixin
@@ -71,6 +72,7 @@
     Mixin.field
 
 _A&Object&Mixin with Mixin:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _A&Object&Mixin
@@ -105,6 +107,7 @@
     Mixin.field
 
 A:
+  Longest path to Object: 4
   superclasses:
     Object
       -> _A&Object&Mixin
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.hierarchy.expect
index 87c1e96..742f0d8 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.hierarchy.expect
@@ -112,6 +112,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.hierarchy.expect
index 98d4425..ea0ab2f 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.hierarchy.expect
@@ -94,6 +94,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.hierarchy.expect
index 705a7e3..d02f304 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.hierarchy.expect
@@ -155,6 +155,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.hierarchy.expect
index 9a18fb1..f0084c7 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.hierarchy.expect
@@ -165,6 +165,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.hierarchy.expect
index c2b7ee7..2b503d4 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.hierarchy.expect
@@ -149,6 +149,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.hierarchy.expect
index 76d68ab..2d401aa0a 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.hierarchy.expect
@@ -39,6 +39,7 @@
     Mixin.field
 
 Object with Mixin:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Mixin
@@ -74,6 +75,7 @@
     Mixin.field
 
 Foo:
+  Longest path to Object: 3
   superclasses:
     Object
       -> _Foo&Object&Mixin
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/parser_error.dart.hierarchy.expect
index 98d4425..ea0ab2f 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.hierarchy.expect
@@ -94,6 +94,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/redirecting_factory.dart.hierarchy.expect b/pkg/front_end/testcases/redirecting_factory.dart.hierarchy.expect
index a3bb376..e601475 100644
--- a/pkg/front_end/testcases/redirecting_factory.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/redirecting_factory.dart.hierarchy.expect
@@ -39,6 +39,7 @@
     FooBase._redirecting#
 
 Foo:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: FooBase
@@ -73,6 +74,7 @@
     Foo._redirecting#
 
 Bar:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: Foo<Tb>, FooBase
@@ -143,6 +145,7 @@
     SimpleCase._redirecting#
 
 SimpleCaseImpl:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: SimpleCase<Ai, Bi>
@@ -176,6 +179,7 @@
     SimpleCaseImpl._redirecting#
 
 SimpleCaseImpl2:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: SimpleCaseImpl<Ai2, Bi2>, SimpleCase<Ai2, Bi2>
diff --git a/pkg/front_end/testcases/redirecting_factory_const_inference.dart.hierarchy.expect b/pkg/front_end/testcases/redirecting_factory_const_inference.dart.hierarchy.expect
index 8645346..4985228 100644
--- a/pkg/front_end/testcases/redirecting_factory_const_inference.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/redirecting_factory_const_inference.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     _X._redirecting#
 
 _Y:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: _X<T>
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.hierarchy.expect b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.hierarchy.expect
index 6e0f389..139b76a 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments.dart.hierarchy.expect
@@ -152,6 +152,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.hierarchy.expect b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.hierarchy.expect
index 6e0f389..139b76a 100644
--- a/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/redirection_chain_type_arguments_subst.dart.hierarchy.expect
@@ -152,6 +152,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/redirection_type_arguments.dart.hierarchy.expect b/pkg/front_end/testcases/redirection_type_arguments.dart.hierarchy.expect
index 80cea1b..c399d4d 100644
--- a/pkg/front_end/testcases/redirection_type_arguments.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/redirection_type_arguments.dart.hierarchy.expect
@@ -131,6 +131,7 @@
   classSetters:
 
 ExpectException:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Exception
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.hierarchy.expect b/pkg/front_end/testcases/regress/issue_31996.dart.hierarchy.expect
index 8e9e795..627064d 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.hierarchy.expect
@@ -53,6 +53,7 @@
   classSetters:
 
 Base:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B
@@ -82,6 +83,7 @@
   interfaceSetters:
 
 Child1:
+  Longest path to Object: 3
   superclasses:
     Object
       -> Base
@@ -112,6 +114,7 @@
   interfaceSetters:
 
 Child2:
+  Longest path to Object: 3
   superclasses:
     Object
       -> Base
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.hierarchy.expect b/pkg/front_end/testcases/regress/issue_35260.dart.hierarchy.expect
index 4158779..2c646a0 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     Supertype._redirecting#
 
 X:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: Supertype
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.hierarchy.expect
index 570f5d0..5eaaea6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.hierarchy.expect
@@ -38,6 +38,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I<int>
@@ -71,6 +72,7 @@
   interfaceSetters:
 
 D:
+  Longest path to Object: 3
   superclasses:
     Object
       -> C<U>
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.hierarchy.expect
index a0755f9..3142f9e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     C.x
 
 D:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -71,6 +72,7 @@
     D.x
 
 E:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: D, C
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.hierarchy.expect
index a0755f9..3142f9e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.hierarchy.expect
@@ -38,6 +38,7 @@
     C.x
 
 D:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C
@@ -71,6 +72,7 @@
     D.x
 
 E:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: D, C
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.hierarchy.expect
index 7a4dfeb..7242fb4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.hierarchy.expect
@@ -56,6 +56,7 @@
     D.x
 
 E:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: D, C
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.hierarchy.expect
index be3c79b..c37a550 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.hierarchy.expect
@@ -39,6 +39,7 @@
     C.x
 
 D:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C<num>
@@ -76,6 +77,7 @@
     D.x
 
 E:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: C<num>
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.hierarchy.expect
index 11d6411..7c05629 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.hierarchy.expect
@@ -37,6 +37,7 @@
     A.x
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A
@@ -72,6 +73,7 @@
     B.x
 
 C:
+  Longest path to Object: 3
   superclasses:
     Object
   interfaces: B, A
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.hierarchy.expect
index 7b54720..eb5ae02 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.hierarchy.expect
@@ -40,6 +40,7 @@
     B.x
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B<num>
@@ -77,6 +78,7 @@
     C.x
 
 D:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: B<T>
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.hierarchy.expect
index 86cc21b..dfb9fc6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 B:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A<F<T>>
@@ -68,6 +69,7 @@
   interfaceSetters:
 
 I:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: A<F<T>>
@@ -99,6 +101,7 @@
   interfaceSetters:
 
 C:
+  Longest path to Object: 3
   superclasses:
     Object
       -> B<F<T>>
diff --git a/pkg/front_end/testcases/super_nsm.dart.hierarchy.expect b/pkg/front_end/testcases/super_nsm.dart.hierarchy.expect
index bfe9aef..368b420 100644
--- a/pkg/front_end/testcases/super_nsm.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/super_nsm.dart.hierarchy.expect
@@ -37,6 +37,7 @@
   classSetters:
 
 C:
+  Longest path to Object: 2
   superclasses:
     Object
   interfaces: I
@@ -67,6 +68,7 @@
   interfaceSetters:
 
 D:
+  Longest path to Object: 3
   superclasses:
     Object
       -> C