// 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.

// 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();
}
