// Copyright (c) 2017, 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.

/*@testedFeatures=inference*/
library test;

int getInt() => 0;
num getNum() => 0;
double getDouble() => 0.0;

class Test1 {
  int prop;

  static void test(Test1 t) {
    var /*@type=int*/ v1 = t. /*@target=Test1::prop*/ prop = getInt();
    var /*@type=int*/ v4 = t. /*@target=Test1::prop*/ prop ??= getInt();
    var /*@type=int*/ v7 = t. /*@target=Test1::prop*/ prop += getInt();
    var /*@type=int*/ v10 = ++t. /*@target=Test1::prop*/ prop;
    var /*@type=int*/ v11 = t. /*@target=Test1::prop*/ prop++;
  }
}

class Test2 {
  num prop;

  static void test(Test2 t) {
    var /*@type=int*/ v1 = t. /*@target=Test2::prop*/ prop = getInt();
    var /*@type=num*/ v2 = t. /*@target=Test2::prop*/ prop = getNum();
    var /*@type=double*/ v3 = t. /*@target=Test2::prop*/ prop = getDouble();
    var /*@type=num*/ v4 = t. /*@target=Test2::prop*/ prop ??= getInt();
    var /*@type=num*/ v5 = t. /*@target=Test2::prop*/ prop ??= getNum();
    var /*@type=num*/ v6 = t. /*@target=Test2::prop*/ prop ??= getDouble();
    var /*@type=num*/ v7 = t. /*@target=Test2::prop*/ prop += getInt();
    var /*@type=num*/ v8 = t. /*@target=Test2::prop*/ prop += getNum();
    var /*@type=num*/ v9 = t. /*@target=Test2::prop*/ prop += getDouble();
    var /*@type=num*/ v10 = ++t. /*@target=Test2::prop*/ prop;
    var /*@type=num*/ v11 = t. /*@target=Test2::prop*/ prop++;
  }
}

class Test3 {
  double prop;

  static void test3(Test3 t) {
    var /*@type=double*/ v3 = t. /*@target=Test3::prop*/ prop = getDouble();
    var /*@type=double*/ v6 = t. /*@target=Test3::prop*/ prop ??= getDouble();
    var /*@type=double*/ v7 = t. /*@target=Test3::prop*/ prop += getInt();
    var /*@type=double*/ v8 = t. /*@target=Test3::prop*/ prop += getNum();
    var /*@type=double*/ v9 = t. /*@target=Test3::prop*/ prop += getDouble();
    var /*@type=double*/ v10 = ++t. /*@target=Test3::prop*/ prop;
    var /*@type=double*/ v11 = t. /*@target=Test3::prop*/ prop++;
  }
}

main() {}
