library test;
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() → dynamic
    return null;
}
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::•().x;
  core::String z = new self::C::•().x;
}
static method main() → dynamic {
  self::foo();
}

library;
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 {}
