// 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.

/**
 * @assertion  It is a compile error if a class has a setter named 'v=' with
 * argument type T and a getter named 'v' with return type S, and T may not be
 * assigned to S.
 * @description Checks that it is no compile error if a class defines a setter
 * named 'foo=' and a getter named 'foo' with argument/return types that are
 * mutually assignable. Types in getter/setter signatures provided as type
 * parameters
 * @author sgrekhov@unipro.ru
 */

class A {}
class B extends A {}

class C<T extends A, S extends T> {
  set foo(T t) {
    _foo = t;
  }

  S get foo { return _foo; }

  var _foo;
}

main() {
  new C<A, B>().foo = new B();
}
