| // 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 that are valid |
| /// according to this syntax do not cause any errors and such class can be |
| /// instantiated. |
| /// @author kaigorodov |
| /// @reviewer rodionov |
| |
| |
| class A { |
| const A(): this.anotherConstructor(); |
| const A.anotherConstructor(); |
| static final x = 1, y = 2; |
| static final int z = 3; |
| static const x1 = 1, y1 = 2; |
| static const int z1 = 3; |
| } |
| |
| class B { |
| const B(); |
| B.anotherConstructor(): this.oneMoreConstructor(); |
| B.oneMoreConstructor() {} |
| static var initialized = 1; |
| static int initialized2 = 2; |
| } |
| |
| class C { |
| const C(): x = 1; |
| final x; |
| final int x1=-1; |
| } |
| |
| class D { |
| D(); |
| D.name() : a = 2; |
| var x, y = 2, z; |
| int a = 1; |
| static int? typed; |
| static var untyped; |
| } |
| |
| class E { |
| E(): this.D(); |
| E.D(); |
| static var nonInitialized; |
| } |
| |
| class F { |
| F(): x = 1, y = 2; |
| var x, y; |
| int? x1, y1; |
| var x2=2, y3=2; |
| } |
| |
| abstract class Abstract { |
| func(); |
| funcWithParams(p1, p2); |
| funcWithOptionalParams([p1 = 1, p2 = 2]); |
| funcWithOptionalParams2({p1: 1, p2: 2}); |
| get val; |
| set val(var v); |
| operator ==(dynamic other); |
| |
| var _val; |
| } |
| |
| class Concrete extends Abstract { |
| func() {} |
| funcWithParams(p1, p2) {} |
| funcWithOptionalParams([p1 = 1, p2 = 2]) {} |
| funcWithOptionalParams2({p1: 1, p2: 2}) {} |
| get val => _val; |
| set val(var v) {_val = v;} |
| operator ==(dynamic other) {return identical(this, other);} |
| } |
| |
| main() { |
| A a = const A(); |
| B b = new B(); |
| C c = const C(); |
| D d = new D(); |
| E e = new E(); |
| F f = new F(); |
| Abstract abst = new Concrete(); |
| } |