/**
   * @param contributeeParam - the parameter number which corresponds to the contributee, and so
   *     should be suppressed.
   */
  public ObjectActionContributee(
      final ObjectAdapter serviceAdapter,
      final ObjectActionImpl serviceAction,
      final int contributeeParam,
      final ObjectSpecification contributeeType,
      final ObjectMemberDependencies objectMemberDependencies) {
    super(serviceAction.getFacetedMethod(), objectMemberDependencies);

    this.serviceAdapter = serviceAdapter;
    this.serviceAction = serviceAction;
    this.contributeeType = contributeeType;
    this.contributeeParam = contributeeParam;

    // copy over facets from contributed to own.
    FacetUtil.copyFacets(serviceAction.getFacetedMethod(), facetHolder);

    // calculate the identifier
    final Identifier contributorIdentifier = serviceAction.getFacetedMethod().getIdentifier();
    final String memberName = contributorIdentifier.getMemberName();
    List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
    identifier =
        Identifier.actionIdentifier(
            getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames);
  }
  public ObjectSpecificationAbstract(
      final Class<?> introspectedClass,
      final String shortName,
      final SpecificationContext specificationContext,
      final ObjectMemberContext objectMemberContext) {

    this.correspondingClass = introspectedClass;
    this.fullName = introspectedClass.getName();
    this.shortName = shortName;

    this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
    this.identifier = Identifier.classIdentifier(introspectedClass);

    this.deploymentCategory = specificationContext.getDeploymentCategory();
    this.authenticationSessionProvider = specificationContext.getAuthenticationSessionProvider();
    this.servicesProvider = specificationContext.getServicesProvider();
    this.objectInstantiator = specificationContext.getObjectInstantiator();
    this.specificationLookup = specificationContext.getSpecificationLookup();
    this.facetProcessor = specificationContext.getFacetProcessor();

    this.objectMemberContext = objectMemberContext;
  }