diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index fc66822..9bae526 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -312,6 +312,9 @@
   DemoteViaExplicitWrite(this.variable, this.writeExpression);
 
   @override
+  String get documentationLink => 'http://dart.dev/go/non-promo-write';
+
+  @override
   String get shortName => 'explicitWrite';
 
   @override
@@ -340,6 +343,9 @@
   DemoteViaForEachVariableWrite(this.variable, this.node);
 
   @override
+  String get documentationLink => 'http://dart.dev/go/non-promo-write';
+
+  @override
   String get shortName => 'explicitWrite';
 
   @override
@@ -2332,6 +2338,11 @@
 
 /// Abstract class representing a reason why something was not promoted.
 abstract class NonPromotionReason {
+  /// Link to documentation describing this non-promotion reason; this should be
+  /// presented to the user as a source of additional information about the
+  /// error.
+  String get documentationLink;
+
   /// Short text description of this non-promotion reason; intended for ID
   /// testing.
   String get shortName;
@@ -2372,6 +2383,9 @@
   PropertyNotPromoted(this.propertyName, this.staticType);
 
   @override
+  String get documentationLink => 'http://dart.dev/go/non-promo-property';
+
+  @override
   String get shortName => 'propertyNotPromoted';
 
   @override
@@ -2607,6 +2621,9 @@
 /// promoted due to the fact that it's a reference to `this`.
 class ThisNotPromoted extends NonPromotionReason {
   @override
+  String get documentationLink => 'http://dart.dev/go/non-promo-this';
+
+  @override
   String get shortName => 'thisNotPromoted';
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 96608e0..32b1b05 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -4110,25 +4110,29 @@
     tip: r"""Try removing 'this.'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateFieldNotPromoted =
-    const Template<Message Function(String name)>(
+const Template<Message Function(String name, String string)>
+    templateFieldNotPromoted =
+    const Template<Message Function(String name, String string)>(
         messageTemplate:
             r"""'#name' refers to a property so it couldn't be promoted.""",
+        tipTemplate: r"""See #string""",
         withArguments: _withArgumentsFieldNotPromoted);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeFieldNotPromoted =
-    const Code<Message Function(String name)>(
+const Code<Message Function(String name, String string)> codeFieldNotPromoted =
+    const Code<Message Function(String name, String string)>(
   "FieldNotPromoted",
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsFieldNotPromoted(String name) {
+Message _withArgumentsFieldNotPromoted(String name, String string) {
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
+  if (string.isEmpty) throw 'No string provided';
   return new Message(codeFieldNotPromoted,
       message: """'${name}' refers to a property so it couldn't be promoted.""",
-      arguments: {'name': name});
+      tip: """See ${string}""",
+      arguments: {'name': name, 'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9073,11 +9077,26 @@
     tip: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeThisNotPromoted = messageThisNotPromoted;
+const Template<Message Function(String string)> templateThisNotPromoted =
+    const Template<Message Function(String string)>(
+        messageTemplate: r"""'this' can't be promoted.""",
+        tipTemplate: r"""See #string""",
+        withArguments: _withArgumentsThisNotPromoted);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageThisNotPromoted = const MessageCode("ThisNotPromoted",
-    message: r"""'this' can't be promoted.""");
+const Code<Message Function(String string)> codeThisNotPromoted =
+    const Code<Message Function(String string)>(
+  "ThisNotPromoted",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsThisNotPromoted(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeThisNotPromoted,
+      message: """'this' can't be promoted.""",
+      tip: """See ${string}""",
+      arguments: {'string': string});
+}
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)>
@@ -9688,29 +9707,33 @@
         r"""Try removing the keyword 'var', or replacing it with the name of the return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
+const Template<Message Function(String name, String string)>
     templateVariableCouldBeNullDueToWrite =
-    const Template<Message Function(String name)>(
+    const Template<Message Function(String name, String string)>(
         messageTemplate:
             r"""Variable '#name' could be null due to an intervening write.""",
-        tipTemplate: r"""Try null checking the variable after the write.""",
+        tipTemplate:
+            r"""Try null checking the variable after the write.  See #string""",
         withArguments: _withArgumentsVariableCouldBeNullDueToWrite);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeVariableCouldBeNullDueToWrite =
-    const Code<Message Function(String name)>(
+const Code<Message Function(String name, String string)>
+    codeVariableCouldBeNullDueToWrite =
+    const Code<Message Function(String name, String string)>(
   "VariableCouldBeNullDueToWrite",
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsVariableCouldBeNullDueToWrite(String name) {
+Message _withArgumentsVariableCouldBeNullDueToWrite(
+    String name, String string) {
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
+  if (string.isEmpty) throw 'No string provided';
   return new Message(codeVariableCouldBeNullDueToWrite,
       message:
           """Variable '${name}' could be null due to an intervening write.""",
-      tip: """Try null checking the variable after the write.""",
-      arguments: {'name': name});
+      tip: """Try null checking the variable after the write.  See ${string}""",
+      arguments: {'name': name, 'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
index 31da867..69a138e 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
@@ -5754,6 +5754,9 @@
 }
 
 class _MockNonPromotionReason extends NonPromotionReason {
+  @override
+  String get documentationLink => fail('Unexpected call to documentationLink');
+
   String get shortName => fail('Unexpected call to shortName');
 
   R accept<R, Node extends Object, Expression extends Object,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 997af2c..47f6905 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3472,7 +3472,7 @@
     }
     var variableName = reason.variable.name;
     if (variableName == null) return null;
-    return _contextMessageForWrite(variableName, writeExpression);
+    return _contextMessageForWrite(variableName, writeExpression, reason);
   }
 
   @override
@@ -3496,7 +3496,7 @@
         _dataForTesting!.nonPromotionReasonTargets[identifier] =
             reason.shortName;
       }
-      return _contextMessageForWrite(variableName, identifier);
+      return _contextMessageForWrite(variableName, identifier, reason);
     } else {
       assert(false, 'Unexpected parts type');
       return null;
@@ -3521,7 +3521,8 @@
     if (receiverElement is PropertyAccessorElement) {
       propertyReference = receiverElement;
       propertyType = reason.staticType;
-      return _contextMessageForProperty(receiverElement, reason.propertyName);
+      return _contextMessageForProperty(
+          receiverElement, reason.propertyName, reason);
     } else {
       assert(receiverElement == null,
           'Unrecognized property element: ${receiverElement.runtimeType}');
@@ -3533,27 +3534,29 @@
   DiagnosticMessage? visitThisNotPromoted(ThisNotPromoted reason) {
     return DiagnosticMessageImpl(
         filePath: source.fullName,
-        message: "'this' can't be promoted.",
+        message: "'this' can't be promoted.  See ${reason.documentationLink}",
         offset: _errorEntity.offset,
         length: _errorEntity.length);
   }
 
   DiagnosticMessageImpl _contextMessageForProperty(
-      PropertyAccessorElement property, String propertyName) {
+      PropertyAccessorElement property,
+      String propertyName,
+      NonPromotionReason reason) {
     return DiagnosticMessageImpl(
         filePath: property.source.fullName,
-        message:
-            "'$propertyName' refers to a property so it couldn't be promoted.",
+        message: "'$propertyName' refers to a property so it couldn't be "
+            "promoted.  See ${reason.documentationLink}",
         offset: property.nameOffset,
         length: property.nameLength);
   }
 
-  DiagnosticMessageImpl _contextMessageForWrite(
-      String variableName, Expression writeExpression) {
+  DiagnosticMessageImpl _contextMessageForWrite(String variableName,
+      Expression writeExpression, NonPromotionReason reason) {
     return DiagnosticMessageImpl(
         filePath: source.fullName,
         message: "Variable '$variableName' could be null due to an intervening "
-            "write.",
+            "write.  See ${reason.documentationLink}",
         offset: writeExpression.offset,
         length: writeExpression.length);
   }
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index 0f826c1..1073c93 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -31,6 +31,7 @@
 dev_dependencies:
   # Published packages - repo version ensured via dependency_overrides
   args: any
+  dart_style: any
   http: any
   js:
     path: ../js
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
index 91a0c15..5f3aa4b 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_100_0.dart' deferred as b1;
 
 entryLib1() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
index 37a0a7c..20313e2 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_010_0.dart' deferred as b2;
 
 entryLib2() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
index 597682a..feeeeff 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_001_0.dart' deferred as b3;
 
 entryLib3() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
index 41a32f6..fbbe564 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_000_1.dart' deferred as b4;
 
 entryLib4() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
index 5731c13..4a2d52a 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 void v(Set<String> u, String name, int bit) {
@@ -11,6 +10,854 @@
   Expect.equals(name[bit], '1');
 }
 
+class C_100_0 {
+  const C_100_0();
+}
+
+class M_100_0 {}
+
+class T_100_0 {}
+
+const C_100_0 iC_100_0 = const C_100_0();
+closureC_100_0(foo) =>
+    (C_100_0 unused) => iC_100_0.toString() == foo.toString();
+
+class C_110_0 {
+  const C_110_0();
+}
+
+class M_110_0 {}
+
+class T_110_0 {}
+
+const C_110_0 iC_110_0 = const C_110_0();
+closureC_110_0(foo) =>
+    (C_110_0 unused) => iC_110_0.toString() == foo.toString();
+
+class C_101_1 {
+  const C_101_1();
+}
+
+class M_101_1 {}
+
+class T_101_1 {}
+
+const C_101_1 iC_101_1 = const C_101_1();
+closureC_101_1(foo) =>
+    (C_101_1 unused) => iC_101_1.toString() == foo.toString();
+
+class C_111_1 {
+  const C_111_1();
+}
+
+class M_111_1 {}
+
+class T_111_1 {}
+
+const C_111_1 iC_111_1 = const C_111_1();
+closureC_111_1(foo) =>
+    (C_111_1 unused) => iC_111_1.toString() == foo.toString();
+
+class C_010_0 {
+  const C_010_0();
+}
+
+class M_010_0 {}
+
+class T_010_0 {}
+
+const C_010_0 iC_010_0 = const C_010_0();
+closureC_010_0(foo) =>
+    (C_010_0 unused) => iC_010_0.toString() == foo.toString();
+
+class C_010_1 {
+  const C_010_1();
+}
+
+class M_010_1 {}
+
+class T_010_1 {}
+
+const C_010_1 iC_010_1 = const C_010_1();
+closureC_010_1(foo) =>
+    (C_010_1 unused) => iC_010_1.toString() == foo.toString();
+
+class C_011_1 {
+  const C_011_1();
+}
+
+class M_011_1 {}
+
+class T_011_1 {}
+
+const C_011_1 iC_011_1 = const C_011_1();
+closureC_011_1(foo) =>
+    (C_011_1 unused) => iC_011_1.toString() == foo.toString();
+
+class C_001_0 {
+  const C_001_0();
+}
+
+class M_001_0 {}
+
+class T_001_0 {}
+
+const C_001_0 iC_001_0 = const C_001_0();
+closureC_001_0(foo) =>
+    (C_001_0 unused) => iC_001_0.toString() == foo.toString();
+
+class C_000_1 {
+  const C_000_1();
+}
+
+class M_000_1 {}
+
+class T_000_1 {}
+
+const C_000_1 iC_000_1 = const C_000_1();
+closureC_000_1(foo) =>
+    (C_000_1 unused) => iC_000_1.toString() == foo.toString();
+
+class C_110_0_class_1 extends C_100_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_110_0, C_101_1, C_111_1, C_010_0, C_010_1, C_011_1 {
+  const C_110_0_class_1();
+}
+
+const C_110_0_class_1 iC_110_0_class_1 = const C_110_0_class_1();
+closureC_110_0_class_1(foo) =>
+    (C_110_0_class_1 unused) => iC_110_0_class_1.toString() == foo.toString();
+
+class T_110_0_type__1 extends T_100_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_110_0, T_101_1, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_2 extends C_110_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_101_1, C_111_1, C_010_0, C_010_1, C_011_1 {
+  const C_110_0_class_2();
+}
+
+const C_110_0_class_2 iC_110_0_class_2 = const C_110_0_class_2();
+closureC_110_0_class_2(foo) =>
+    (C_110_0_class_2 unused) => iC_110_0_class_2.toString() == foo.toString();
+
+class T_110_0_type__2 extends T_110_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_101_1, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_3 extends C_101_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_110_0, C_111_1, C_010_0, C_010_1, C_011_1 {
+  const C_110_0_class_3();
+}
+
+const C_110_0_class_3 iC_110_0_class_3 = const C_110_0_class_3();
+closureC_110_0_class_3(foo) =>
+    (C_110_0_class_3 unused) => iC_110_0_class_3.toString() == foo.toString();
+
+class T_110_0_type__3 extends T_101_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_110_0, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_4 extends C_111_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_110_0, C_101_1, C_010_0, C_010_1, C_011_1 {
+  const C_110_0_class_4();
+}
+
+const C_110_0_class_4 iC_110_0_class_4 = const C_110_0_class_4();
+closureC_110_0_class_4(foo) =>
+    (C_110_0_class_4 unused) => iC_110_0_class_4.toString() == foo.toString();
+
+class T_110_0_type__4 extends T_111_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_110_0, T_101_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_5 extends C_010_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_1, C_011_1 {
+  const C_110_0_class_5();
+}
+
+const C_110_0_class_5 iC_110_0_class_5 = const C_110_0_class_5();
+closureC_110_0_class_5(foo) =>
+    (C_110_0_class_5 unused) => iC_110_0_class_5.toString() == foo.toString();
+
+class T_110_0_type__5 extends T_010_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_1, T_011_1 {}
+
+class C_110_0_class_6 extends C_010_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_0, C_011_1 {
+  const C_110_0_class_6();
+}
+
+const C_110_0_class_6 iC_110_0_class_6 = const C_110_0_class_6();
+closureC_110_0_class_6(foo) =>
+    (C_110_0_class_6 unused) => iC_110_0_class_6.toString() == foo.toString();
+
+class T_110_0_type__6 extends T_010_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_0, T_011_1 {}
+
+class C_110_0_class_7 extends C_011_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_0, C_010_1 {
+  const C_110_0_class_7();
+}
+
+const C_110_0_class_7 iC_110_0_class_7 = const C_110_0_class_7();
+closureC_110_0_class_7(foo) =>
+    (C_110_0_class_7 unused) => iC_110_0_class_7.toString() == foo.toString();
+
+class T_110_0_type__7 extends T_011_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+    implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_0, T_010_1 {}
+
+class C_101_1_class_1 extends C_100_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_110_0, C_101_1, C_111_1, C_001_0, C_000_1 {
+  const C_101_1_class_1();
+}
+
+const C_101_1_class_1 iC_101_1_class_1 = const C_101_1_class_1();
+closureC_101_1_class_1(foo) =>
+    (C_101_1_class_1 unused) => iC_101_1_class_1.toString() == foo.toString();
+
+class T_101_1_type__1 extends T_100_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_110_0, T_101_1, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_2 extends C_110_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_100_0, C_101_1, C_111_1, C_001_0, C_000_1 {
+  const C_101_1_class_2();
+}
+
+const C_101_1_class_2 iC_101_1_class_2 = const C_101_1_class_2();
+closureC_101_1_class_2(foo) =>
+    (C_101_1_class_2 unused) => iC_101_1_class_2.toString() == foo.toString();
+
+class T_101_1_type__2 extends T_110_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_100_0, T_101_1, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_3 extends C_101_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_100_0, C_110_0, C_111_1, C_001_0, C_000_1 {
+  const C_101_1_class_3();
+}
+
+const C_101_1_class_3 iC_101_1_class_3 = const C_101_1_class_3();
+closureC_101_1_class_3(foo) =>
+    (C_101_1_class_3 unused) => iC_101_1_class_3.toString() == foo.toString();
+
+class T_101_1_type__3 extends T_101_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_100_0, T_110_0, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_4 extends C_111_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_100_0, C_110_0, C_101_1, C_001_0, C_000_1 {
+  const C_101_1_class_4();
+}
+
+const C_101_1_class_4 iC_101_1_class_4 = const C_101_1_class_4();
+closureC_101_1_class_4(foo) =>
+    (C_101_1_class_4 unused) => iC_101_1_class_4.toString() == foo.toString();
+
+class T_101_1_type__4 extends T_111_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_100_0, T_110_0, T_101_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_5 extends C_001_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_100_0, C_110_0, C_101_1, C_111_1, C_000_1 {
+  const C_101_1_class_5();
+}
+
+const C_101_1_class_5 iC_101_1_class_5 = const C_101_1_class_5();
+closureC_101_1_class_5(foo) =>
+    (C_101_1_class_5 unused) => iC_101_1_class_5.toString() == foo.toString();
+
+class T_101_1_type__5 extends T_001_0
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_100_0, T_110_0, T_101_1, T_111_1, T_000_1 {}
+
+class C_101_1_class_6 extends C_000_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements C_100_0, C_110_0, C_101_1, C_111_1, C_001_0 {
+  const C_101_1_class_6();
+}
+
+const C_101_1_class_6 iC_101_1_class_6 = const C_101_1_class_6();
+closureC_101_1_class_6(foo) =>
+    (C_101_1_class_6 unused) => iC_101_1_class_6.toString() == foo.toString();
+
+class T_101_1_type__6 extends T_000_1
+    with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+    implements T_100_0, T_110_0, T_101_1, T_111_1, T_001_0 {}
+
+class C_111_1_class_1 extends C_100_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_1();
+}
+
+const C_111_1_class_1 iC_111_1_class_1 = const C_111_1_class_1();
+closureC_111_1_class_1(foo) =>
+    (C_111_1_class_1 unused) => iC_111_1_class_1.toString() == foo.toString();
+
+class T_111_1_type__1 extends T_100_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_2 extends C_110_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_2();
+}
+
+const C_111_1_class_2 iC_111_1_class_2 = const C_111_1_class_2();
+closureC_111_1_class_2(foo) =>
+    (C_111_1_class_2 unused) => iC_111_1_class_2.toString() == foo.toString();
+
+class T_111_1_type__2 extends T_110_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_3 extends C_101_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_3();
+}
+
+const C_111_1_class_3 iC_111_1_class_3 = const C_111_1_class_3();
+closureC_111_1_class_3(foo) =>
+    (C_111_1_class_3 unused) => iC_111_1_class_3.toString() == foo.toString();
+
+class T_111_1_type__3 extends T_101_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_4 extends C_111_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_4();
+}
+
+const C_111_1_class_4 iC_111_1_class_4 = const C_111_1_class_4();
+closureC_111_1_class_4(foo) =>
+    (C_111_1_class_4 unused) => iC_111_1_class_4.toString() == foo.toString();
+
+class T_111_1_type__4 extends T_111_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_5 extends C_010_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_1,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_5();
+}
+
+const C_111_1_class_5 iC_111_1_class_5 = const C_111_1_class_5();
+closureC_111_1_class_5(foo) =>
+    (C_111_1_class_5 unused) => iC_111_1_class_5.toString() == foo.toString();
+
+class T_111_1_type__5 extends T_010_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_1,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_6 extends C_010_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_011_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_6();
+}
+
+const C_111_1_class_6 iC_111_1_class_6 = const C_111_1_class_6();
+closureC_111_1_class_6(foo) =>
+    (C_111_1_class_6 unused) => iC_111_1_class_6.toString() == foo.toString();
+
+class T_111_1_type__6 extends T_010_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_011_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_7 extends C_011_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_001_0,
+        C_000_1 {
+  const C_111_1_class_7();
+}
+
+const C_111_1_class_7 iC_111_1_class_7 = const C_111_1_class_7();
+closureC_111_1_class_7(foo) =>
+    (C_111_1_class_7 unused) => iC_111_1_class_7.toString() == foo.toString();
+
+class T_111_1_type__7 extends T_011_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_001_0,
+        T_000_1 {}
+
+class C_111_1_class_8 extends C_001_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_000_1 {
+  const C_111_1_class_8();
+}
+
+const C_111_1_class_8 iC_111_1_class_8 = const C_111_1_class_8();
+closureC_111_1_class_8(foo) =>
+    (C_111_1_class_8 unused) => iC_111_1_class_8.toString() == foo.toString();
+
+class T_111_1_type__8 extends T_001_0
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_000_1 {}
+
+class C_111_1_class_9 extends C_000_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        C_100_0,
+        C_110_0,
+        C_101_1,
+        C_111_1,
+        C_010_0,
+        C_010_1,
+        C_011_1,
+        C_001_0 {
+  const C_111_1_class_9();
+}
+
+const C_111_1_class_9 iC_111_1_class_9 = const C_111_1_class_9();
+closureC_111_1_class_9(foo) =>
+    (C_111_1_class_9 unused) => iC_111_1_class_9.toString() == foo.toString();
+
+class T_111_1_type__9 extends T_000_1
+    with
+        M_100_0,
+        M_110_0,
+        M_101_1,
+        M_111_1,
+        M_010_0,
+        M_010_1,
+        M_011_1,
+        M_001_0,
+        M_000_1
+    implements
+        T_100_0,
+        T_110_0,
+        T_101_1,
+        T_111_1,
+        T_010_0,
+        T_010_1,
+        T_011_1,
+        T_001_0 {}
+
+class C_010_1_class_1 extends C_010_0
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements C_010_1, C_011_1, C_000_1 {
+  const C_010_1_class_1();
+}
+
+const C_010_1_class_1 iC_010_1_class_1 = const C_010_1_class_1();
+closureC_010_1_class_1(foo) =>
+    (C_010_1_class_1 unused) => iC_010_1_class_1.toString() == foo.toString();
+
+class T_010_1_type__1 extends T_010_0
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements T_010_1, T_011_1, T_000_1 {}
+
+class C_010_1_class_2 extends C_010_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements C_010_0, C_011_1, C_000_1 {
+  const C_010_1_class_2();
+}
+
+const C_010_1_class_2 iC_010_1_class_2 = const C_010_1_class_2();
+closureC_010_1_class_2(foo) =>
+    (C_010_1_class_2 unused) => iC_010_1_class_2.toString() == foo.toString();
+
+class T_010_1_type__2 extends T_010_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements T_010_0, T_011_1, T_000_1 {}
+
+class C_010_1_class_3 extends C_011_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements C_010_0, C_010_1, C_000_1 {
+  const C_010_1_class_3();
+}
+
+const C_010_1_class_3 iC_010_1_class_3 = const C_010_1_class_3();
+closureC_010_1_class_3(foo) =>
+    (C_010_1_class_3 unused) => iC_010_1_class_3.toString() == foo.toString();
+
+class T_010_1_type__3 extends T_011_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements T_010_0, T_010_1, T_000_1 {}
+
+class C_010_1_class_4 extends C_000_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements C_010_0, C_010_1, C_011_1 {
+  const C_010_1_class_4();
+}
+
+const C_010_1_class_4 iC_010_1_class_4 = const C_010_1_class_4();
+closureC_010_1_class_4(foo) =>
+    (C_010_1_class_4 unused) => iC_010_1_class_4.toString() == foo.toString();
+
+class T_010_1_type__4 extends T_000_1
+    with M_010_0, M_010_1, M_011_1, M_000_1
+    implements T_010_0, T_010_1, T_011_1 {}
+
+class C_011_1_class_1 extends C_010_0
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements C_010_1, C_011_1, C_001_0, C_000_1 {
+  const C_011_1_class_1();
+}
+
+const C_011_1_class_1 iC_011_1_class_1 = const C_011_1_class_1();
+closureC_011_1_class_1(foo) =>
+    (C_011_1_class_1 unused) => iC_011_1_class_1.toString() == foo.toString();
+
+class T_011_1_type__1 extends T_010_0
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements T_010_1, T_011_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_2 extends C_010_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements C_010_0, C_011_1, C_001_0, C_000_1 {
+  const C_011_1_class_2();
+}
+
+const C_011_1_class_2 iC_011_1_class_2 = const C_011_1_class_2();
+closureC_011_1_class_2(foo) =>
+    (C_011_1_class_2 unused) => iC_011_1_class_2.toString() == foo.toString();
+
+class T_011_1_type__2 extends T_010_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements T_010_0, T_011_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_3 extends C_011_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements C_010_0, C_010_1, C_001_0, C_000_1 {
+  const C_011_1_class_3();
+}
+
+const C_011_1_class_3 iC_011_1_class_3 = const C_011_1_class_3();
+closureC_011_1_class_3(foo) =>
+    (C_011_1_class_3 unused) => iC_011_1_class_3.toString() == foo.toString();
+
+class T_011_1_type__3 extends T_011_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements T_010_0, T_010_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_4 extends C_001_0
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements C_010_0, C_010_1, C_011_1, C_000_1 {
+  const C_011_1_class_4();
+}
+
+const C_011_1_class_4 iC_011_1_class_4 = const C_011_1_class_4();
+closureC_011_1_class_4(foo) =>
+    (C_011_1_class_4 unused) => iC_011_1_class_4.toString() == foo.toString();
+
+class T_011_1_type__4 extends T_001_0
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements T_010_0, T_010_1, T_011_1, T_000_1 {}
+
+class C_011_1_class_5 extends C_000_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements C_010_0, C_010_1, C_011_1, C_001_0 {
+  const C_011_1_class_5();
+}
+
+const C_011_1_class_5 iC_011_1_class_5 = const C_011_1_class_5();
+closureC_011_1_class_5(foo) =>
+    (C_011_1_class_5 unused) => iC_011_1_class_5.toString() == foo.toString();
+
+class T_011_1_type__5 extends T_000_1
+    with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+    implements T_010_0, T_010_1, T_011_1, T_001_0 {}
+
 @pragma('dart2js:noInline')
 f_100_0(Set<String> u, int b) => v(u, '1000', b);
 @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
index 37a1c2e..c67496e 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
@@ -3,13 +3,220 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_000_1) {
+    return true;
+  }
+  if (t is T_101_1_type__1) {
+    return true;
+  }
+  if (t is T_101_1_type__2) {
+    return true;
+  }
+  if (t is T_101_1_type__3) {
+    return true;
+  }
+  if (t is T_101_1_type__4) {
+    return true;
+  }
+  if (t is T_101_1_type__5) {
+    return true;
+  }
+  if (t is T_101_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__1) {
+    return true;
+  }
+  if (t is T_111_1_type__2) {
+    return true;
+  }
+  if (t is T_111_1_type__3) {
+    return true;
+  }
+  if (t is T_111_1_type__4) {
+    return true;
+  }
+  if (t is T_111_1_type__5) {
+    return true;
+  }
+  if (t is T_111_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__7) {
+    return true;
+  }
+  if (t is T_111_1_type__8) {
+    return true;
+  }
+  if (t is T_111_1_type__9) {
+    return true;
+  }
+  if (t is T_010_1_type__1) {
+    return true;
+  }
+  if (t is T_010_1_type__2) {
+    return true;
+  }
+  if (t is T_010_1_type__3) {
+    return true;
+  }
+  if (t is T_010_1_type__4) {
+    return true;
+  }
+  if (t is T_011_1_type__1) {
+    return true;
+  }
+  if (t is T_011_1_type__2) {
+    return true;
+  }
+  if (t is T_011_1_type__3) {
+    return true;
+  }
+  if (t is T_011_1_type__4) {
+    return true;
+  }
+  if (t is T_011_1_type__5) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_000_1() {
+  // C_***_1;
+  Expect.isFalse(typeTest(C_000_1()));
+  Expect.isFalse(typeTest(C_101_1_class_1()));
+  Expect.isFalse(typeTest(C_101_1_class_2()));
+  Expect.isFalse(typeTest(C_101_1_class_3()));
+  Expect.isFalse(typeTest(C_101_1_class_4()));
+  Expect.isFalse(typeTest(C_101_1_class_5()));
+  Expect.isFalse(typeTest(C_101_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_1()));
+  Expect.isFalse(typeTest(C_111_1_class_2()));
+  Expect.isFalse(typeTest(C_111_1_class_3()));
+  Expect.isFalse(typeTest(C_111_1_class_4()));
+  Expect.isFalse(typeTest(C_111_1_class_5()));
+  Expect.isFalse(typeTest(C_111_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_7()));
+  Expect.isFalse(typeTest(C_111_1_class_8()));
+  Expect.isFalse(typeTest(C_111_1_class_9()));
+  Expect.isFalse(typeTest(C_010_1_class_1()));
+  Expect.isFalse(typeTest(C_010_1_class_2()));
+  Expect.isFalse(typeTest(C_010_1_class_3()));
+  Expect.isFalse(typeTest(C_010_1_class_4()));
+  Expect.isFalse(typeTest(C_011_1_class_1()));
+  Expect.isFalse(typeTest(C_011_1_class_2()));
+  Expect.isFalse(typeTest(C_011_1_class_3()));
+  Expect.isFalse(typeTest(C_011_1_class_4()));
+  Expect.isFalse(typeTest(C_011_1_class_5()));
+
+  Expect.isTrue(closureC_000_1(C_000_1())(C_000_1()));
+  Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+  Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+  Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+  Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+  Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+  Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+  Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+  Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+  Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+  Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+  Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+  Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+  Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+  Expect.isTrue(closureC_010_1_class_1(C_010_1_class_1())(C_010_1_class_1()));
+  Expect.isTrue(closureC_010_1_class_2(C_010_1_class_2())(C_010_1_class_2()));
+  Expect.isTrue(closureC_010_1_class_3(C_010_1_class_3())(C_010_1_class_3()));
+  Expect.isTrue(closureC_010_1_class_4(C_010_1_class_4())(C_010_1_class_4()));
+  Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+  Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+  Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+  Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+  Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+  Expect.equals(
+      closureC_000_1(C_000_1()).runtimeType.toString(), '(C_000_1) => bool');
+  Expect.equals(
+      closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+      '(C_101_1_class_1) => bool');
+  Expect.equals(
+      closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+      '(C_101_1_class_2) => bool');
+  Expect.equals(
+      closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+      '(C_101_1_class_3) => bool');
+  Expect.equals(
+      closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+      '(C_101_1_class_4) => bool');
+  Expect.equals(
+      closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+      '(C_101_1_class_5) => bool');
+  Expect.equals(
+      closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+      '(C_101_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+      '(C_111_1_class_1) => bool');
+  Expect.equals(
+      closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+      '(C_111_1_class_2) => bool');
+  Expect.equals(
+      closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+      '(C_111_1_class_3) => bool');
+  Expect.equals(
+      closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+      '(C_111_1_class_4) => bool');
+  Expect.equals(
+      closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+      '(C_111_1_class_5) => bool');
+  Expect.equals(
+      closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+      '(C_111_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+      '(C_111_1_class_7) => bool');
+  Expect.equals(
+      closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+      '(C_111_1_class_8) => bool');
+  Expect.equals(
+      closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+      '(C_111_1_class_9) => bool');
+  Expect.equals(
+      closureC_010_1_class_1(C_010_1_class_1()).runtimeType.toString(),
+      '(C_010_1_class_1) => bool');
+  Expect.equals(
+      closureC_010_1_class_2(C_010_1_class_2()).runtimeType.toString(),
+      '(C_010_1_class_2) => bool');
+  Expect.equals(
+      closureC_010_1_class_3(C_010_1_class_3()).runtimeType.toString(),
+      '(C_010_1_class_3) => bool');
+  Expect.equals(
+      closureC_010_1_class_4(C_010_1_class_4()).runtimeType.toString(),
+      '(C_010_1_class_4) => bool');
+  Expect.equals(
+      closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+      '(C_011_1_class_1) => bool');
+  Expect.equals(
+      closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+      '(C_011_1_class_2) => bool');
+  Expect.equals(
+      closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+      '(C_011_1_class_3) => bool');
+  Expect.equals(
+      closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+      '(C_011_1_class_4) => bool');
+  Expect.equals(
+      closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+      '(C_011_1_class_5) => bool');
+
   Set<String> uniques = {};
 
   // f_***_1;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
index 3534e43..93b13b2 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
@@ -3,13 +3,188 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_001_0) {
+    return true;
+  }
+  if (t is T_101_1_type__1) {
+    return true;
+  }
+  if (t is T_101_1_type__2) {
+    return true;
+  }
+  if (t is T_101_1_type__3) {
+    return true;
+  }
+  if (t is T_101_1_type__4) {
+    return true;
+  }
+  if (t is T_101_1_type__5) {
+    return true;
+  }
+  if (t is T_101_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__1) {
+    return true;
+  }
+  if (t is T_111_1_type__2) {
+    return true;
+  }
+  if (t is T_111_1_type__3) {
+    return true;
+  }
+  if (t is T_111_1_type__4) {
+    return true;
+  }
+  if (t is T_111_1_type__5) {
+    return true;
+  }
+  if (t is T_111_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__7) {
+    return true;
+  }
+  if (t is T_111_1_type__8) {
+    return true;
+  }
+  if (t is T_111_1_type__9) {
+    return true;
+  }
+  if (t is T_011_1_type__1) {
+    return true;
+  }
+  if (t is T_011_1_type__2) {
+    return true;
+  }
+  if (t is T_011_1_type__3) {
+    return true;
+  }
+  if (t is T_011_1_type__4) {
+    return true;
+  }
+  if (t is T_011_1_type__5) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_001_0() {
+  // C_**1_*;
+  Expect.isFalse(typeTest(C_001_0()));
+  Expect.isFalse(typeTest(C_101_1_class_1()));
+  Expect.isFalse(typeTest(C_101_1_class_2()));
+  Expect.isFalse(typeTest(C_101_1_class_3()));
+  Expect.isFalse(typeTest(C_101_1_class_4()));
+  Expect.isFalse(typeTest(C_101_1_class_5()));
+  Expect.isFalse(typeTest(C_101_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_1()));
+  Expect.isFalse(typeTest(C_111_1_class_2()));
+  Expect.isFalse(typeTest(C_111_1_class_3()));
+  Expect.isFalse(typeTest(C_111_1_class_4()));
+  Expect.isFalse(typeTest(C_111_1_class_5()));
+  Expect.isFalse(typeTest(C_111_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_7()));
+  Expect.isFalse(typeTest(C_111_1_class_8()));
+  Expect.isFalse(typeTest(C_111_1_class_9()));
+  Expect.isFalse(typeTest(C_011_1_class_1()));
+  Expect.isFalse(typeTest(C_011_1_class_2()));
+  Expect.isFalse(typeTest(C_011_1_class_3()));
+  Expect.isFalse(typeTest(C_011_1_class_4()));
+  Expect.isFalse(typeTest(C_011_1_class_5()));
+
+  Expect.isTrue(closureC_001_0(C_001_0())(C_001_0()));
+  Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+  Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+  Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+  Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+  Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+  Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+  Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+  Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+  Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+  Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+  Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+  Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+  Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+  Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+  Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+  Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+  Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+  Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+  Expect.equals(
+      closureC_001_0(C_001_0()).runtimeType.toString(), '(C_001_0) => bool');
+  Expect.equals(
+      closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+      '(C_101_1_class_1) => bool');
+  Expect.equals(
+      closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+      '(C_101_1_class_2) => bool');
+  Expect.equals(
+      closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+      '(C_101_1_class_3) => bool');
+  Expect.equals(
+      closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+      '(C_101_1_class_4) => bool');
+  Expect.equals(
+      closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+      '(C_101_1_class_5) => bool');
+  Expect.equals(
+      closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+      '(C_101_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+      '(C_111_1_class_1) => bool');
+  Expect.equals(
+      closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+      '(C_111_1_class_2) => bool');
+  Expect.equals(
+      closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+      '(C_111_1_class_3) => bool');
+  Expect.equals(
+      closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+      '(C_111_1_class_4) => bool');
+  Expect.equals(
+      closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+      '(C_111_1_class_5) => bool');
+  Expect.equals(
+      closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+      '(C_111_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+      '(C_111_1_class_7) => bool');
+  Expect.equals(
+      closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+      '(C_111_1_class_8) => bool');
+  Expect.equals(
+      closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+      '(C_111_1_class_9) => bool');
+  Expect.equals(
+      closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+      '(C_011_1_class_1) => bool');
+  Expect.equals(
+      closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+      '(C_011_1_class_2) => bool');
+  Expect.equals(
+      closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+      '(C_011_1_class_3) => bool');
+  Expect.equals(
+      closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+      '(C_011_1_class_4) => bool');
+  Expect.equals(
+      closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+      '(C_011_1_class_5) => bool');
+
   Set<String> uniques = {};
 
   // f_**1_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
index d9ef060..600809f 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
@@ -3,13 +3,242 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_010_0) {
+    return true;
+  }
+  if (t is T_010_1) {
+    return true;
+  }
+  if (t is T_011_1) {
+    return true;
+  }
+  if (t is T_110_0_type__1) {
+    return true;
+  }
+  if (t is T_110_0_type__2) {
+    return true;
+  }
+  if (t is T_110_0_type__3) {
+    return true;
+  }
+  if (t is T_110_0_type__4) {
+    return true;
+  }
+  if (t is T_110_0_type__5) {
+    return true;
+  }
+  if (t is T_110_0_type__6) {
+    return true;
+  }
+  if (t is T_110_0_type__7) {
+    return true;
+  }
+  if (t is T_111_1_type__1) {
+    return true;
+  }
+  if (t is T_111_1_type__2) {
+    return true;
+  }
+  if (t is T_111_1_type__3) {
+    return true;
+  }
+  if (t is T_111_1_type__4) {
+    return true;
+  }
+  if (t is T_111_1_type__5) {
+    return true;
+  }
+  if (t is T_111_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__7) {
+    return true;
+  }
+  if (t is T_111_1_type__8) {
+    return true;
+  }
+  if (t is T_111_1_type__9) {
+    return true;
+  }
+  if (t is T_010_1_type__1) {
+    return true;
+  }
+  if (t is T_010_1_type__2) {
+    return true;
+  }
+  if (t is T_010_1_type__3) {
+    return true;
+  }
+  if (t is T_010_1_type__4) {
+    return true;
+  }
+  if (t is T_011_1_type__1) {
+    return true;
+  }
+  if (t is T_011_1_type__2) {
+    return true;
+  }
+  if (t is T_011_1_type__3) {
+    return true;
+  }
+  if (t is T_011_1_type__4) {
+    return true;
+  }
+  if (t is T_011_1_type__5) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_010_0() {
+  // C_*1*_*;
+  Expect.isFalse(typeTest(C_010_0()));
+  Expect.isFalse(typeTest(C_010_1()));
+  Expect.isFalse(typeTest(C_011_1()));
+  Expect.isFalse(typeTest(C_110_0_class_1()));
+  Expect.isFalse(typeTest(C_110_0_class_2()));
+  Expect.isFalse(typeTest(C_110_0_class_3()));
+  Expect.isFalse(typeTest(C_110_0_class_4()));
+  Expect.isFalse(typeTest(C_110_0_class_5()));
+  Expect.isFalse(typeTest(C_110_0_class_6()));
+  Expect.isFalse(typeTest(C_110_0_class_7()));
+  Expect.isFalse(typeTest(C_111_1_class_1()));
+  Expect.isFalse(typeTest(C_111_1_class_2()));
+  Expect.isFalse(typeTest(C_111_1_class_3()));
+  Expect.isFalse(typeTest(C_111_1_class_4()));
+  Expect.isFalse(typeTest(C_111_1_class_5()));
+  Expect.isFalse(typeTest(C_111_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_7()));
+  Expect.isFalse(typeTest(C_111_1_class_8()));
+  Expect.isFalse(typeTest(C_111_1_class_9()));
+  Expect.isFalse(typeTest(C_010_1_class_1()));
+  Expect.isFalse(typeTest(C_010_1_class_2()));
+  Expect.isFalse(typeTest(C_010_1_class_3()));
+  Expect.isFalse(typeTest(C_010_1_class_4()));
+  Expect.isFalse(typeTest(C_011_1_class_1()));
+  Expect.isFalse(typeTest(C_011_1_class_2()));
+  Expect.isFalse(typeTest(C_011_1_class_3()));
+  Expect.isFalse(typeTest(C_011_1_class_4()));
+  Expect.isFalse(typeTest(C_011_1_class_5()));
+
+  Expect.isTrue(closureC_010_0(C_010_0())(C_010_0()));
+  Expect.isTrue(closureC_010_1(C_010_1())(C_010_1()));
+  Expect.isTrue(closureC_011_1(C_011_1())(C_011_1()));
+  Expect.isTrue(closureC_110_0_class_1(C_110_0_class_1())(C_110_0_class_1()));
+  Expect.isTrue(closureC_110_0_class_2(C_110_0_class_2())(C_110_0_class_2()));
+  Expect.isTrue(closureC_110_0_class_3(C_110_0_class_3())(C_110_0_class_3()));
+  Expect.isTrue(closureC_110_0_class_4(C_110_0_class_4())(C_110_0_class_4()));
+  Expect.isTrue(closureC_110_0_class_5(C_110_0_class_5())(C_110_0_class_5()));
+  Expect.isTrue(closureC_110_0_class_6(C_110_0_class_6())(C_110_0_class_6()));
+  Expect.isTrue(closureC_110_0_class_7(C_110_0_class_7())(C_110_0_class_7()));
+  Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+  Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+  Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+  Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+  Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+  Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+  Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+  Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+  Expect.isTrue(closureC_010_1_class_1(C_010_1_class_1())(C_010_1_class_1()));
+  Expect.isTrue(closureC_010_1_class_2(C_010_1_class_2())(C_010_1_class_2()));
+  Expect.isTrue(closureC_010_1_class_3(C_010_1_class_3())(C_010_1_class_3()));
+  Expect.isTrue(closureC_010_1_class_4(C_010_1_class_4())(C_010_1_class_4()));
+  Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+  Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+  Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+  Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+  Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+  Expect.equals(
+      closureC_010_0(C_010_0()).runtimeType.toString(), '(C_010_0) => bool');
+  Expect.equals(
+      closureC_010_1(C_010_1()).runtimeType.toString(), '(C_010_1) => bool');
+  Expect.equals(
+      closureC_011_1(C_011_1()).runtimeType.toString(), '(C_011_1) => bool');
+  Expect.equals(
+      closureC_110_0_class_1(C_110_0_class_1()).runtimeType.toString(),
+      '(C_110_0_class_1) => bool');
+  Expect.equals(
+      closureC_110_0_class_2(C_110_0_class_2()).runtimeType.toString(),
+      '(C_110_0_class_2) => bool');
+  Expect.equals(
+      closureC_110_0_class_3(C_110_0_class_3()).runtimeType.toString(),
+      '(C_110_0_class_3) => bool');
+  Expect.equals(
+      closureC_110_0_class_4(C_110_0_class_4()).runtimeType.toString(),
+      '(C_110_0_class_4) => bool');
+  Expect.equals(
+      closureC_110_0_class_5(C_110_0_class_5()).runtimeType.toString(),
+      '(C_110_0_class_5) => bool');
+  Expect.equals(
+      closureC_110_0_class_6(C_110_0_class_6()).runtimeType.toString(),
+      '(C_110_0_class_6) => bool');
+  Expect.equals(
+      closureC_110_0_class_7(C_110_0_class_7()).runtimeType.toString(),
+      '(C_110_0_class_7) => bool');
+  Expect.equals(
+      closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+      '(C_111_1_class_1) => bool');
+  Expect.equals(
+      closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+      '(C_111_1_class_2) => bool');
+  Expect.equals(
+      closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+      '(C_111_1_class_3) => bool');
+  Expect.equals(
+      closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+      '(C_111_1_class_4) => bool');
+  Expect.equals(
+      closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+      '(C_111_1_class_5) => bool');
+  Expect.equals(
+      closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+      '(C_111_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+      '(C_111_1_class_7) => bool');
+  Expect.equals(
+      closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+      '(C_111_1_class_8) => bool');
+  Expect.equals(
+      closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+      '(C_111_1_class_9) => bool');
+  Expect.equals(
+      closureC_010_1_class_1(C_010_1_class_1()).runtimeType.toString(),
+      '(C_010_1_class_1) => bool');
+  Expect.equals(
+      closureC_010_1_class_2(C_010_1_class_2()).runtimeType.toString(),
+      '(C_010_1_class_2) => bool');
+  Expect.equals(
+      closureC_010_1_class_3(C_010_1_class_3()).runtimeType.toString(),
+      '(C_010_1_class_3) => bool');
+  Expect.equals(
+      closureC_010_1_class_4(C_010_1_class_4()).runtimeType.toString(),
+      '(C_010_1_class_4) => bool');
+  Expect.equals(
+      closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+      '(C_011_1_class_1) => bool');
+  Expect.equals(
+      closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+      '(C_011_1_class_2) => bool');
+  Expect.equals(
+      closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+      '(C_011_1_class_3) => bool');
+  Expect.equals(
+      closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+      '(C_011_1_class_4) => bool');
+  Expect.equals(
+      closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+      '(C_011_1_class_5) => bool');
+
   Set<String> uniques = {};
 
   // f_*1*_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
index 6d2c07f..bbf23b8 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
@@ -3,13 +3,225 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_100_0) {
+    return true;
+  }
+  if (t is T_110_0) {
+    return true;
+  }
+  if (t is T_101_1) {
+    return true;
+  }
+  if (t is T_111_1) {
+    return true;
+  }
+  if (t is T_110_0_type__1) {
+    return true;
+  }
+  if (t is T_110_0_type__2) {
+    return true;
+  }
+  if (t is T_110_0_type__3) {
+    return true;
+  }
+  if (t is T_110_0_type__4) {
+    return true;
+  }
+  if (t is T_110_0_type__5) {
+    return true;
+  }
+  if (t is T_110_0_type__6) {
+    return true;
+  }
+  if (t is T_110_0_type__7) {
+    return true;
+  }
+  if (t is T_101_1_type__1) {
+    return true;
+  }
+  if (t is T_101_1_type__2) {
+    return true;
+  }
+  if (t is T_101_1_type__3) {
+    return true;
+  }
+  if (t is T_101_1_type__4) {
+    return true;
+  }
+  if (t is T_101_1_type__5) {
+    return true;
+  }
+  if (t is T_101_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__1) {
+    return true;
+  }
+  if (t is T_111_1_type__2) {
+    return true;
+  }
+  if (t is T_111_1_type__3) {
+    return true;
+  }
+  if (t is T_111_1_type__4) {
+    return true;
+  }
+  if (t is T_111_1_type__5) {
+    return true;
+  }
+  if (t is T_111_1_type__6) {
+    return true;
+  }
+  if (t is T_111_1_type__7) {
+    return true;
+  }
+  if (t is T_111_1_type__8) {
+    return true;
+  }
+  if (t is T_111_1_type__9) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_100_0() {
+  // C_1**_*;
+  Expect.isFalse(typeTest(C_100_0()));
+  Expect.isFalse(typeTest(C_110_0()));
+  Expect.isFalse(typeTest(C_101_1()));
+  Expect.isFalse(typeTest(C_111_1()));
+  Expect.isFalse(typeTest(C_110_0_class_1()));
+  Expect.isFalse(typeTest(C_110_0_class_2()));
+  Expect.isFalse(typeTest(C_110_0_class_3()));
+  Expect.isFalse(typeTest(C_110_0_class_4()));
+  Expect.isFalse(typeTest(C_110_0_class_5()));
+  Expect.isFalse(typeTest(C_110_0_class_6()));
+  Expect.isFalse(typeTest(C_110_0_class_7()));
+  Expect.isFalse(typeTest(C_101_1_class_1()));
+  Expect.isFalse(typeTest(C_101_1_class_2()));
+  Expect.isFalse(typeTest(C_101_1_class_3()));
+  Expect.isFalse(typeTest(C_101_1_class_4()));
+  Expect.isFalse(typeTest(C_101_1_class_5()));
+  Expect.isFalse(typeTest(C_101_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_1()));
+  Expect.isFalse(typeTest(C_111_1_class_2()));
+  Expect.isFalse(typeTest(C_111_1_class_3()));
+  Expect.isFalse(typeTest(C_111_1_class_4()));
+  Expect.isFalse(typeTest(C_111_1_class_5()));
+  Expect.isFalse(typeTest(C_111_1_class_6()));
+  Expect.isFalse(typeTest(C_111_1_class_7()));
+  Expect.isFalse(typeTest(C_111_1_class_8()));
+  Expect.isFalse(typeTest(C_111_1_class_9()));
+
+  Expect.isTrue(closureC_100_0(C_100_0())(C_100_0()));
+  Expect.isTrue(closureC_110_0(C_110_0())(C_110_0()));
+  Expect.isTrue(closureC_101_1(C_101_1())(C_101_1()));
+  Expect.isTrue(closureC_111_1(C_111_1())(C_111_1()));
+  Expect.isTrue(closureC_110_0_class_1(C_110_0_class_1())(C_110_0_class_1()));
+  Expect.isTrue(closureC_110_0_class_2(C_110_0_class_2())(C_110_0_class_2()));
+  Expect.isTrue(closureC_110_0_class_3(C_110_0_class_3())(C_110_0_class_3()));
+  Expect.isTrue(closureC_110_0_class_4(C_110_0_class_4())(C_110_0_class_4()));
+  Expect.isTrue(closureC_110_0_class_5(C_110_0_class_5())(C_110_0_class_5()));
+  Expect.isTrue(closureC_110_0_class_6(C_110_0_class_6())(C_110_0_class_6()));
+  Expect.isTrue(closureC_110_0_class_7(C_110_0_class_7())(C_110_0_class_7()));
+  Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+  Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+  Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+  Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+  Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+  Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+  Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+  Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+  Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+  Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+  Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+  Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+  Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+  Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+
+  Expect.equals(
+      closureC_100_0(C_100_0()).runtimeType.toString(), '(C_100_0) => bool');
+  Expect.equals(
+      closureC_110_0(C_110_0()).runtimeType.toString(), '(C_110_0) => bool');
+  Expect.equals(
+      closureC_101_1(C_101_1()).runtimeType.toString(), '(C_101_1) => bool');
+  Expect.equals(
+      closureC_111_1(C_111_1()).runtimeType.toString(), '(C_111_1) => bool');
+  Expect.equals(
+      closureC_110_0_class_1(C_110_0_class_1()).runtimeType.toString(),
+      '(C_110_0_class_1) => bool');
+  Expect.equals(
+      closureC_110_0_class_2(C_110_0_class_2()).runtimeType.toString(),
+      '(C_110_0_class_2) => bool');
+  Expect.equals(
+      closureC_110_0_class_3(C_110_0_class_3()).runtimeType.toString(),
+      '(C_110_0_class_3) => bool');
+  Expect.equals(
+      closureC_110_0_class_4(C_110_0_class_4()).runtimeType.toString(),
+      '(C_110_0_class_4) => bool');
+  Expect.equals(
+      closureC_110_0_class_5(C_110_0_class_5()).runtimeType.toString(),
+      '(C_110_0_class_5) => bool');
+  Expect.equals(
+      closureC_110_0_class_6(C_110_0_class_6()).runtimeType.toString(),
+      '(C_110_0_class_6) => bool');
+  Expect.equals(
+      closureC_110_0_class_7(C_110_0_class_7()).runtimeType.toString(),
+      '(C_110_0_class_7) => bool');
+  Expect.equals(
+      closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+      '(C_101_1_class_1) => bool');
+  Expect.equals(
+      closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+      '(C_101_1_class_2) => bool');
+  Expect.equals(
+      closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+      '(C_101_1_class_3) => bool');
+  Expect.equals(
+      closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+      '(C_101_1_class_4) => bool');
+  Expect.equals(
+      closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+      '(C_101_1_class_5) => bool');
+  Expect.equals(
+      closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+      '(C_101_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+      '(C_111_1_class_1) => bool');
+  Expect.equals(
+      closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+      '(C_111_1_class_2) => bool');
+  Expect.equals(
+      closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+      '(C_111_1_class_3) => bool');
+  Expect.equals(
+      closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+      '(C_111_1_class_4) => bool');
+  Expect.equals(
+      closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+      '(C_111_1_class_5) => bool');
+  Expect.equals(
+      closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+      '(C_111_1_class_6) => bool');
+  Expect.equals(
+      closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+      '(C_111_1_class_7) => bool');
+  Expect.equals(
+      closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+      '(C_111_1_class_8) => bool');
+  Expect.equals(
+      closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+      '(C_111_1_class_9) => bool');
+
   Set<String> uniques = {};
 
   // f_1**_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
index fb21cef..5f1c08c 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib1.dart';
 import 'lib2.dart';
 import 'lib3.dart';
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
index c664b0c..d91a48b 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_100.dart' deferred as b1;
 
 entryLib1() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
index 6741292..7960202 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_010.dart' deferred as b2;
 
 entryLib2() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
index 2133ef7..e62cd54 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib_001.dart' deferred as b3;
 
 entryLib3() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
index 8d1058b..27f453d 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 void v(Set<String> u, String name, int bit) {
@@ -11,6 +10,254 @@
   Expect.equals(name[bit], '1');
 }
 
+class C_100 {
+  const C_100();
+}
+
+class M_100 {}
+
+class T_100 {}
+
+const C_100 iC_100 = const C_100();
+closureC_100(foo) => (C_100 unused) => iC_100.toString() == foo.toString();
+
+class C_101 {
+  const C_101();
+}
+
+class M_101 {}
+
+class T_101 {}
+
+const C_101 iC_101 = const C_101();
+closureC_101(foo) => (C_101 unused) => iC_101.toString() == foo.toString();
+
+class C_111 {
+  const C_111();
+}
+
+class M_111 {}
+
+class T_111 {}
+
+const C_111 iC_111 = const C_111();
+closureC_111(foo) => (C_111 unused) => iC_111.toString() == foo.toString();
+
+class C_010 {
+  const C_010();
+}
+
+class M_010 {}
+
+class T_010 {}
+
+const C_010 iC_010 = const C_010();
+closureC_010(foo) => (C_010 unused) => iC_010.toString() == foo.toString();
+
+class C_011 {
+  const C_011();
+}
+
+class M_011 {}
+
+class T_011 {}
+
+const C_011 iC_011 = const C_011();
+closureC_011(foo) => (C_011 unused) => iC_011.toString() == foo.toString();
+
+class C_001 {
+  const C_001();
+}
+
+class M_001 {}
+
+class T_001 {}
+
+const C_001 iC_001 = const C_001();
+closureC_001(foo) => (C_001 unused) => iC_001.toString() == foo.toString();
+
+class C_101_class_1 extends C_100
+    with M_100, M_101, M_111, M_001
+    implements C_101, C_111, C_001 {
+  const C_101_class_1();
+}
+
+const C_101_class_1 iC_101_class_1 = const C_101_class_1();
+closureC_101_class_1(foo) =>
+    (C_101_class_1 unused) => iC_101_class_1.toString() == foo.toString();
+
+class T_101_type__1 extends T_100
+    with M_100, M_101, M_111, M_001
+    implements T_101, T_111, T_001 {}
+
+class C_101_class_2 extends C_101
+    with M_100, M_101, M_111, M_001
+    implements C_100, C_111, C_001 {
+  const C_101_class_2();
+}
+
+const C_101_class_2 iC_101_class_2 = const C_101_class_2();
+closureC_101_class_2(foo) =>
+    (C_101_class_2 unused) => iC_101_class_2.toString() == foo.toString();
+
+class T_101_type__2 extends T_101
+    with M_100, M_101, M_111, M_001
+    implements T_100, T_111, T_001 {}
+
+class C_101_class_3 extends C_111
+    with M_100, M_101, M_111, M_001
+    implements C_100, C_101, C_001 {
+  const C_101_class_3();
+}
+
+const C_101_class_3 iC_101_class_3 = const C_101_class_3();
+closureC_101_class_3(foo) =>
+    (C_101_class_3 unused) => iC_101_class_3.toString() == foo.toString();
+
+class T_101_type__3 extends T_111
+    with M_100, M_101, M_111, M_001
+    implements T_100, T_101, T_001 {}
+
+class C_101_class_4 extends C_001
+    with M_100, M_101, M_111, M_001
+    implements C_100, C_101, C_111 {
+  const C_101_class_4();
+}
+
+const C_101_class_4 iC_101_class_4 = const C_101_class_4();
+closureC_101_class_4(foo) =>
+    (C_101_class_4 unused) => iC_101_class_4.toString() == foo.toString();
+
+class T_101_type__4 extends T_001
+    with M_100, M_101, M_111, M_001
+    implements T_100, T_101, T_111 {}
+
+class C_111_class_1 extends C_100
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_101, C_111, C_010, C_011, C_001 {
+  const C_111_class_1();
+}
+
+const C_111_class_1 iC_111_class_1 = const C_111_class_1();
+closureC_111_class_1(foo) =>
+    (C_111_class_1 unused) => iC_111_class_1.toString() == foo.toString();
+
+class T_111_type__1 extends T_100
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_101, T_111, T_010, T_011, T_001 {}
+
+class C_111_class_2 extends C_101
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_100, C_111, C_010, C_011, C_001 {
+  const C_111_class_2();
+}
+
+const C_111_class_2 iC_111_class_2 = const C_111_class_2();
+closureC_111_class_2(foo) =>
+    (C_111_class_2 unused) => iC_111_class_2.toString() == foo.toString();
+
+class T_111_type__2 extends T_101
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_100, T_111, T_010, T_011, T_001 {}
+
+class C_111_class_3 extends C_111
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_100, C_101, C_010, C_011, C_001 {
+  const C_111_class_3();
+}
+
+const C_111_class_3 iC_111_class_3 = const C_111_class_3();
+closureC_111_class_3(foo) =>
+    (C_111_class_3 unused) => iC_111_class_3.toString() == foo.toString();
+
+class T_111_type__3 extends T_111
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_100, T_101, T_010, T_011, T_001 {}
+
+class C_111_class_4 extends C_010
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_100, C_101, C_111, C_011, C_001 {
+  const C_111_class_4();
+}
+
+const C_111_class_4 iC_111_class_4 = const C_111_class_4();
+closureC_111_class_4(foo) =>
+    (C_111_class_4 unused) => iC_111_class_4.toString() == foo.toString();
+
+class T_111_type__4 extends T_010
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_100, T_101, T_111, T_011, T_001 {}
+
+class C_111_class_5 extends C_011
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_100, C_101, C_111, C_010, C_001 {
+  const C_111_class_5();
+}
+
+const C_111_class_5 iC_111_class_5 = const C_111_class_5();
+closureC_111_class_5(foo) =>
+    (C_111_class_5 unused) => iC_111_class_5.toString() == foo.toString();
+
+class T_111_type__5 extends T_011
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_100, T_101, T_111, T_010, T_001 {}
+
+class C_111_class_6 extends C_001
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements C_100, C_101, C_111, C_010, C_011 {
+  const C_111_class_6();
+}
+
+const C_111_class_6 iC_111_class_6 = const C_111_class_6();
+closureC_111_class_6(foo) =>
+    (C_111_class_6 unused) => iC_111_class_6.toString() == foo.toString();
+
+class T_111_type__6 extends T_001
+    with M_100, M_101, M_111, M_010, M_011, M_001
+    implements T_100, T_101, T_111, T_010, T_011 {}
+
+class C_011_class_1 extends C_010
+    with M_010, M_011, M_001
+    implements C_011, C_001 {
+  const C_011_class_1();
+}
+
+const C_011_class_1 iC_011_class_1 = const C_011_class_1();
+closureC_011_class_1(foo) =>
+    (C_011_class_1 unused) => iC_011_class_1.toString() == foo.toString();
+
+class T_011_type__1 extends T_010
+    with M_010, M_011, M_001
+    implements T_011, T_001 {}
+
+class C_011_class_2 extends C_011
+    with M_010, M_011, M_001
+    implements C_010, C_001 {
+  const C_011_class_2();
+}
+
+const C_011_class_2 iC_011_class_2 = const C_011_class_2();
+closureC_011_class_2(foo) =>
+    (C_011_class_2 unused) => iC_011_class_2.toString() == foo.toString();
+
+class T_011_type__2 extends T_011
+    with M_010, M_011, M_001
+    implements T_010, T_001 {}
+
+class C_011_class_3 extends C_001
+    with M_010, M_011, M_001
+    implements C_010, C_011 {
+  const C_011_class_3();
+}
+
+const C_011_class_3 iC_011_class_3 = const C_011_class_3();
+closureC_011_class_3(foo) =>
+    (C_011_class_3 unused) => iC_011_class_3.toString() == foo.toString();
+
+class T_011_type__3 extends T_001
+    with M_010, M_011, M_001
+    implements T_010, T_011 {}
+
 @pragma('dart2js:noInline')
 f_100(Set<String> u, int b) => v(u, '100', b);
 @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
index 16c561a..c8be5f5 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
@@ -3,13 +3,119 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_001) {
+    return true;
+  }
+  if (t is T_101_type__1) {
+    return true;
+  }
+  if (t is T_101_type__2) {
+    return true;
+  }
+  if (t is T_101_type__3) {
+    return true;
+  }
+  if (t is T_101_type__4) {
+    return true;
+  }
+  if (t is T_111_type__1) {
+    return true;
+  }
+  if (t is T_111_type__2) {
+    return true;
+  }
+  if (t is T_111_type__3) {
+    return true;
+  }
+  if (t is T_111_type__4) {
+    return true;
+  }
+  if (t is T_111_type__5) {
+    return true;
+  }
+  if (t is T_111_type__6) {
+    return true;
+  }
+  if (t is T_011_type__1) {
+    return true;
+  }
+  if (t is T_011_type__2) {
+    return true;
+  }
+  if (t is T_011_type__3) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_001() {
+  // C_**1;
+  Expect.isFalse(typeTest(C_001()));
+  Expect.isFalse(typeTest(C_101_class_1()));
+  Expect.isFalse(typeTest(C_101_class_2()));
+  Expect.isFalse(typeTest(C_101_class_3()));
+  Expect.isFalse(typeTest(C_101_class_4()));
+  Expect.isFalse(typeTest(C_111_class_1()));
+  Expect.isFalse(typeTest(C_111_class_2()));
+  Expect.isFalse(typeTest(C_111_class_3()));
+  Expect.isFalse(typeTest(C_111_class_4()));
+  Expect.isFalse(typeTest(C_111_class_5()));
+  Expect.isFalse(typeTest(C_111_class_6()));
+  Expect.isFalse(typeTest(C_011_class_1()));
+  Expect.isFalse(typeTest(C_011_class_2()));
+  Expect.isFalse(typeTest(C_011_class_3()));
+
+  Expect.isTrue(closureC_001(C_001())(C_001()));
+  Expect.isTrue(closureC_101_class_1(C_101_class_1())(C_101_class_1()));
+  Expect.isTrue(closureC_101_class_2(C_101_class_2())(C_101_class_2()));
+  Expect.isTrue(closureC_101_class_3(C_101_class_3())(C_101_class_3()));
+  Expect.isTrue(closureC_101_class_4(C_101_class_4())(C_101_class_4()));
+  Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+  Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+  Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+  Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+  Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+  Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+  Expect.isTrue(closureC_011_class_1(C_011_class_1())(C_011_class_1()));
+  Expect.isTrue(closureC_011_class_2(C_011_class_2())(C_011_class_2()));
+  Expect.isTrue(closureC_011_class_3(C_011_class_3())(C_011_class_3()));
+
+  Expect.equals(
+      closureC_001(C_001()).runtimeType.toString(), '(C_001) => bool');
+  Expect.equals(closureC_101_class_1(C_101_class_1()).runtimeType.toString(),
+      '(C_101_class_1) => bool');
+  Expect.equals(closureC_101_class_2(C_101_class_2()).runtimeType.toString(),
+      '(C_101_class_2) => bool');
+  Expect.equals(closureC_101_class_3(C_101_class_3()).runtimeType.toString(),
+      '(C_101_class_3) => bool');
+  Expect.equals(closureC_101_class_4(C_101_class_4()).runtimeType.toString(),
+      '(C_101_class_4) => bool');
+  Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+      '(C_111_class_1) => bool');
+  Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+      '(C_111_class_2) => bool');
+  Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+      '(C_111_class_3) => bool');
+  Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+      '(C_111_class_4) => bool');
+  Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+      '(C_111_class_5) => bool');
+  Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+      '(C_111_class_6) => bool');
+  Expect.equals(closureC_011_class_1(C_011_class_1()).runtimeType.toString(),
+      '(C_011_class_1) => bool');
+  Expect.equals(closureC_011_class_2(C_011_class_2()).runtimeType.toString(),
+      '(C_011_class_2) => bool');
+  Expect.equals(closureC_011_class_3(C_011_class_3()).runtimeType.toString(),
+      '(C_011_class_3) => bool');
+
   Set<String> uniques = {};
 
   // f_**1;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
index 3ac623a..6827fe3 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
@@ -3,13 +3,98 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_010) {
+    return true;
+  }
+  if (t is T_011) {
+    return true;
+  }
+  if (t is T_111_type__1) {
+    return true;
+  }
+  if (t is T_111_type__2) {
+    return true;
+  }
+  if (t is T_111_type__3) {
+    return true;
+  }
+  if (t is T_111_type__4) {
+    return true;
+  }
+  if (t is T_111_type__5) {
+    return true;
+  }
+  if (t is T_111_type__6) {
+    return true;
+  }
+  if (t is T_011_type__1) {
+    return true;
+  }
+  if (t is T_011_type__2) {
+    return true;
+  }
+  if (t is T_011_type__3) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_010() {
+  // C_*1*;
+  Expect.isFalse(typeTest(C_010()));
+  Expect.isFalse(typeTest(C_011()));
+  Expect.isFalse(typeTest(C_111_class_1()));
+  Expect.isFalse(typeTest(C_111_class_2()));
+  Expect.isFalse(typeTest(C_111_class_3()));
+  Expect.isFalse(typeTest(C_111_class_4()));
+  Expect.isFalse(typeTest(C_111_class_5()));
+  Expect.isFalse(typeTest(C_111_class_6()));
+  Expect.isFalse(typeTest(C_011_class_1()));
+  Expect.isFalse(typeTest(C_011_class_2()));
+  Expect.isFalse(typeTest(C_011_class_3()));
+
+  Expect.isTrue(closureC_010(C_010())(C_010()));
+  Expect.isTrue(closureC_011(C_011())(C_011()));
+  Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+  Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+  Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+  Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+  Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+  Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+  Expect.isTrue(closureC_011_class_1(C_011_class_1())(C_011_class_1()));
+  Expect.isTrue(closureC_011_class_2(C_011_class_2())(C_011_class_2()));
+  Expect.isTrue(closureC_011_class_3(C_011_class_3())(C_011_class_3()));
+
+  Expect.equals(
+      closureC_010(C_010()).runtimeType.toString(), '(C_010) => bool');
+  Expect.equals(
+      closureC_011(C_011()).runtimeType.toString(), '(C_011) => bool');
+  Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+      '(C_111_class_1) => bool');
+  Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+      '(C_111_class_2) => bool');
+  Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+      '(C_111_class_3) => bool');
+  Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+      '(C_111_class_4) => bool');
+  Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+      '(C_111_class_5) => bool');
+  Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+      '(C_111_class_6) => bool');
+  Expect.equals(closureC_011_class_1(C_011_class_1()).runtimeType.toString(),
+      '(C_011_class_1) => bool');
+  Expect.equals(closureC_011_class_2(C_011_class_2()).runtimeType.toString(),
+      '(C_011_class_2) => bool');
+  Expect.equals(closureC_011_class_3(C_011_class_3()).runtimeType.toString(),
+      '(C_011_class_3) => bool');
+
   Set<String> uniques = {};
 
   // f_*1*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
