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

class ClassWithoutConstConstructor extends core::Object {
  static const field core::int staticConstField = 42;
  static final field core::int staticFinalField;
  static field core::int staticField;
  final field core::int instanceFinalField;
  field core::int instanceField;
  constructor •([core::int p]) → void
    : super core::Object::•();
}
class ClassWithConstConstructor extends core::Object {
  static const field core::int staticConstField = 42;
  static final field core::int staticFinalField;
  static field core::int staticField;
  final field core::int instanceFinalField = 42;
  const constructor •([core::int a = 42, dynamic b = sou::libConst1]) → void
    : super core::Object::•();
}
static const field core::int constField = 42;
static final field core::int finalField;
static field core::int regularField;

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

static const field core::int libConst1 = 1;

