This file was autogenerated from running the shaker test suite.
To update this file, either copy the output from a failing test or run
pkg/front_end/tool/fasta testing shaker -DupdateExpectations=true
----- pkg/front_end/testcases/shaker/transitive_class_constructor.dart
library;
import self as self;
import "./transitive_class_constructor_lib.dart" as tra;

class C extends tra::B {
  constructor •() → void
    : super tra::B::•();
  constructor named() → void
    : super tra::B::publicConstructor(null);
}

----- external pkg/front_end/testcases/shaker/transitive_class_constructor_lib.dart
library;
import self as self;
import "dart:core" as core;

class A1 extends core::Object {
}
class A3 extends core::Object {
}
class A4 extends core::Object {
}
class S1 extends core::Object {
  constructor •() → void
    : super core::Object::•();
  constructor namedConstructor1() → void
    : super core::Object::•();
}
class S2 extends self::S1 {
  constructor •() → void
    : super self::S1::•();
  constructor namedConstructor1() → void
    : super self::S1::namedConstructor1();
}
class B extends self::S2 {
  field self::A1 publicField;
  constructor •() → void
    : super self::S2::•();
  constructor publicConstructor(self::A3 a, [self::A4 b]) → void
    : super self::S2::namedConstructor1();
}

