protected <T, V extends T> T instanceOf(Class<T> type, Class<V> ofClass) {
   try {
     return ofClass.newInstance();
   } catch (Exception e) {
     annotationMonitor.elementCreationFailed(ofClass, e);
     throw new InstantiationFailed(ofClass, type, e);
   }
 }
 protected Object injectEmbedder(Embedder embedder, Class<?> annotatedClass) {
   try {
     Object instance = annotatedClass.newInstance();
     if (instance instanceof Embeddable) {
       Embeddable embeddable = (Embeddable) instance;
       embeddable.useEmbedder(embedder);
     }
     if (instance instanceof ConfigurableEmbedder) {
       ConfigurableEmbedder configurableEmbedder = (ConfigurableEmbedder) instance;
       configurableEmbedder.useConfiguration(embedder.configuration());
       configurableEmbedder.addSteps(embedder.candidateSteps());
     }
     return instance;
   } catch (Exception e) {
     annotationMonitor.elementCreationFailed(annotatedClass, e);
     throw new InstantiationFailed(annotatedClass, e);
   }
 }