In the current design, each mutation object should lead to at least one mutation being applied. It's up to the mutation visitor to ensure that it doesn't create mutation objects that would lead to 0 mutations being applied. Now that we have optimisations this becomes tricky to ensure, and it would simplify the code base to have each mutation class check all its preconditions, and to have mutations that lead to no effect simply be ignored.
In the current design, each mutation object should lead to at least one mutation being applied. It's up to the mutation visitor to ensure that it doesn't create mutation objects that would lead to 0 mutations being applied. Now that we have optimisations this becomes tricky to ensure, and it would simplify the code base to have each mutation class check all its preconditions, and to have mutations that lead to no effect simply be ignored.