public List<String> findPaths() {
    if (!finder.isAnnotationPresent(UsingPaths.class)) {
      return new ArrayList<String>();
    }

    String searchIn = finder.getAnnotatedValue(UsingPaths.class, String.class, "searchIn");
    List<String> includes = finder.getAnnotatedValues(UsingPaths.class, String.class, "includes");
    List<String> excludes = finder.getAnnotatedValues(UsingPaths.class, String.class, "excludes");
    return new StoryFinder().findPaths(searchIn, includes, excludes);
  }
  @SuppressWarnings("unchecked")
  public Embedder buildEmbedder() {
    if (!finder.isAnnotationPresent(UsingEmbedder.class)) {
      return new Embedder();
    }

    boolean batch = control(finder, "batch");
    boolean skip = control(finder, "skip");
    boolean generateViewAfterStories = control(finder, "generateViewAfterStories");
    boolean ignoreFailureInStories = control(finder, "ignoreFailureInStories");
    boolean ignoreFailureInView = control(finder, "ignoreFailureInView");
    long storyTimeoutInSecs =
        finder.getAnnotatedValue(UsingEmbedder.class, Long.class, "storyTimeoutInSecs");
    int threads = finder.getAnnotatedValue(UsingEmbedder.class, Integer.class, "threads");
    Configuration configuration = buildConfiguration();
    List<CandidateSteps> candidateSteps = buildCandidateSteps(configuration);

    Embedder embedder =
        instanceOf(
            Embedder.class,
            (Class<? extends Embedder>)
                finder.getAnnotatedValue(UsingEmbedder.class, Class.class, "embedder"));
    embedder
        .embedderControls()
        .doBatch(batch)
        .doSkip(skip)
        .doGenerateViewAfterStories(generateViewAfterStories)
        .doIgnoreFailureInStories(ignoreFailureInStories)
        .doIgnoreFailureInView(ignoreFailureInView)
        .useStoryTimeoutInSecs(storyTimeoutInSecs)
        .useThreads(threads);
    embedder.useConfiguration(configuration);
    embedder.useCandidateSteps(candidateSteps);
    List<String> metaFilters =
        finder.getAnnotatedValues(UsingEmbedder.class, String.class, "metaFilters");
    if (!metaFilters.isEmpty()) {
      embedder.useMetaFilters(metaFilters);
    }
    return embedder;
  }
 @SuppressWarnings("unchecked")
 private <T> Class<T> elementImplementation(AnnotationFinder finder, String name) {
   return finder.getAnnotatedValue(Configure.class, Class.class, name);
 }
 private boolean control(AnnotationFinder finder, String name) {
   return finder.getAnnotatedValue(UsingEmbedder.class, Boolean.class, name);
 }