// 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;

class A<T> {
  List<T> x;
  void set y(List<T> value) {}
}

test() {
  A<int> a_int = new A<int>();
  A<Object> a_object = new A<Object>();
  A<dynamic> a_dynamic = new A<dynamic>();
  var /*@ type=List<int*>* */ x_int =
      a_int. /*@target=A.x*/ x = /*@ typeArgs=int* */ [0];
  var /*@ type=List<int*>* */ y_int =
      a_int. /*@target=A.y*/ y = /*@ typeArgs=int* */ [0];
  var /*@ type=List<Object*>* */ x_object =
      a_object. /*@target=A.x*/ x = /*@ typeArgs=Object* */ [0];
  var /*@ type=List<Object*>* */ y_object =
      a_object. /*@target=A.y*/ y = /*@ typeArgs=Object* */ [0];
  var /*@ type=List<dynamic>* */ x_dynamic =
      a_dynamic. /*@target=A.x*/ x = /*@ typeArgs=dynamic */ [0];
  var /*@ type=List<dynamic>* */ y_dynamic =
      a_dynamic. /*@target=A.y*/ y = /*@ typeArgs=dynamic */ [0];
  var /*@ type=List<int*>* */ x_int_explicit = a_int. /*@target=A.x*/ x = <int>[0];
  var /*@ type=List<int*>* */ y_int_explicit = a_int. /*@target=A.y*/ y = <int>[0];
  var /*@ type=List<int*>* */ x_object_explicit =
      a_object. /*@target=A.x*/ x = <int>[0];
  var /*@ type=List<int*>* */ y_object_explicit =
      a_object. /*@target=A.y*/ y = <int>[0];
  var /*@ type=List<int*>* */ x_dynamic_explicit =
      a_dynamic. /*@target=A.x*/ x = <int>[0];
  var /*@ type=List<int*>* */ y_dynamic_explicit =
      a_dynamic. /*@target=A.y*/ y = <int>[0];
  List<int> x_int_downward = a_int. /*@target=A.x*/ x = /*@ typeArgs=int* */ [0];
  List<int> y_int_downward = a_int. /*@target=A.y*/ y = /*@ typeArgs=int* */ [0];
  List<int> x_object_downward =
      a_object. /*@target=A.x*/ x = /*@ typeArgs=Object* */ [0];
  List<int> y_object_downward =
      a_object. /*@target=A.y*/ y = /*@ typeArgs=Object* */ [0];
  List<int> x_dynamic_downward =
      a_dynamic. /*@target=A.x*/ x = /*@ typeArgs=dynamic */ [0];
  List<int> y_dynamic_downward =
      a_dynamic. /*@target=A.y*/ y = /*@ typeArgs=dynamic */ [0];
}

main() {}
