// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

// Test static warnings for method overrides.

class A {
  method1() => null; //# 01: ok
  method2(a) => null; //# 02: ok
  method3(a, b, c, d) => null; //# 03: ok
  method4() => null; //# 04: compile-time error
  method6(a, b, c) => null; //# 06: compile-time error
  method7([a]) => null; //# 07: ok
  method8([a, b]) => null; //# 08: ok
  method9([a, b, c]) => null; //# 09: ok
  method10([a]) => null; //# 10: ok
  method11(a) => null; //# 11: compile-time error
  method12(a, [b]) => null; //# 12: compile-time error
  method13(a, [b]) => null; //# 13: compile-time error
  method14(a, b, [c, d, e]) => null; //# 14: compile-time error
  method15({a}) => null; //# 15: ok
  method16({a, b}) => null; //# 16: ok
  method17({a, b, c}) => null; //# 17: ok
  method18(d, {a, b, c}) => null; //# 18: ok
  method19({a}) => null; //# 19: compile-time error
  method20({a, b}) => null; //# 20: compile-time error
  method21({a, b, c, d}) => null; //# 21: compile-time error

  method22(int a) => null; //# 22: ok
  method23(int a) => null; //# 23: ok
  void method24() {} //# 24: ok
  method25() => null; //# 25: ok
  void method26() {} //# 26: ok
  int method27() => null; //# 27: compile-time error
  method28(int a) => null; //# 28: compile-time error
  method29(int a) => null; //# 29: compile-time error
  method30(int a) => null; //# 30: compile-time error
  method34(int a) => null; //# 34: ok
  method35(int a) => null; //# 35: ok
  method36(int a) => null; //# 36: compile-time error
  method37(num a) => null; //# 37: ok
  method38(covariant num a) => null; //# 38: ok
  method39(num a) => null; //# 39: compile-time error
}

class B extends A {
  method28(num a) => null; //# 28: continued
  method29(a) => null; //# 29: continued
  method34(num a) => null; //# 34: continued
  method35(dynamic a) => null; //# 35: continued
  method36(dynamic a) => null; //# 36: continued
  method37(covariant dynamic a) => null; //# 37: continued
  method38(dynamic a) => null; //# 38: continued
  method39(covariant dynamic a) => null; //# 39: continued
}

abstract class I {
  method5() => null; //# 05: compile-time error
  method31(int a) => null; //# 31: compile-time error
  method32(int a) => null; //# 32: compile-time error
  method33(num a) => null; //# 33: compile-time error
}

abstract class J {
  method31(num a) => null; //# 31: continued
  method32(double a) => null; //# 32: continued
  method33(int a) => null; //# 33: continued
}

class Class extends B implements I, J {
  method1() => null; //# 01: continued
  method2(b) => null; //# 02: continued
  method3(b, a, d, c) => null; //# 03: continued
  method4(a) => null; //# 04: continued
  method5(a) => null; //# 05: continued
  method6(a, b, c, d) => null; //# 06: continued
  method7([a]) => null; //# 07: continued
  method8([b, a]) => null; //# 08: continued
  method9([b, d, a, c]) => null; //# 09: continued
  method10([a]) => null; //# 10: continued
  method11() => null; //# 11: continued
  method12(a) => null; //# 12: continued
  method13([a]) => null; //# 13: continued
  method14([a, b, c, d]) => null; //# 14: continued
  method15({a}) => null; //# 15: continued
  method16({b, a}) => null; //# 16: continued
  method17({b, c, a, d}) => null; //# 17: continued
  method18(e, {b, c, a, d}) => null; //# 18: continued
  method19() => null; //# 19: continued
  method20({b}) => null; //# 20: continued
  method21({a, e, d, c}) => null; //# 21: continued

  method22(int a) => null; //# 22: continued
  method23(num a) => null; //# 23: continued
  method24() => null; //# 24: continued
  void method25() {} //# 25: continued
  int method26() => null; //# 26: continued
  void method27() {} //# 27: continued
  method28(double a) => null; //# 28: continued
  method29(String a) => null; //# 29: continued
  method30(String a) => null; //# 30: continued
  method36(int a) => null; //# 36: continued
  method37(int a) => null; //# 37: continued
  method38(int a) => null; //# 38: continued
  method39(String a) => null; //# 39: continued
}

class SubClass extends Class {
  method31(double a) => null; //# 31: continued
  method32(String a) => null; //# 32: continued
  method33(double a) => null; //# 33: continued
}

main() {
  new SubClass();
}
