library test /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
//                                                                    ^
//
import self as self;
import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
import "dart:core" as core;

import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";

class C extends inf::B {
  synthetic constructor •() → self::C
    : super inf::B::•()
    ;
  get x() → core::int
    return throw "";
}
class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get x() → core::int
    return 0;
}
static method foo() → dynamic {
  core::int y = new self::C::•().{self::C::x}{core::int};
  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
                                                                   ^" in new self::C::•().{self::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
}
static method main() → dynamic {
  self::foo();
}

library /*isNonNullableByDefault*/;
import self as inf;
import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;

import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";

class B extends self::A {
  synthetic constructor •() → inf::B
    : super self::A::•()
    ;
}
static method main() → dynamic {}
