library;
import self as self;
import "dart:core" as core;

part field_promotion_name_conflicts_part.dart;
abstract class C extends core::Object {
  final field core::int? _f1;
  final field core::int? _f2;
  final field core::int? _f3;
  final field core::int? _f4;
  final field core::int? _f5;
  final field core::int? _f6;
  final field core::int? _f7;
  final field core::int? _f8;
  final field core::int? _f9;
  final field core::int? _f10;
  final field core::int? _f11;
  final field core::int? _f12;
  final field core::int? _f13;
  constructor •(core::int? i) → self::C
    ;
}
abstract class D extends core::Object {
  final field core::int? _f1;
  field core::int? _f2;
  static field core::int? _f6;
  constructor •(core::int? i) → self::D
    ;
  abstract get _f3() → core::int?;
  get _f4() → core::int?
    ;
  set _f5(core::int? i) → void
    ;
  static get _f7() → core::int?
    ;
}
abstract class M extends core::Object /*isMixinDeclaration*/  {
  field core::int? _f12;
  get _f13() → core::int?
    ;
}
abstract class E extends core::Object { // from org-dartlang-testcase:///field_promotion_name_conflicts_part.dart
  synthetic constructor •() → self::E
    ;
  get _f11() → core::int?
    ;
}
extension /* unnamed */ _extension#0 on core::String {
  get _f10 = self::_extension#0|get#_f10;
}
static field core::int? _f8;
static get _f9() → core::int?
  ;
static extension-member method _extension#0|get#_f10(lowered final core::String #this) → core::int?
  ;
static method acceptsInt(core::int x) → void
  ;
static method testFinalField(self::C c) → void
  ;
static method testNonFinalField(self::C c) → void
  ;
static method testAbstractGetter(self::C c) → void
  ;
static method testConcreteGetter(self::C c) → void
  ;
static method testSetter(self::C c) → void
  ;
static method testStaticField(self::C c) → void
  ;
static method testStaticGetter(self::C c) → void
  ;
static method testTopLevelField(self::C c) → void
  ;
static method testTopLevelGetter(self::C c) → void
  ;
static method testExtensionGetter(self::C c) → void
  ;
static method testGetterInPart(self::C c) → void
  ;
static method testFieldInMixin(self::C c) → void
  ;
static method testGetterInMixin(self::C c) → void
  ;
static method main() → dynamic
  ;
