library;
//
// Problems in library:
//
// pkg/front_end/testcases/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
//  - 'List' is from 'dart:core'.
//  - 'int/*1*/' is from 'pkg/front_end/testcases/type_parameter_type_named_int.dart'.
//  - 'int/*2*/' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'List<int/*2*/>'.
//     list = value;
//            ^
//
import self as self;
import "dart:core" as core;

abstract class Foo<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo<self::Foo::T>
    : super core::Object::•()
    ;
  abstract get list() → core::List<self::Foo::T>;
  abstract method setList<T extends core::Object = dynamic>(core::List<self::Foo::setList::T> value) → void;
}
class Bar extends core::Object implements self::Foo<core::int> {
  field core::List<core::int> list = null;
  synthetic constructor •() → self::Bar
    : super core::Object::•()
    ;
  method setList<int extends core::Object = dynamic>(core::List<self::Bar::setList::int> value) → void {
    this.{self::Bar::list} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
 - 'List' is from 'dart:core'.
 - 'int/*1*/' is from 'pkg/front_end/testcases/type_parameter_type_named_int.dart'.
 - 'int/*2*/' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'List<int/*2*/>'.
    list = value;
           ^" in value as{TypeError} core::List<core::int>;
  }
}
