@Override
  public List<ObjectAction> getObjectActions(
      final List<ActionType> types,
      final Contributed contributed,
      final Filter<ObjectAction> filter) {

    // update our list of actions if requesting for contributed actions
    // and they have not yet been added
    // the "contributed.isIncluded()" guard is required because we cannot do this too early;
    // there must be a session available
    if (contributed.isIncluded() && !contributeeActionsAdded) {
      synchronized (this.objectActions) {
        final List<ObjectAction> actions = Lists.newArrayList(this.objectActions);
        actions.addAll(createContributeeActions());
        sortCacheAndUpdateActions(actions);
        contributeeActionsAdded = true;
      }
    }

    final List<ObjectAction> actions = Lists.newArrayList();
    for (final ActionType type : types) {
      final Collection<ObjectAction> filterActions =
          Collections2.filter(objectActionsByType.get(type), Filters.asPredicate(filter));
      actions.addAll(filterActions);
    }
    return Lists.newArrayList(
        Iterables.filter(actions, ContributeeMember.Predicates.regularElse(contributed)));
  }
 @Programmatic
 @Deprecated
 @Override
 public <T> T firstMatch(final Class<T> cls, final Filter<T> filter) {
   return firstMatch(cls, Filters.asPredicate(filter));
 }
 @Programmatic
 @Deprecated
 @Override
 public <T> List<T> allMatches(final Class<T> cls, final Filter<? super T> filter, long... range) {
   return allMatches(cls, Filters.asPredicate(filter), range);
 }
 @Override
 public List<ObjectAssociation> getAssociations(
     Contributed contributed, final Filter<ObjectAssociation> filter) {
   final List<ObjectAssociation> allAssociations = getAssociations(contributed);
   return Lists.newArrayList(Iterables.filter(allAssociations, Filters.asPredicate(filter)));
 }