anchor.diff:  
       VariableDeclaration list = new VariableDeclaration.forValue(
           new ListLiteral([], typeArgument: node.typeArgument),
  -        type: new InterfaceType(coreTypes.listClass, [node.typeArgument]));
  +        type: new InterfaceType(coreTypes.listClass, [node.typeArgument]),
  +        isFinal: true);
       List<Statement> body = [list];
       for (int j = 0; j < i; ++j) {
         body.add(new ExpressionStatement(new MethodInvocation(
  
positive.code: class CollectionTransformer extends Transformer {
    final CoreTypes coreTypes;
    final Procedure listAdd;
    final Procedure listAddAll;
  
    CollectionTransformer(SourceLoader loader)
        : coreTypes = loader.coreTypes,
          listAdd = loader.coreTypes.index.getMember('dart:core', 'List', 'add'),
          listAddAll =
              loader.coreTypes.index.getMember('dart:core', 'List', 'addAll');
  
    @override
    TreeNode visitListLiteral(ListLiteral node) {
  
negative.code:     }
      for (; i < node.expressions.length; ++i) {
        Expression element = node.expressions[i];
        if (element is SpreadElement) {
          VariableDeclaration elt = new VariableDeclaration(null,
              type: node.typeArgument, isFinal: true);
          body.add(new ForInStatement(
              elt,
              element.expression.accept(this),
              new ExpressionStatement(new MethodInvocation(
                  new VariableGet(list),
                  new Name('add'),
                  new Arguments([new VariableGet(elt)]),
                  listAdd))));
        } else {
          body.add(new ExpressionStatement(new MethodInvocation(
              new VariableGet(list),
              new Name('add'),
              new Arguments([element.accept(this)]),
              listAdd)));
        }
      }
  
      return new BlockExpression(new Block(body), new VariableGet(list));
  