index 631b02b..5f96ca1 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
@@ -3,13 +3,112 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import "package:expect/expect.dart";
 
 import 'libImport.dart';
 
 @pragma('dart2js:noInline')
+typeTest(dynamic t) {
+  if (t is T_100) {
+    return true;
+  }
+  if (t is T_101) {
+    return true;
+  }
+  if (t is T_111) {
+    return true;
+  }
+  if (t is T_101_type__1) {
+    return true;
+  }
+  if (t is T_101_type__2) {
+    return true;
+  }
+  if (t is T_101_type__3) {
+    return true;
+  }
+  if (t is T_101_type__4) {
+    return true;
+  }
+  if (t is T_111_type__1) {
+    return true;
+  }
+  if (t is T_111_type__2) {
+    return true;
+  }
+  if (t is T_111_type__3) {
+    return true;
+  }
+  if (t is T_111_type__4) {
+    return true;
+  }
+  if (t is T_111_type__5) {
+    return true;
+  }
+  if (t is T_111_type__6) {
+    return true;
+  }
+  return false;
+}
+
+@pragma('dart2js:noInline')
 g_100() {
+  // C_1**;
+  Expect.isFalse(typeTest(C_100()));
+  Expect.isFalse(typeTest(C_101()));
+  Expect.isFalse(typeTest(C_111()));
+  Expect.isFalse(typeTest(C_101_class_1()));
+  Expect.isFalse(typeTest(C_101_class_2()));
+  Expect.isFalse(typeTest(C_101_class_3()));
+  Expect.isFalse(typeTest(C_101_class_4()));
+  Expect.isFalse(typeTest(C_111_class_1()));
+  Expect.isFalse(typeTest(C_111_class_2()));
+  Expect.isFalse(typeTest(C_111_class_3()));
+  Expect.isFalse(typeTest(C_111_class_4()));
+  Expect.isFalse(typeTest(C_111_class_5()));
+  Expect.isFalse(typeTest(C_111_class_6()));
+
+  Expect.isTrue(closureC_100(C_100())(C_100()));
+  Expect.isTrue(closureC_101(C_101())(C_101()));
+  Expect.isTrue(closureC_111(C_111())(C_111()));
+  Expect.isTrue(closureC_101_class_1(C_101_class_1())(C_101_class_1()));
+  Expect.isTrue(closureC_101_class_2(C_101_class_2())(C_101_class_2()));
+  Expect.isTrue(closureC_101_class_3(C_101_class_3())(C_101_class_3()));
+  Expect.isTrue(closureC_101_class_4(C_101_class_4())(C_101_class_4()));
+  Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+  Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+  Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+  Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+  Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+  Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+
+  Expect.equals(
+      closureC_100(C_100()).runtimeType.toString(), '(C_100) => bool');
+  Expect.equals(
+      closureC_101(C_101()).runtimeType.toString(), '(C_101) => bool');
+  Expect.equals(
+      closureC_111(C_111()).runtimeType.toString(), '(C_111) => bool');
+  Expect.equals(closureC_101_class_1(C_101_class_1()).runtimeType.toString(),
+      '(C_101_class_1) => bool');
+  Expect.equals(closureC_101_class_2(C_101_class_2()).runtimeType.toString(),
+      '(C_101_class_2) => bool');
+  Expect.equals(closureC_101_class_3(C_101_class_3()).runtimeType.toString(),
+      '(C_101_class_3) => bool');
+  Expect.equals(closureC_101_class_4(C_101_class_4()).runtimeType.toString(),
+      '(C_101_class_4) => bool');
+  Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+      '(C_111_class_1) => bool');
+  Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+      '(C_111_class_2) => bool');
+  Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+      '(C_111_class_3) => bool');
+  Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+      '(C_111_class_4) => bool');
+  Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+      '(C_111_class_5) => bool');
+  Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+      '(C_111_class_6) => bool');
+
   Set<String> uniques = {};
 
   // f_1**;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
