interface I {
  boolean <warning descr="'equals()' should take 'Object' as its argument">equals</warning>(I i);
}
class A {

  public boolean <warning descr="'equals()' should take 'Object' as its argument">equals</warning>(A a) {
    return false;
  }
}
class B extends A {

  @Override
  public boolean equals(A a) {
    return super.equals(a);
  }
}
class C {
  public boolean equals(C c) {
    return false;
  }

  public boolean equals(Object o) {
    return true;
  }
}
class D implements I {
  @Override
  public boolean equals(I i) {
    return false;
  }
}
class E {
  boolean <warning descr="'equals()' should take 'Object' as its argument">equals</warning>(E e) {
    return false;
  }
}
abstract class Condition {
  static Condition equals(String value) {
    return new Condition() {
      // some implementation here
    };
  }

  // more abstract methods
}