class DefaultStrategyFinder implements StrategyFinder {

    @Override
    public Collection<ResolveStrategy> find(final LookupContext context) {
        Collection<ResolveStrategy> strategies = new ArrayList<>();

        // timeout is special, saga id is known resulting in a simpler strategy without
        // having to read instance keys or searching by instance key in the state storage.
        if (context.message() instanceof Timeout) {
            strategies.add(new TimeoutResolveStrategy(typesForMessageMapper, instanceFactory, stateStorage));
        } else {
            strategies.addAll(checkAnnotatedMethodTypes(context));
        }

        return strategies;
    }

    @Inject public  DefaultStrategyFinder(
            final TypesForMessageMapper typesForMessageMapper,
            final SagaInstanceFactory instanceFactory,
            final KeyExtractor keyExtractor,
            final StateStorage stateStorage);

}