| // 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 The return type of a factory whose signature is of the |
| * form factory M or the form factory M.id is M if M is not a generic type; |
| * otherwise the return type is M <T1, …, Tn>, where T1, …, Tn are the type |
| * parameters of the enclosing class. |
| * @description Checks that result of invoking factory constructor of the form |
| * M or M.id can be assigned to the variables whose types are assignable to M |
| * and no static warnings are produced. |
| * @static-clean |
| * @author iefremov |
| */ |
| |
| class S {} |
| |
| class A extends S { |
| A.g() {} |
| factory A() = D; |
| factory A.bcd() = D; |
| } |
| |
| class D extends A { |
| D() : super.g(); |
| } |
| |
| main() { |
| A a = new A(); |
| S s = new A(); |
| var d = new A(); |
| |
| a = new A.bcd(); |
| s = new A.bcd(); |
| d = new A.bcd(); |
| } |