index ef1a426..afcad53 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 import 'lib1.dart';
 import 'lib2.dart';
 import 'lib3.dart';
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
index eda8526..228adcd 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:compiler/compiler_new.dart';
+import 'package:dart_style/dart_style.dart' show DartFormatter;
 import '../../helpers/memory_compiler.dart';
 import '../../../tool/graph_isomorphizer.dart';
 
@@ -42,7 +43,8 @@
 
 void verifyGeneratedFile(
     String filename, StringBuffer contents, Map<String, String> expectations) {
-  Expect.stringEquals(contents.toString(), expectations[filename]);
+  Expect.stringEquals(
+      DartFormatter().format(contents.toString()), expectations[filename]);
 }
 
 GraphIsomorphizer generateFiles(List<String> graphFileLines,
diff --git a/pkg/compiler/tool/graph_isomorphizer.dart b/pkg/compiler/tool/graph_isomorphizer.dart
index dca1cf1..49894bd 100644
--- a/pkg/compiler/tool/graph_isomorphizer.dart
+++ b/pkg/compiler/tool/graph_isomorphizer.dart
@@ -37,8 +37,14 @@
 /// with three bits, each of 100, 010, 001 and 111 must be present in the graph
 /// file, but 110, 101, and 011 are optional.
 
+// TODO(joshualitt): This is a good start for a fuzzer. There is still work to
+// do:
+// * Emit some classes as const and some not
+// * Randomize what we emit as we walk the graph so it is more sparse.
+
 import 'dart:io';
 import 'dart:math';
+import 'package:dart_style/dart_style.dart' show DartFormatter;
 
 typedef NameFunc = String Function(List<int>, int);
 
@@ -112,6 +118,18 @@
   /// A map of bit positions to lists of bit lists.
   final Map<int, List<List<int>>> names;
 
+  /// A map of bit positions to lists of class names.
+  final Map<int, List<String>> classNames = {};
+  final Map<int, List<String>> mixerClassNames = {};
+
+  /// A map of bit positions to lists of mixin names.
+  final Map<int, List<String>> mixinNames = {};
+
+  /// A map of bit positions to lists of class names used only as types.
+  final Map<int, List<String>> typeNames = {};
+  final Map<int, List<String>> mixerTypeNames = {};
+  final Map<int, List<String>> closureNames = {};
+
   /// We will permute bits up until the maximum bit.
   int maxBit = 0;
 
@@ -135,6 +153,10 @@
     out.write('import "package:expect/expect.dart";\n\n');
   }
 
