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/export_class.dart
library;
import self as self;
import "./export_class_lib.dart" as exp;
additionalExports = (exp::A)


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

class A extends core::Object {
  static field core::int publicStaticField;
  field core::int publicInstanceField;
  constructor •() → void
    : super core::Object::•();
  constructor publicConstructor() → void
    : super core::Object::•();
  static factory publicFactory() → self::A;
  static method publicStaticMethod() → void;
  method publicInstanceMethod() → void;
}

