// Formatted problems:
//
// pkg/front_end/testcases/rasta/super.dart:26:8: Warning: Can't declare a member that conflicts with an inherited one.
//   void n() {}
//        ^
// pkg/front_end/testcases/rasta/super.dart:27:7: Context: This is the inherited member.
//   set n(_) {}
//       ^

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

class A extends core::Object {
  field dynamic a;
  field dynamic b;
  field dynamic c;
  field dynamic d;
  final field dynamic f;
  synthetic constructor •() → self::A
    ;
  get e() → dynamic
    ;
  set g(dynamic _) → dynamic
    ;
  get h() → dynamic
    ;
  set h(dynamic _) → dynamic
    ;
  get i() → dynamic
    ;
  operator [](dynamic _) → dynamic
    ;
  operator []=(dynamic a, dynamic b) → dynamic
    ;
  operator ~() → dynamic
    ;
  operator unary-() → dynamic
    ;
  operator ==(dynamic other) → dynamic
    ;
  method m() → void
    ;
  method n() → void
    ;
  set n(dynamic _) → dynamic
    ;
}
class B extends self::A {
  final field dynamic d;
  synthetic constructor •() → self::B
    ;
  get b() → dynamic
    ;
  set c(dynamic x) → dynamic
    ;
  set i(dynamic x) → dynamic
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C
    ;
  method test() → dynamic
    ;
}
static method use(dynamic x) → dynamic
  ;
static method main() → dynamic
  ;
