// 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 C<T> {
  T t;
  C(this.t);
}

test() {
  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);

  num y;
  C<int> c_int = new /*@ typeArgs=int* */ C(
      /*info:DOWN_CAST_IMPLICIT*/ y);

  // These hints are not reported because we resolve with a null error listener.
  C<num> c_num = new /*@ typeArgs=num* */ C(123);
  C<num> c_num2 = (new /*@ typeArgs=num* */ C(456)).. /*@target=C.t*/ t = 1.0;

  // Don't infer from explicit dynamic.
  var /*@ type=C<dynamic>* */ c_dynamic = new C<dynamic>(42);
  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
}

main() {}
