library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  field self::B b = throw "";
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  get c() → self::C?
    return null;
  set c(self::C? value) → void {}
}
class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
}
static field self::A a = new self::A::•();
static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
static method main() → dynamic {}
