library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:23: Error: The parameter 'i' of the method 'Class.method2' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'Super.method2'.
// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
//   void method2(String i);
//                       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:8: Context: This is the overridden method ('method2').
//   void method2(num n) {}
//        ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:23: Error: The parameter 'i' of the method 'Class.method2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.method2'.
// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
//   void method2(String i);
//                       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:16:8: Context: This is the overridden method ('method2').
//   void method2(covariant int i) {}
//        ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:25:20: Error: The parameter 'i' of the method 'Class.method3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.method3'.
// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
//   void method3(int i);
//                    ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:8:8: Context: This is the overridden method ('method3').
//   void method3(num n) {}
//        ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:22:7: Error: The implementation of 'method2' in the non-abstract class 'Class' does not conform to its interface.
// class Class extends Super implements Interface {
//       ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:20: Context: The parameter 'n' of the method 'Super.method2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.method2'.
// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
//   void method2(num n) {}
//                    ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:8: Context: This is the overridden method ('method2').
//   void method2(String i);
//        ^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  synthetic constructor •() → self::Super
    ;
  method method1(core::num n) → void
    ;
  method method2(core::num n) → void
    ;
  method method3(core::num n) → void
    ;
  method method4(covariant core::num i) → void
    ;
  method method5(covariant core::int i) → void
    ;
}
class Interface extends core::Object {
  synthetic constructor •() → self::Interface
    ;
  method method1(covariant core::int i) → void
    ;
  method method2(covariant core::int i) → void
    ;
  method method4(core::int i) → void
    ;
  method method5(core::int i) → void
    ;
}
class Class extends self::Super implements self::Interface {
  synthetic constructor •() → self::Class
    ;
  forwarding-stub forwarding-semi-stub method method1(covariant core::int i) → void
    return super.{self::Super::method1}(i);
  forwarding-stub forwarding-semi-stub method method2(covariant core::String i) → void
    return super.{self::Super::method2}(i);
  abstract method method3(core::int i) → void;
  abstract method method4(covariant core::int i) → void;
  abstract method method5(covariant core::num n) → void;
}
static method main() → dynamic
  ;
