// 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
/// ;
/// @description Checks that various class definitions that are valid according 
/// to 'metadata abstract? class mixinApplicationClass' syntax do not cause any 
/// errors and can be instantiated.
/// @author ngl@unipro.ru


@A() abstract class I1<T> = A1 with B1;
abstract class J1<T> = A1 with B1;
@B() class X1<T> = B1 with A1;
class Y1<T> = B1 with A1;

@A() abstract class I2 = A1 with B1;
abstract class J2 = A1 with B1;
@B() class X2 = A1 with B1;
class Y2 = A1 with B1;

@B() class X3<T> = B1 with A1 implements A1;
class Y3<T> = B1 with A1 implements A1;

abstract class A1 {}
class B1 {}

@B.fromInt(1) class A {
  const A();
}

@B.fromInt(1) class B extends A {
  const B();
  const B.fromInt(int a);
}

main() {
  X1 x1 = new X1();
  Y1 y1 = new Y1();
  
  X2 x2 = new X2();
  Y2 y2 = new Y2();
  
  X3 x3 = new X3();
  Y3 y3 = new Y3();
}
