| // 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 classDefinition: |
| /// metadata abstract? class identifier typeParameters? (superclass mixins?)? |
| /// interfaces? ‘{’ (metadata classMemberDefinition)* ‘}’ | |
| /// metadata abstract? class mixinApplicationClass |
| /// ; |
| /// metadata: |
| /// (’@’ qualified (. identifier)? (arguments)?)* |
| /// ; |
| /// @description Checks that various class definitions that are valid according |
| /// to this syntax and have metadata do not cause any errors and can be |
| /// instantiated. |
| /// @author kaigorodov |
| |
| |
| @A() abstract class I {} |
| @B() abstract class J {} |
| @A() abstract class IT <T> {} |
| |
| @B.fromInt(1) class A { |
| const A(); |
| } |
| |
| @B.fromInt(1) class B extends A { |
| const B(); |
| const B.fromInt(int a); |
| } |
| |
| @B.fromInt(1) class C extends B implements I {} |
| @A() class D implements I, J {} |
| @B.fromInt(1) class E extends D implements I, J {} |
| |
| @B.fromInt(1) class F<T> {} |
| @A() class G<S, T> extends F<T> {} |
| @B.fromInt(1) class H<T> implements I {} |
| @A() class K extends G<int, int> implements I {} |
| @B.fromInt(1) class L<T extends A, S extends B> implements IT<T> {} |
| |
| @A() abstract class M {} |
| @B.fromInt(1) abstract class N<T, U> extends A {} |
| @A() abstract class O extends N<int, int> implements I {} |
| |
| main() { |
| A a = new A(); |
| B b = new B.fromInt(2); |
| C c = new C(); |
| D d = new D(); |
| E e = new E(); |
| F f = new F(); |
| G g = new G(); |
| H h = new H(); |
| K k = new K(); |
| L l = new L(); |
| } |