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

part issue48765_part1.dart;
part issue48765_part2.dart;
abstract class _A extends core::Object { // from org-dartlang-testcase:///issue48765_part1.dart
  synthetic constructor •() → self::_A
    ;
}
class _Ac extends core::Object implements self::_A { // from org-dartlang-testcase:///issue48765_part1.dart
  synthetic constructor •() → self::_Ac
    ;
}
abstract class _B extends core::Object { // from org-dartlang-testcase:///issue48765_part2.dart
  synthetic constructor •() → self::_B
    ;
}
class _Bc extends core::Object implements self::_B { // from org-dartlang-testcase:///issue48765_part2.dart
  synthetic constructor •() → self::_Bc
    ;
}
extension /* unnamed */ _extension#0 on self::_A { // from org-dartlang-testcase:///issue48765_part1.dart
  static field field = self::_extension#0|field;
  method method = self::_extension#0|method;
  method tearoff method = self::_extension#0|get#method;
}
extension /* unnamed */ _extension#1 on self::_B { // from org-dartlang-testcase:///issue48765_part2.dart
  static field field = self::_extension#1|field;
  method method = self::_extension#1|method;
  method tearoff method = self::_extension#1|get#method;
}
static field core::int _extension#0|field /* from org-dartlang-testcase:///issue48765_part1.dart */;
static field core::int _extension#1|field /* from org-dartlang-testcase:///issue48765_part2.dart */;
static method main() → void
  ;
static extension-member method /* from org-dartlang-testcase:///issue48765_part1.dart */ _extension#0|method(lowered final self::_A #this) → void
  ;
static extension-member method /* from org-dartlang-testcase:///issue48765_part1.dart */ _extension#0|get#method(lowered final self::_A #this) → () → void
  return () → void => self::_extension#0|method(#this);
static extension-member method /* from org-dartlang-testcase:///issue48765_part2.dart */ _extension#1|method(lowered final self::_B #this) → void
  ;
static extension-member method /* from org-dartlang-testcase:///issue48765_part2.dart */ _extension#1|get#method(lowered final self::_B #this) → () → void
  return () → void => self::_extension#1|method(#this);
