private <T> NodeInitializer extractNodeInitializer(NodeInitializerContext<T> context) {
   ModelSchema<T> schema = schemaStore.getSchema(context.getModelType());
   for (NodeInitializerExtractionStrategy extractor : allStrategies) {
     NodeInitializer nodeInitializer = extractor.extractNodeInitializer(schema, context);
     if (nodeInitializer != null) {
       return nodeInitializer;
     }
   }
   throw canNotConstructTypeException(context);
 }
 private ModelTypeInitializationException canNotConstructTypeException(
     NodeInitializerContext<?> context) {
   ImmutableSortedSet.Builder<ModelType<?>> constructibleTypes =
       ImmutableSortedSet.orderedBy(ModelTypes.displayOrder());
   for (NodeInitializerExtractionStrategy extractor : additionalStrategies) {
     for (ModelType<?> constructibleType : extractor.supportedTypes()) {
       if (context.getConstraints().isSatisfiedBy(constructibleType)) {
         constructibleTypes.add(constructibleType);
       }
     }
   }
   return new ModelTypeInitializationException(
       context, schemaStore, ScalarTypes.TYPES, constructibleTypes.build());
 }