Open walnutist opened 5 years ago
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:
1) 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.
2) Typing addDe
no 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.
3) 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
4) 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.
Currently FreeBuilder's supports on collection cannot support de-pluralizing the property names. e.g.
List<String> descendants();
would generateaddDescendants(String element)
in the builder class, but what really expected isaddDescendant(String element)
. Even better, there should be some kind of Immutables-like naming convention mapping support