| Index: pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
 | 
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
 | 
| index 7e023ab1312a3f6900a9f44a7deca3129b408500..08b6f474be30a04299abd0923350f7ee849913dc 100644
 | 
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
 | 
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
 | 
| @@ -4,61 +4,58 @@
 | 
|  
 | 
|  library fasta.kernel_procedure_builder;
 | 
|  
 | 
| -import 'package:kernel/ast.dart' show
 | 
| -    Arguments,
 | 
| -    AsyncMarker,
 | 
| -    Constructor,
 | 
| -    ConstructorInvocation,
 | 
| -    DartType,
 | 
| -    DynamicType,
 | 
| -    EmptyStatement,
 | 
| -    Expression,
 | 
| -    FunctionNode,
 | 
| -    Initializer,
 | 
| -    Library,
 | 
| -    LocalInitializer,
 | 
| -    Member,
 | 
| -    Name,
 | 
| -    NamedExpression,
 | 
| -    Procedure,
 | 
| -    ProcedureKind,
 | 
| -    RedirectingInitializer,
 | 
| -    Statement,
 | 
| -    StaticInvocation,
 | 
| -    StringLiteral,
 | 
| -    SuperInitializer,
 | 
| -    TypeParameter,
 | 
| -    VariableDeclaration,
 | 
| -    VariableGet,
 | 
| -    VoidType,
 | 
| -    setParents;
 | 
| -
 | 
| -import 'package:kernel/type_algebra.dart' show
 | 
| -    containsTypeVariable,
 | 
| -    substitute;
 | 
| -
 | 
| -import '../errors.dart' show
 | 
| -    internalError;
 | 
| -
 | 
| -import '../messages.dart' show
 | 
| -    warning;
 | 
| -
 | 
| -import '../loader.dart' show
 | 
| -    Loader;
 | 
| -
 | 
| -import 'kernel_builder.dart' show
 | 
| -    Builder,
 | 
| -    ClassBuilder,
 | 
| -    ConstructorReferenceBuilder,
 | 
| -    FormalParameterBuilder,
 | 
| -    KernelFormalParameterBuilder,
 | 
| -    KernelLibraryBuilder,
 | 
| -    KernelTypeBuilder,
 | 
| -    KernelTypeVariableBuilder,
 | 
| -    MetadataBuilder,
 | 
| -    ProcedureBuilder,
 | 
| -    TypeVariableBuilder,
 | 
| -    memberError;
 | 
| +import 'package:kernel/ast.dart'
 | 
| +    show
 | 
| +        Arguments,
 | 
| +        AsyncMarker,
 | 
| +        Constructor,
 | 
| +        ConstructorInvocation,
 | 
| +        DartType,
 | 
| +        DynamicType,
 | 
| +        EmptyStatement,
 | 
| +        Expression,
 | 
| +        FunctionNode,
 | 
| +        Initializer,
 | 
| +        Library,
 | 
| +        LocalInitializer,
 | 
| +        Member,
 | 
| +        Name,
 | 
| +        NamedExpression,
 | 
| +        Procedure,
 | 
| +        ProcedureKind,
 | 
| +        RedirectingInitializer,
 | 
| +        Statement,
 | 
| +        StaticInvocation,
 | 
| +        StringLiteral,
 | 
| +        SuperInitializer,
 | 
| +        TypeParameter,
 | 
| +        VariableDeclaration,
 | 
| +        VariableGet,
 | 
| +        VoidType,
 | 
| +        setParents;
 | 
| +
 | 
| +import 'package:kernel/type_algebra.dart' show containsTypeVariable, substitute;
 | 
| +
 | 
| +import '../errors.dart' show internalError;
 | 
| +
 | 
| +import '../messages.dart' show warning;
 | 
| +
 | 
| +import '../loader.dart' show Loader;
 | 
| +
 | 
| +import 'kernel_builder.dart'
 | 
| +    show
 | 
| +        Builder,
 | 
| +        ClassBuilder,
 | 
