inferred / FreeBuilder

Automatic generation of the Builder pattern for Java
Apache License 2.0
838 stars 101 forks source link

Add support for singularizing plural method names #341

Open walnutist opened 5 years ago

walnutist commented 5 years ago

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

lbovet commented 3 years ago

Or generate addToDescendants(String element) Easier to realize and conceptually correct.

alicederyn commented 3 years ago

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.