// 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() {}
