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

// @dart = 2.9

/// @assertion The extension type parameter can also occur as a parameter type
/// for the method.
///
///   Example:
///
///   extension TypedEquals<T> {
///     bool equals(T value) => this == value;
///   }
///
/// Using such an extension as:
///
///   Object o = ...;
///   String s = ...;
///   print(s.equals(o));  // Compile-time type error.
///
/// will fail. While we could make it work by inferring [T] as [Object], we
/// don't. We infer [T] only based on the receiver type, and therefore [T] is
/// [String], and [o] is not a valid argument (at least not when we remove
/// implicit downcasts).
/// @description Check that compile time error is not thrown when method type
/// parameter is OK.
/// @author iarkh@unipro.ru



import "../../Utils/expect.dart";

Object getObject() => new Object();
String getString() => "OK";

extension TypedEquals<T> on T {
  bool equals(T value) => this == value;
}

main() {
  String s = getString();
  Object o = getObject();

  Expect.isFalse(o.equals(s));
}
