// Copyright (c) 2012, 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.

// Checks that an overriding method has compatible parameters.

abstract class I {
  m({a, b});
}

abstract class J extends I { }

abstract class K extends J {
  m({c, d});  /// 00: compile-time error
}

class C implements I {
  m({a, b}) {
    print("$a $b");
  }
}

class D
    extends C  /// 01: compile-time error
    implements I  /// 02: compile-time error
    implements J  /// 03: compile-time error
{
  m({c, d}) {
    print("$c $d");
  }
}


int main() {
  var c = new C();
  c.m(a: "hello", b: "world");
  var d = new D();
  d.m(c: "hello", d: "world");
  print("${c is I} ${d is I} ${d is I} ${d is J}");
}

