private void generateDataClassEqualsIfNeeded(@NotNull List<PropertyDescriptor> properties) {
   FunctionDescriptor function =
       getDeclaredMember("equals", builtIns.getBoolean(), builtIns.getAny());
   if (function != null && isTrivial(function)) {
     generateEqualsMethod(function, properties);
   }
 }
  /** @return true if the member is an inherited implementation of a method from Any */
  private boolean isTrivial(@NotNull FunctionDescriptor function) {
    if (function.getKind() == CallableMemberDescriptor.Kind.DECLARATION) {
      return false;
    }

    for (CallableDescriptor overridden : OverrideResolver.getOverriddenDeclarations(function)) {
      if (overridden instanceof CallableMemberDescriptor
          && ((CallableMemberDescriptor) overridden).getKind()
              == CallableMemberDescriptor.Kind.DECLARATION
          && !overridden.getContainingDeclaration().equals(builtIns.getAny())) {
        return false;
      }
    }

    return true;
  }