blob: 64ff19016eda74b9d6e8545cc9812cf446fdffb4 [file] [log] [blame]
// 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
/// ;
/// . . .
/// classMemberDefinition:
/// declaration ';' |
/// methodSignature functionBody
/// ;
/// . . .
/// declaration:
/// constantConstructorSignature (redirection | initializers)? |
/// constructorSignature (redirection | initializers)? |
/// external constantConstructorSignature |
/// external constructorSignature |
/// (external static?)? getterSignature |
/// (external static?)? setterSignature |
/// external? operatorSignature |
/// (external static?)? functionSignature |
/// static (final | const) type? staticFinalDeclarationList |
/// final type? initializedIdentifierList |
/// static? (var | type) initializedIdentifierList
/// ;
/// staticFinalDeclarationList:
/// staticFinalDeclaration (', ' staticFinalDeclaration)*
/// ;
/// staticFinalDeclaration:
/// identifier '=' expression
/// ;
/// @description Checks that various class member declarations with metadata
/// that are valid according to this syntax do not cause any errors and such
/// class can be instantiated.
/// @author kaigorodov
class A {
@B(1) const A(): this.anotherConstructor();
@A() const A.anotherConstructor();
@A() static final x = 1, y = 2;
@B(1) static final int z = 3;
@A() static const x1 = 1, y1 = 2;
@B(1) static const int z1 = 3;
}
class B {
@B(1) const B(int a);
@A() B.anotherConstructor(): this.oneMoreConstructor();
@B(1) B.oneMoreConstructor() {}
@A() static var initialized = 1;
@B(1) static int initialized2 = 2;
}
class C {
@B(1) const C(): x = 1, x1 = 2;
@A() final x;
@B(1) final int x1;
}
class D {
@B(1) D();
@A() D.name() : a = 2;
@B(1) var x, y = 2, z;
@A() int a = 1;
@B(1) static int? typed;
@A() static var untyped;
}
class E {
@B(1) E(): this.D();
@A() E.D();
@B(1) static var nonInitialized;
}
class F {
@B(1) F(): x = 1, y = 2;
@A() var x, y;
@B(1) int? x1, y1;
}
abstract class Abstract {
@B(1) func();
@A() funcWithParams(p1, p2);
@B(1) funcWithOptionalParams([p1 = 1, p2 = 2]);
@B(1) funcWithNamedParams({p1: 1, p2: 2});
@A() get val;
@B(1) set val(var v);
@A() operator ==(dynamic other);
@B(1) var _val;
}
main() {
A a = const A();
B b = new B(2);
C c = const C();
D d = new D();
E e = new E();
F f = new F();
}