// Formatted problems:
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: 'n' is already declared in this scope.
//   set n(_) {}
//       ^
// pkg/front_end/testcases/rasta/super.dart:26:8: Context: Previous declaration of 'n'.
//   void n() {}
//        ^
//
// pkg/front_end/testcases/rasta/super.dart:26:8: Error: 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(_) {}
//       ^
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: Can't declare a member that conflicts with an inherited one.
//   set n(_) {}
//       ^
// pkg/front_end/testcases/rasta/super.dart:26:8: Context: This is the inherited member.
//   void 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
  ;