+  void newline(StringBuffer out) {
+    out.write('\n');
+  }
+
   /// Generates the header for a file.
   void generateHeader(StringBuffer out) {
     if (!skipCopyright) {
@@ -144,11 +166,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
 """);
     }
   }
 
+  /// Generates the root import, where classes, types, mixins, and closures
+  /// live.
   void generateRootImport(StringBuffer out) {
     generateHeader(out);
     importExpect(out);
@@ -161,11 +184,102 @@
         "  Expect.equals(name[bit], '1');\n" +
         '}\n\n');
 
-    Set<String> uniques = {};
-
     // Sort the names to ensure they are in a canonical order.
     var nameKeys = names.keys.toList();
     nameKeys.sort();
+
+    // Generate the 'base' classes, mixins, and types which will be combined to
+    // generate hierarchies. Also generate a const instance per class and a closure
+    // to invoke.
+    Set<String> uniques = {};
+    for (var bitPosition in nameKeys) {
+      var bitsList = names[bitPosition];
+      for (var bits in bitsList) {
+        var name = generateBitString(bits);
+        if (!uniques.add(name)) continue;
+        String className = 'C$name';
+        String mixinName = 'M$name';
+        String typeName = 'T$name';
+        (classNames[bitPosition] ??= []).add(className);
+        (mixinNames[bitPosition] ??= []).add(mixinName);
+        (typeNames[bitPosition] ??= []).add(typeName);
+        (mixerClassNames[bitPosition] ??= []).add(className);
+        (mixerTypeNames[bitPosition] ??= []).add(typeName);
+        out.write('class $className { const $className(); }\n');
+        out.write('class $mixinName {}\n');
+        out.write('class $typeName {}\n');
+        out.write('const $className i$className = const $className();\n');
+        out.write('closure$className(foo) => ($className unused) ');
+        out.write('=> i$className.toString() == foo.toString();\n');
+      }
+    }
+
+    // Generate combined classes and types, as well as const instances and
+    // closures.
+    newline(out);
+    uniques = {};
+    for (var bitPosition in nameKeys) {
+      var bitsList = names[bitPosition];
+      for (var bits in bitsList) {
+        var name = generateBitString(bits);
+        var bitCount = bits.reduce((a, b) => a + b);
+        var baseName = 'C$name';
+        if (!uniques.add(baseName)) continue;
+        if (bitCount > 1) {
+          List<String> classes = [];
+          List<String> mixins = [];
+          List<String> types = [];
+          for (int i = 0; i < bits.length; i++) {
+            if (bits[i] == 1) {
+              classes.addAll(classNames[i]);
+              mixins.addAll(mixinNames[i]);
+              types.addAll(typeNames[i]);
+            }
+          }
+          String mixinString = mixins.join(', ');
+          int count = 1;
+          assert(classes.length == types.length);
+          for (int i = 0; i < classes.length; i++) {
+            var cls = classes[i];
+            var type = types[i];
+            List<String> classImpls = [];
+            List<String> typeImpls = [];
+            if (i > 0) {
+              classImpls.addAll(classes.sublist(0, i));
+              typeImpls.addAll(types.sublist(0, i));
+            }
+            if (i < classes.length - 1) {
+              classImpls.addAll(classes.sublist(i + 1));
+              typeImpls.addAll(types.sublist(i + 1));
+            }
+            var classImplementsString = classImpls.join(', ');
+            String className = '${baseName}_class_${count}';
+            out.write('class $className extends $cls with $mixinString ');
+            out.write(
+                'implements $classImplementsString { const $className(); }\n');
+            out.write('const $className i$className = const $className();\n');
+            out.write('closure$className(foo) => ($className unused) ');
+            out.write('=> i$className.toString() == foo.toString();\n');
+
+            var typeImplementsString = typeImpls.join(', ');
+            String typeName = 'T${name}_type__${count}';
+            out.write('class $typeName extends $type with $mixinString ');
+            out.write('implements $typeImplementsString {}\n');
+            for (int i = 0; i < bits.length; i++) {
+              if (bits[i] == 1) {
+                mixerClassNames[i].add(className);
+                mixerTypeNames[i].add(typeName);
+              }
+            }
+            count++;
+          }
+        }
+      }
+    }
+
+    // Generate functions.
+    newline(out);
+    uniques = {};
     for (var name in nameKeys) {
       var bitsList = names[name];
       for (var bits in bitsList) {
@@ -186,13 +300,41 @@
     generateHeader(out);
     importExpect(out);
     out.write("import '$import';\n\n");
+
+    // create type test.
     noInlineDecorator(out);
-    out.write('g$name() {\n'
-        '  Set<String> uniques = {};\n\n'
-        '  // f${generateCommentName(bits, bit)};\n');
-    int count = 0;
+    out.write('typeTest(dynamic t) {\n');
+    for (var type in mixerTypeNames[bit]) {
+      out.write('  if (t is $type) { return true; }\n');
+    }
+    out.write('  return false;\n');
+    out.write('}\n\n');
+
+    noInlineDecorator(out);
+    out.write('g$name() {\n');
+    out.write('  // C${generateCommentName(bits, bit)};\n');
+
+    // Construct new instances of each class and pass them to the typeTest
+    for (var cls in mixerClassNames[bit]) {
+      out.write('  Expect.isFalse(typeTest($cls()));\n');
+    }
+    newline(out);
+
+    // Invoke the test closure for each class.
+    for (var cls in mixerClassNames[bit]) {
+      out.write('  Expect.isTrue(closure$cls($cls())($cls()));\n');
+    }
+    newline(out);
+
+    // Verify the runtimeTypes of the closures haven't been mangled.
+    for (var cls in mixerClassNames[bit]) {
+      out.write('  Expect.equals(closure$cls($cls()).runtimeType.toString(), ');
+      out.write("'($cls) => bool');\n");
+    }
+    newline(out);
 
     // Collect the names so we can sort them and put them in a canonical order.
+    int count = 0;
     List<String> namesBits = [];
     names[bit].forEach((nameBits) {
       var nameString = generateBitString(nameBits);
@@ -200,6 +342,9 @@
       count++;
     });
 
+    out.write('  Set<String> uniques = {};\n\n'
+        '  // f${generateCommentName(bits, bit)};\n');
+
     namesBits.sort();
     for (var name in namesBits) {
       out.write('  f$name(uniques, $bit);\n');
@@ -300,7 +445,7 @@
     var file = File(this.outDirectory + '/' + filename);
     file.createSync(recursive: true);
     var sink = file.openWrite();
-    sink.write(contents);
+    sink.write(DartFormatter().format(contents.toString()));
     sink.close();
   }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 6cc44bc..ff29dc3 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -5151,7 +5151,7 @@
     }
     int offset = reason.writeExpression.fileOffset;
     return templateVariableCouldBeNullDueToWrite
-        .withArguments(reason.variable.name)
+        .withArguments(reason.variable.name, reason.documentationLink)
         .withLocation(inferrer.helper.uri, offset, noLength);
   }
 
@@ -5160,7 +5160,7 @@
       DemoteViaForEachVariableWrite<VariableDeclaration, Node> reason) {
     int offset = (reason.node as TreeNode).fileOffset;
     return templateVariableCouldBeNullDueToWrite
-        .withArguments(reason.variable.name)
+        .withArguments(reason.variable.name, reason.documentationLink)
         .withLocation(inferrer.helper.uri, offset, noLength);
   }
 
@@ -5183,7 +5183,7 @@
       propertyReference = member;
       propertyType = reason.staticType;
       return templateFieldNotPromoted
-          .withArguments(reason.propertyName)
+          .withArguments(reason.propertyName, reason.documentationLink)
           .withLocation(member.fileUri, member.fileOffset, noLength);
     } else {
       return null;
@@ -5192,6 +5192,8 @@
 
   @override
   LocatedMessage visitThisNotPromoted(ThisNotPromoted reason) {
-    return messageThisNotPromoted.withoutLocation();
+    return templateThisNotPromoted
+        .withArguments(reason.documentationLink)
+        .withoutLocation();
   }
 }
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 5599193..384cb20 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -4656,13 +4656,15 @@
 
 VariableCouldBeNullDueToWrite:
   template: "Variable '#name' could be null due to an intervening write."
-  tip: "Try null checking the variable after the write."
+  tip: "Try null checking the variable after the write.  See #string"
 
 FieldNotPromoted:
   template: "'#name' refers to a property so it couldn't be promoted."
+  tip: "See #string"
 
 ThisNotPromoted:
   template: "'this' can't be promoted."
+  tip: "See #string"
 
 NullablePropertyAccessError:
   template: "Property '#name' cannot be accessed on '#type' because it is potentially null."
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index dfcff07..cce4737 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -882,6 +882,7 @@
 preexisted
 preexisting
 preorder
+presented
 presubmit
 prev
 prime
@@ -892,6 +893,7 @@
 producers
 product
 progresses
+promo
 proof
 prop
 propose
diff --git a/tools/VERSION b/tools/VERSION
index 59b36cd..873a2c8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 191
+PRERELEASE 192
 PRERELEASE_PATCH 0
\ No newline at end of file
