#945 Rework the name generator
Rebuilds the name generator by replacing the existing NameGenerator
interface and stepwise replacing the DefaultNameGenerator
implementation class.
Most ideas stay the same, notable exceptions:
- The
Map<String, Integer>
name storages are replaced by aNameScope
abstraction, which is just a set of names with querying and adding functionality. - The interface has an added set of prefix names, to allow for creating one suffix name that works with all prefixes.
- The implementation explicitly assumes a two level scope structure (one central global scope and zero or more local scopes, where the local scopes can also use names from the global scope).
- The implementation makes sure that the global names never clash with any of the local names (by having a union of all local scope names).
Closes #945 (closed)