// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Check that initializers are not duplicated

class Class {
  Class(var v)
    : field_ = v,
      // Test against duplicate final field initialization in initializing list.
      field_ = 2;
  //  ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
  //         ^
  // [cfe] 'field_' was already initialized by this constructor.

  Class.field(this.field_)
    // Test against duplicate final field initialization between initializing
    // formals and initializer list.
    : field_ = 2;
  //  ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
  //         ^
  // [cfe] 'field_' was already initialized by this constructor.

  // Test against duplicate final field initialization in initializing formals.
  Class.two_fields(
    this.field_,
    this.field_,
    //   ^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_FIELD_FORMAL_PARAMETER
    // [cfe] 'field_' was already initialized by this constructor.
    // [cfe] Duplicated parameter name 'field_'.
  );
  final field_;
}

main() {
  new Class(42);
  new Class.field(42);
  new Class.two_fields(42, 42);
}
