/*
 * 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 A variable declaration of one of the forms
 * T v;, T v = e; , const T v = e;, final T v; or final T v = e;
 * always induces an implicit getter function with signature
 *   T get v
 * whose invocation evaluates as described below.
 * @description For all types of forms checks that return type of getter is T
 * by expecting no static warnings.
 * @static-clean
 * @author ilya
 */

class A {
  const A();
}
  
//--library static variables
A? x1;
A x2 = new A();
const A x3 = const A();
//final A x4; //can not be
final A x5 = new A();

class C {
  //--instance variables
  A? y1;
  A y2 = new A();
  //const A y3 = const A(); //can not be
  final A? y4;
  final A y5 = new A();
  
  //--class static variables
  static A? z1;
  static A z2 = new A();
  static const A z3 = const A();
  //static final A z4; //can not be
  static final A z5 = new A();

  C() : y4 = new A();
}

main() {
  A? res;
  
  res = x1;
  res = x2;
  res = x3;
  res = x5;

  C c = new C();

  res = c.y1;
  res = c.y2;
  res = c.y4;
  res = c.y5;
  
  res = C.z1;
  res = C.z2;
  res = C.z3;
  res = C.z5;
}
