class ReflectionsTypeScanner implements TypeScanner {

    @Override
    public Collection<Class<? extends Saga>> scanForSagas() {
        Set<Class<? extends Saga>> sagaTypes = reflections.getSubTypesOf(Saga.class);

        // separate searches in case saga-lib is in embedded jar when performing directory scanning
        Set<Class<? extends AbstractSaga>> abstractSagaTypes = reflections.getSubTypesOf(AbstractSaga.class);
        Set<Class<? extends AbstractSingleEventSaga>> singleEventSagaTypes = reflections.getSubTypesOf(AbstractSingleEventSaga.class);

        Set<Class<? extends Saga>> foundTypes = Sets.union(sagaTypes, abstractSagaTypes);
        Set<Class<? extends Saga>> mergedSet = Sets.union(foundTypes, copy(singleEventSagaTypes));

        return removeAbstractTypes(mergedSet);
    }

    public  ReflectionsTypeScanner();
    public  ReflectionsTypeScanner(final Reflections reflections);

}