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/source_class_static.dart
library;
import self as self;
import "dart:core" as core;
import "lib/sources.dart" as sou;

class C extends core::Object {
  static field sou::A2 publicField;
  synthetic constructor •() → void
    : super core::Object::•();
  static method publicMethod() → sou::A4;
  static get publicGetter() → sou::A6;
  static set publicSetter(sou::A8 _) → void;
}

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

class A2 extends core::Object {
}
class A4 extends core::Object {
}
class A6 extends core::Object {
}
class A8 extends core::Object {
}
