| // Copyright (c) 2018, 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. |
| |
| // noSuchMethod does not overwrite actual implementations, so if an |
| // implemetation of a member exists that doesn't fulfill the interface it's |
| // an error. |
| // On the other hand, if no implementation exists, |
| // noSuchMethod will take its place and everything is okay. |
| |
| class B { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 02: compile-time error |
| ) => |
| x; |
| } |
| |
| class C extends B { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 01: compile-time error |
| ); |
| bar(); |
| |
| noSuchMethod(i) { |
| print("No such method!"); |
| return 42; |
| } |
| } |
| |
| abstract class D { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 03: ok |
| ); |
| } |
| |
| abstract class E { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 04: ok |
| ); |
| } |
| |
| class F extends D implements E { |
| noSuchMethod(i) { |
| print("No such method!"); |
| return 42; |
| } |
| } |
| |
| class G { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 05: ok |
| ) => |
| x; |
| } |
| |
| class H { |
| foo(int x, // force formatter to not combine these lines. |
| {int? y} //# 06: compile-time error |
| ) => |
| x; |
| } |
| |
| class I extends G implements H { |
| noSuchMethod(i) { |
| print("No such method: $i!"); |
| return 42; |
| } |
| } |
| |
| main() { |
| var c = new C(); |
| c.foo(123); |
| c.bar(); |
| var f = new F(); |
| f.foo(42); |
| var i = new I(); |
| i.foo(42); |
| } |