private void addContributeeActionsIfAny(
      final ObjectAdapter serviceAdapter, final List<ObjectAction> contributeeActionsToAppendTo) {
    final ObjectSpecification specification = serviceAdapter.getSpecification();
    if (specification == this) {
      return;
    }
    final List<ObjectAction> contributeeActions = Lists.newArrayList();
    final List<ObjectAction> serviceActions =
        specification.getObjectActions(
            ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
    for (final ObjectAction serviceAction : serviceActions) {
      if (isAlwaysHidden(serviceAction)) {
        continue;
      }
      final NotContributedFacet notContributed = serviceAction.getFacet(NotContributedFacet.class);
      if (notContributed != null && notContributed.toActions()) {
        continue;
      }
      if (!(serviceAction instanceof ObjectActionImpl)) {
        continue;
      }
      final ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;

      // see if qualifies by inspecting all parameters
      final int contributeeParam = contributeeParameterMatchOf(contributedAction);
      if (contributeeParam != -1) {
        ObjectActionContributee contributeeAction =
            new ObjectActionContributee(
                serviceAdapter, contributedAction, contributeeParam, this, objectMemberContext);
        facetProcessor.processMemberOrder(metadataProperties, contributeeAction);
        contributeeActions.add(contributeeAction);
      }
    }
    contributeeActionsToAppendTo.addAll(contributeeActions);
  }
  /** For benefit of <tt>IsisMetaModel</tt>. */
  public ValidationFailures initAndValidate() {
    if (LOG.isDebugEnabled()) {
      LOG.debug("initialising " + this);
    }

    // default subcomponents
    if (runtimeContext == null) {
      runtimeContext = new RuntimeContextNoRuntime();
    }
    injectInto(runtimeContext);
    injectInto(specificationTraverser);
    injectInto(metaModelValidator);

    // wire subcomponents into each other
    runtimeContext.injectInto(facetProcessor);

    // initialize subcomponents
    facetDecoratorSet.init();
    classSubstitutor.init();
    collectionTypeRegistry.init();
    specificationTraverser.init();
    programmingModel.init();
    facetProcessor.init();
    metaModelValidator.init();

    primeCache();

    ValidationFailures validationFailures = new ValidationFailures();
    metaModelValidator.validate(validationFailures);
    return validationFailures;
  }