/** 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;
  }