diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index c9fde87..89f7efa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -172,6 +172,29 @@
     return null;
   }
 
+  InterfaceType getKernelTypeAsInstanceOf(
+      InterfaceType type, Class superclass) {
+    Class kernelClass = type.classNode;
+    if (kernelClass == superclass) return type;
+    if (kernelClass == nullKernelClass) {
+      if (superclass.typeParameters.isEmpty) {
+        return superclass.rawType;
+      } else {
+        // This is a safe fall-back for dealing with `Null`. It will likely be
+        // faster to check for `Null` before calling this method.
+        return new InterfaceType(
+            superclass,
+            new List<DartType>.filled(
+                superclass.typeParameters.length, nullKernelClass.rawType));
+      }
+    }
+    KernelNamedTypeBuilder supertype = asSupertypeOf(kernelClass, superclass);
+    if (supertype == null) return null;
+    if (supertype.arguments == null) return superclass.rawType;
+    return Substitution.fromInterfaceType(type)
+        .substituteType(supertype.build(null));
+  }
+
   static ClassHierarchyBuilder build(
       KernelClassBuilder objectClass,
       List<KernelClassBuilder> classes,
@@ -1001,13 +1024,7 @@
 
   @override
   InterfaceType getTypeAsInstanceOf(InterfaceType type, Class superclass) {
-    if (type.classNode == superclass) return type;
-    KernelNamedTypeBuilder supertype =
-        hierarchy.asSupertypeOf(type.classNode, superclass);
-    if (supertype == null) return null;
-    if (supertype.arguments == null) return superclass.rawType;
-    return Substitution.fromInterfaceType(type)
-        .substituteType(supertype.build(null));
+    return hierarchy.getKernelTypeAsInstanceOf(type, superclass);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/types.dart b/pkg/front_end/lib/src/fasta/kernel/types.dart
index 5fbed2e..d7207b5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/types.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/types.dart
@@ -21,7 +21,7 @@
 
 import 'package:kernel/type_algebra.dart' show Substitution;
 
-import 'kernel_builder.dart' show ClassHierarchyBuilder, KernelNamedTypeBuilder;
+import 'kernel_builder.dart' show ClassHierarchyBuilder;
 
 class Types {
   final ClassHierarchyBuilder hierarchy;
@@ -220,19 +220,19 @@
 
   @override
   bool isInterfaceRelated(InterfaceType s, InterfaceType t, Types types) {
-    Class cls = s.classNode;
-    if (cls == t.classNode) {
-      return types.areSubtypesOfKernel(s.typeArguments, t.typeArguments);
+    if (s.classNode == types.hierarchy.nullKernelClass) {
+      // This is an optimization, to avoid instantating unnecessary type
+      // arguments in getKernelTypeAsInstanceOf.
+      return true;
     }
-    if (cls == types.hierarchy.nullKernelClass) return true;
-    KernelNamedTypeBuilder supertype =
-        types.hierarchy.asSupertypeOf(s.classNode, t.classNode);
-    if (supertype == null) return false;
-    if (supertype.arguments == null) return true;
     InterfaceType asSupertype =
-        Substitution.fromInterfaceType(s).substituteType(supertype.build(null));
-    return types.areSubtypesOfKernel(
-        asSupertype.typeArguments, t.typeArguments);
+        types.hierarchy.getKernelTypeAsInstanceOf(s, t.classNode);
+    if (asSupertype == null) {
+      return false;
+    } else {
+      return types.areSubtypesOfKernel(
+          asSupertype.typeArguments, t.typeArguments);
+    }
   }
 
   @override
