library test;
import self as self;
import "dart:core" as core;

abstract class I<E extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
}
abstract class A<E extends core::Object = dynamic> extends core::Object implements self::I<self::A::E> {
  const constructor •() → void
    : super core::Object::•()
    ;
  abstract method m(dynamic a, (dynamic, self::A::E) → core::String f) → core::String;
}
abstract class M extends core::Object {
  final field core::int y = 0;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B<E extends core::Object = dynamic> extends self::A<self::B::E> implements self::M {
  const constructor •() → void
    : super self::A::•()
    ;
  get y() → core::int
    return 0;
  method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
}
static method foo() → dynamic {
  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
      . /*@target=B::m*/ m(null, null);
                         ^" in let final core::String #t2 = new self::B::•<dynamic>().{self::B::m}(null, null) in null;
  core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
}
static method main() → dynamic {}
