// Copyright (c) 2017, 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. class Foo { method(x, [y, z]) { return "string"; } } abstract class External { String externalMethod(int x, [int y, int z]); void listen(Listener listener); } external External createExternal(); abstract class Listener { void event(String input, [int x, int y]); } class TestListener extends Listener { void event(input, [x, y]) {} } class ExtendedListener extends Listener { void event(input, [x, y, z]) {} } class InvalidListener { void event(input, [x]) {} } main() { var foo = new Foo(); var string1 = foo.method(1); var string2 = foo.method(1, 2); var string3 = foo.method(1, 2, 3); var extern = createExternal(); var string4 = extern.externalMethod(1); var string5 = extern.externalMethod(1, 2); var string6 = extern.externalMethod(1, 2, 3); extern.listen(new TestListener()); extern.listen(new ExtendedListener()); extern.listen(new InvalidListener()); var nothing1 = foo.method(); var nothing2 = foo.method(1, 2, 3, 4); var nothing3 = extern.externalMethod(); var nothing4 = extern.externalMethod(1, 2, 3, 4); }