Is it possible to generate chainable field mutators in IntelliJ IDEA? Preferably with a prefix other than set
to avoid breaking conventions. Let’s say withX
is the chainable companion to setX
.
For example, given this class stub
class SomeClass { private String foo; }
I can use Generate -> Setters to generate a public void setFoo(String foo)
method.
class SomeClass { private String foo; public void setFoo(String foo) { this.foo = foo; } }
Is there a similar way to generate a public SomeClass withFoo(String foo)
method like so?
class SomeClass { private String foo; public SomeClass withFoo(String foo) { this.foo = foo; return this; } }
Advertisement
Answer
You don’t actually need to install any third-party plugin. IDEA provides this functionality out-of-the-box. Here are the steps to achieve this:
- Select Code|Generate (or press Alt+Insert) then select “Setter”.
- In the opened window click on the button with three dots at the upper-right corner.
- Click on the green plus sign at the upper-left corner in order to create new setter template. Name it as you want.
- Put the following code snippet into the right input panel (actually this is the default “Builder” template with replaced “set” prefix with “with”):
#set($paramName = $helper.getParamName($field, $project)) public ## #if($field.modifierStatic) static void ## #else $classSignature ## #end with$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) { #if ($field.name == $paramName) #if (!$field.modifierStatic) this.## #else $classname.## #end #end $field.name = $paramName; #if(!$field.modifierStatic) return this; #end }
- Click “OK” and insert generated setter into you class.
You should do it only once. In the future you’ll only have to select your setter template to generate it.