// 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
/// ;
/// methodSignature:
///   constructorSignature initializers? |
///   factoryConstructorSignature |
///   static? functionSignature |
///   static? getterSignature |
///   static? setterSignature |
///   operatorSignature
/// ;
/// @description Checks that various class member method definitions which are
/// valid according to this syntax do not cause any errors and such class can 
/// be instantiated. 
/// @author msyabro


class A {
  @B(1) factory A.f() {
    return new C();
  }
  @A() const A():_x = 0;
  @A() A.B():_x = 2;
  @B(1) A.C(): _x = 1 {}

  @A() static fun() {}
  @B(1) get x {}
  @A() set x(var v) {}
  @B(1) operator ==(dynamic other) => true;

  @A() final _x;
}

class B {
  @B(1) const B(this.y);
  @A() final y;
}

class C extends A {}

main() {
  A a = new A();
  A ab = new A.B();
  A i = new A.f();
  B b = new B(2);
}
