@Contract(pure = true)
  public static @Nullable TypeMismatch checkTypes(@NotNull PsiType leftType,
                                                  @NotNull PsiType rightType,
                                                  @NotNull LookForMutualSubclass lookForMutualSubclass) {
    // Compilation error
    if (LambdaUtil.notInferredType(leftType) || LambdaUtil.notInferredType(rightType)) return null;
    if (TypeUtils.areConvertible(leftType, rightType) || TypeUtils.mayBeEqualByContract(leftType, rightType)) {
      return deepCheck(leftType, rightType, lookForMutualSubclass);
    }
    return new TypeMismatch(leftType, rightType, Convertible.NOT_CONVERTIBLE);
  }
@Contract(pure = true)
  public static @Nullable TypeMismatch checkTypes(@NotNull PsiType leftType,
                                                  @NotNull PsiType rightType,
                                                  @NotNull LookForMutualSubclass lookForMutualSubclass)