// 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.

/// @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));
}
