Eliminate MutationGenerator and other leaky abstractions #2114
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is very much work in progress. Please do not review it yet.
Remove
MutationGenerator: leaky abstraction with negative utilityMutationGeneratorwas intended as a convenience wrapper to orchestrate trace acquisition, mutation generation, and event dispatch. However, in practice:FileMutationGeneratorand relays calls toTraceProviderandEventDispatcher.TraceProvider,FileMutationGenerator,Mutator[],NodeIgnorer[], etc.), and understand when events are dispatched.Because of this, it is a leaky abstraction in the Joel Spolsky sense: it purports to hide complexity but forces the caller to understand (and manually construct) all internal components anyway. The result is increased maintenance burden with no meaningful simplification of usage.
Removing this class simplifies the architecture: consumers can directly wire together
TraceProvider → FileMutationGenerator, which is exactly what this class was doing anyway, but now without the misleading promise of abstraction.