Add support for singularizing plural method names
Currently FreeBuilder's supports on collection cannot support de-pluralizing the property names. e.g. List<String> descendants(); would generate addDescendants(String element) in the builder class, but what really expected is addDescendant(String element). Even better, there should be some kind of Immutables-like naming convention mapping support
Or generate addToDescendants(String element)
Easier to realize and conceptually correct.
I considered this when first creating FreeBuilder, but decided against it for a few reasons, which in no particular order are:
- We could stop generating
addDescendants(descendant)without breaking any existing code, because we generate a varargs method with matching signature. Thus, this method can be thought of as just an optimization for the common case of adding a single element. - Typing
addDeno longer uniquely identifies a single method name, making it more annoying to autocomplete. Some singular/plural changes are especially annoying for this, as they aren't just adding an "s" to the end. - Google Protobuf (the inspiration for the project in many ways I'm deeply indebted to) doesn't have this feature, and nobody seemed to care
- I am very much not an expert in this field. Chances were really good I'd trip over landmines regarding i18n that didn't occur to me, and if I tried to maintain the plural/singular list myself, I would likely be doing nothing but updating it. I had no examples to copy for adding extensions to annotation processors, and wanted to focus on other features.
With that said, I have no objection to someone else writing hooks into FreeBuilder that would allow them to provide a third-party depluralization service that users can opt into somehow if 2 is not a concern for them.