library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

part private_members_part.dart;
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
  field core::int? _#_Class#_privateField1;
  field core::bool _#_Class#_privateField1#isSet;
  field core::int? _#_Class#_privateField2;
  field core::bool _#_Class#_privateField2#isSet;
  field core::int? _#_Class#_privateFinalField1;
  field core::bool _#_Class#_privateFinalField1#isSet;
  field core::int? _#_Class#_privateFinalField2;
  field core::bool _#_Class#_privateFinalField2#isSet;
  synthetic constructor •() → self::_Class
    ;
  get _privateField1() → core::int;
  set _privateField1(core::int library org-dartlang-testcase:///private_members_part.dart::_privateField1#param) → void;
  get _privateField2() → core::int?;
  set _privateField2(core::int? library org-dartlang-testcase:///private_members_part.dart::_privateField2#param) → void;
  get _privateFinalField1() → core::int;
  set _privateFinalField1(core::int library org-dartlang-testcase:///private_members_part.dart::_privateFinalField1#param) → void;
  get _privateFinalField2() → core::int?;
  set _privateFinalField2(core::int? library org-dartlang-testcase:///private_members_part.dart::_privateFinalField2#param) → void;
}
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
  static field _privateField1 = self::_#_Extension|_privateField1;
  static field _privateField1 = self::_#_Extension|_privateField1#isSet;
  static get _privateField1 = get self::_Extension|_privateField1;
  static set _privateField1 = set self::_Extension|_privateField1;
  static field _privateField2 = self::_#_Extension|_privateField2;
  static field _privateField2 = self::_#_Extension|_privateField2#isSet;
  static get _privateField2 = get self::_Extension|_privateField2;
  static set _privateField2 = set self::_Extension|_privateField2;
  static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
  static field _privateFinalField1 = self::_#_Extension|_privateFinalField1#isSet;
  static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
  static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
  static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
  static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
  static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
  static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
}
static field core::int? _#_Extension|_privateField1 /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::bool _#_Extension|_privateField1#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::int? _#_Extension|_privateField2 /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::bool _#_Extension|_privateField2#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::int? _#_Extension|_privateFinalField1 /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::bool _#_Extension|_privateFinalField1#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::int? _#_Extension|_privateFinalField2 /* from org-dartlang-testcase:///private_members_part.dart */;
static field core::bool _#_Extension|_privateFinalField2#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
static method main() → dynamic
  ;
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int;
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int library org-dartlang-testcase:///private_members_part.dart::_Extension|_privateField1#param) → void;
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int?;
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? library org-dartlang-testcase:///private_members_part.dart::_Extension|_privateField2#param) → void;
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int;
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int library org-dartlang-testcase:///private_members_part.dart::_Extension|_privateFinalField1#param) → void;
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int?;
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? library org-dartlang-testcase:///private_members_part.dart::_Extension|_privateFinalField2#param) → void;
