// 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(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);
}
