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;
}
}
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:
#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
}
You should do it only once. In the future you'll only have to select your setter template to generate it.