| Index: pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart | 
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart | 
| index 185e1d5d84c590684544cbb13d11698cb2d9566a..347b08488602aa4c7a6d0b70cbe950d7d90611d9 100644 | 
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart | 
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart | 
| @@ -64,44 +64,37 @@ abstract class KernelClassBuilder | 
| /// [arguments] have already been built. | 
| InterfaceType buildTypesWithBuiltArguments( | 
| LibraryBuilder library, List<DartType> arguments) { | 
| -    return arguments == null | 
| -        ? cls.rawType | 
| -        : new InterfaceType( | 
| -            cls, | 
| -            // TODO(ahe): Not sure what to do if `arguments.length != | 
| -            // cls.typeParameters.length`. | 
| -            computeDefaultTypeArguments(cls.typeParameters, arguments)); | 
| +    assert(arguments == null || cls.typeParameters.length == arguments.length); | 
| +    return arguments == null ? cls.rawType : new InterfaceType(cls, arguments); | 
| +  } | 
| + | 
| +  List<DartType> buildTypeArguments( | 
| +      LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 
| +    List<DartType> typeArguments = <DartType>[]; | 
| +    for (KernelTypeBuilder builder in arguments) { | 
| +      DartType type = builder.build(library); | 
| +      if (type == null) { | 
| +        internalError("Bad type: ${builder.runtimeType}"); | 
| +      } | 
| +      typeArguments.add(type); | 
| +    } | 
| +    return computeDefaultTypeArguments( | 
| +        library, cls.typeParameters, typeArguments); | 
| } | 
|  | 
| InterfaceType buildType( | 
| LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 
| List<DartType> typeArguments; | 
| if (arguments != null) { | 
| -      typeArguments = <DartType>[]; | 
| -      for (KernelTypeBuilder builder in arguments) { | 
| -        DartType type = builder.build(library); | 
| -        if (type == null) { | 
| -          internalError("Bad type: ${builder.runtimeType}"); | 
| -        } | 
| -        typeArguments.add(type); | 
| -      } | 
| +      typeArguments = buildTypeArguments(library, arguments); | 
| } | 
| return buildTypesWithBuiltArguments(library, typeArguments); | 
| } | 
|  | 
| Supertype buildSupertype( | 
| LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 
| -    List<DartType> typeArguments; | 
| if (arguments != null) { | 
| -      typeArguments = <DartType>[]; | 
| -      for (KernelTypeBuilder builder in arguments) { | 
| -        DartType type = builder.build(library); | 
| -        if (type == null) { | 
| -          internalError("Bad type: ${builder.runtimeType}"); | 
| -        } | 
| -        typeArguments.add(type); | 
| -      } | 
| -      return new Supertype(cls, typeArguments); | 
| +      return new Supertype(cls, buildTypeArguments(library, arguments)); | 
| } else { | 
| return cls.asRawSupertype; | 
| } | 
|  |