ba2417fdc0
The informal spec for strong mode top level inference (https://github.com/dart-lang/sdk/pull/28218) says "If there are multiple overridden/implemented methods, and any two of them have non-equal types (declared or inferred) for a parameter position which is being inferred for the overriding method, it is an error." This CL fixes several SDK errors that arise from this rule. For example, the classes _Closure, Function, and Object contained members declared as follows: class _Closure implements Function { bool operator ==(other) ... } class Function { bool operator ==(Object other) ... } class Object { bool operator ==(other) ... } The type of Object's operator == was (dynamic) -> bool; the type of Function's operator == was (Object) -> bool; therefore the type of _Closure's operator == (which overrides both, since _Closure extends Object and implements Function) cannot be inferred and must be specified. A similar situation exists for _Double and _IntegerImplementation (both implement num, which declares operator == to have type (Object) -> bool), and _Uri (which implements Uri, which declares operator == to have type (Object) -> bool). This CL fixes the error by specifying the type explicitly in the classes _Closure, _Double, _IntegerImplementation, and _Uri. Change-Id: I91f7ceef8549399d438ba4be8c408493b3f338db Reviewed-on: https://dart-review.googlesource.com/28100 Reviewed-by: Vyacheslav Egorov <vegorov@google.com>