| +        ConstructorReferenceBuilder,
 | 
| +        FormalParameterBuilder,
 | 
| +        KernelFormalParameterBuilder,
 | 
| +        KernelLibraryBuilder,
 | 
| +        KernelTypeBuilder,
 | 
| +        KernelTypeVariableBuilder,
 | 
| +        MetadataBuilder,
 | 
| +        ProcedureBuilder,
 | 
| +        TypeVariableBuilder,
 | 
| +        memberError;
 | 
|  
 | 
|  abstract class KernelFunctionBuilder
 | 
|      extends ProcedureBuilder<KernelTypeBuilder> {
 | 
| @@ -68,14 +65,18 @@ abstract class KernelFunctionBuilder
 | 
|  
 | 
|    Statement actualBody;
 | 
|  
 | 
| -  KernelFunctionBuilder(List<MetadataBuilder> metadata, int modifiers,
 | 
| -      KernelTypeBuilder returnType, String name,
 | 
| +  KernelFunctionBuilder(
 | 
| +      List<MetadataBuilder> metadata,
 | 
| +      int modifiers,
 | 
| +      KernelTypeBuilder returnType,
 | 
| +      String name,
 | 
|        List<TypeVariableBuilder> typeVariables,
 | 
|        List<FormalParameterBuilder> formals,
 | 
| -      KernelLibraryBuilder compilationUnit, int charOffset,
 | 
| +      KernelLibraryBuilder compilationUnit,
 | 
| +      int charOffset,
 | 
|        this.nativeMethodName)
 | 
|        : super(metadata, modifiers, returnType, name, typeVariables, formals,
 | 
| -          compilationUnit, charOffset);
 | 
| +            compilationUnit, charOffset);
 | 
|  
 | 
|    void set body(Statement newBody) {
 | 
|      if (isAbstract && newBody != null) {
 | 
| @@ -133,6 +134,7 @@ abstract class KernelFunctionBuilder
 | 
|                "Can only use type variables in instance methods.");
 | 
|            return substitute(type, substitution);
 | 
|          }
 | 
| +
 | 
|          Set<TypeParameter> set = typeParameters.toSet();
 | 
|          for (VariableDeclaration parameter in result.positionalParameters) {
 | 
|            if (containsTypeVariable(parameter.type, set)) {
 | 
| @@ -162,10 +164,10 @@ abstract class KernelFunctionBuilder
 | 
|      Expression annotation;
 | 
|      if (constructor.isConstructor) {
 | 
|        annotation = new ConstructorInvocation(constructor.target, arguments)
 | 
| -          ..isConst = true;
 | 
| +        ..isConst = true;
 | 
|      } else {
 | 
|        annotation = new StaticInvocation(constructor.target, arguments)
 | 
| -          ..isConst = true;
 | 
| +        ..isConst = true;
 | 
|      }
 | 
|      target.addAnnotation(annotation);
 | 
|    }
 | 
| @@ -180,11 +182,17 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
 | 
|  
 | 
|    KernelProcedureBuilder(
 | 
|        List<MetadataBuilder> metadata,
 | 
| -      int modifiers, KernelTypeBuilder returnType, String name,
 | 
| +      int modifiers,
 | 
| +      KernelTypeBuilder returnType,
 | 
| +      String name,
 | 
|        List<TypeVariableBuilder> typeVariables,
 | 
| -      List<FormalParameterBuilder> formals, this.actualAsyncModifier,
 | 
| -      ProcedureKind kind, KernelLibraryBuilder compilationUnit, int charOffset,
 | 
| -      [String nativeMethodName, this.redirectionTarget])
 | 
| +      List<FormalParameterBuilder> formals,
 | 
| +      this.actualAsyncModifier,
 | 
| +      ProcedureKind kind,
 | 
| +      KernelLibraryBuilder compilationUnit,
 | 
| +      int charOffset,
 | 
| +      [String nativeMethodName,
 | 
| +      this.redirectionTarget])
 | 
|        : procedure = new Procedure(null, kind, null,
 | 
|              fileUri: compilationUnit?.relativeFileUri),
 | 
|          super(metadata, modifiers, returnType, name, typeVariables, formals,
 | 
| @@ -195,7 +203,9 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
 | 
|    AsyncMarker get asyncModifier => actualAsyncModifier;
 | 
|  
 | 
|    Statement get body {
 | 
| -    if (actualBody == null && redirectionTarget == null && !isAbstract &&
 | 
| +    if (actualBody == null &&
 | 
| +        redirectionTarget == null &&
 | 
| +        !isAbstract &&
 | 
|          !isExternal) {
 | 
|        actualBody = new EmptyStatement();
 | 
|      }
 | 
| @@ -239,13 +249,16 @@ class KernelConstructorBuilder extends KernelFunctionBuilder {
 | 
|  
 | 
|    KernelConstructorBuilder(
 | 
|        List<MetadataBuilder> metadata,
 | 
| -      int modifiers, KernelTypeBuilder returnType, String name,
 | 
| +      int modifiers,
 | 
| +      KernelTypeBuilder returnType,
 | 
| +      String name,
 | 
|        List<TypeVariableBuilder> typeVariables,
 | 
|        List<FormalParameterBuilder> formals,
 | 
| -      KernelLibraryBuilder compilationUnit, int charOffset,
 | 
| +      KernelLibraryBuilder compilationUnit,
 | 
| +      int charOffset,
 | 
|        [String nativeMethodName])
 | 
|        : super(metadata, modifiers, returnType, name, typeVariables, formals,
 | 
| -          compilationUnit, charOffset, nativeMethodName);
 | 
| +            compilationUnit, charOffset, nativeMethodName);
 | 
|  
 | 
|    bool get isInstanceMember => false;
 | 
|  
 | 
| @@ -268,15 +281,15 @@ class KernelConstructorBuilder extends KernelFunctionBuilder {
 | 
|  
 | 
|    FunctionNode buildFunction() {
 | 
|      // TODO(ahe): Should complain if another type is explicitly set.
 | 
| -    return super.buildFunction()
 | 
| -        ..returnType = const VoidType();
 | 
| +    return super.buildFunction()..returnType = const VoidType();
 | 
|    }
 | 
|  
 | 
|    Constructor get target => constructor;
 | 
|  
 | 
|    void checkSuperOrThisInitializer(Initializer initializer) {
 | 
|      if (superInitializer != null || redirectingInitializer != null) {
 | 
| -      memberError(target,
 | 
| +      memberError(
 | 
| +          target,
 | 
|            "Can't have more than one 'super' or 'this' initializer.",
 | 
|            initializer.fileOffset);
 | 
|      }
 | 
| @@ -315,16 +328,16 @@ class KernelConstructorBuilder extends KernelFunctionBuilder {
 | 
|          for (int i = 0; i < positional.length; i++) {
 | 
|            VariableDeclaration variable =
 | 
|                new VariableDeclaration.forValue(positional[i], isFinal: true);
 | 
| -          initializers.add(
 | 
| -              new LocalInitializer(variable)..parent = constructor);
 | 
| +          initializers
 | 
| +              .add(new LocalInitializer(variable)..parent = constructor);
 | 
|            positional[i] = new VariableGet(variable)..parent = arguments;
 | 
|          }
 | 
|          for (NamedExpression named in arguments.named) {
 | 
|            VariableDeclaration variable =
 | 
|                new VariableDeclaration.forValue(named.value, isFinal: true);
 | 
|            named.value = new VariableGet(variable)..parent = named;
 | 
| -          initializers.add(
 | 
| -              new LocalInitializer(variable)..parent = constructor);
 | 
| +          initializers
 | 
| +              .add(new LocalInitializer(variable)..parent = constructor);
 | 
|          }
 | 
|        }
 | 
|        initializers.add(initializer..parent = constructor);
 | 
| 
 |