JetBrains/intellij-community · warning · ConfigurationException
replace.constructor.builder.error.invalid.setter.name
Error message
replace.constructor.builder.error.invalid.setter.name
What it means
Thrown by ReplaceConstructorWithBuilderDialog.canRun() (ReplaceConstructorWithBuilderDialog.java:501) when any parameters-table row has a setter name that fails PsiNameHelper.isIdentifier. The refactoring generates setXxx(...) methods on the builder class; the user-editable setter-name column must hold a legal method identifier. Checked per-row, right after the field-name check for the same row.
Source
Thrown at java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java:501
UIUtil.setEnabled(myCreateNewPanel, createNew, true);
myExistentClassTF.setEnabled(!createNew);
}
@Override
public JComponent getPreferredFocusedComponent() {
return myNewClassName;
}
@Override
protected void canRun() throws ConfigurationException {
final PsiNameHelper nameHelper = PsiNameHelper.getInstance(myProject);
for (ParameterData parameterData : myParametersMap.values()) {
if (!nameHelper.isIdentifier(parameterData.getFieldName())) {
throw new ConfigurationException(
JavaRefactoringBundle.message("replace.constructor.builder.error.invalid.field.name", parameterData.getFieldName()));
}
if (!nameHelper.isIdentifier(parameterData.getSetterName())) {
throw new ConfigurationException(
JavaRefactoringBundle.message("replace.constructor.builder.error.invalid.setter.name", parameterData.getSetterName()));
}
}
if (myCreateBuilderClassRadioButton.isSelected()) {
final String className = myNewClassName.getText().trim();
if (className.isEmpty()) throw new ConfigurationException(null);
if (!nameHelper.isQualifiedName(className)) {
throw new ConfigurationException(
JavaRefactoringBundle.message("replace.constructor.builder.error.invalid.builder.class.name", className));
}
final String packageName = myPackageTextField.getText().trim();
if (!packageName.isEmpty() && !nameHelper.isQualifiedName(packageName)) {
throw new ConfigurationException(
JavaRefactoringBundle.message("replace.constructor.builder.error.invalid.builder.package.name", packageName));
}
}
else {
final String qualifiedName = myExistentClassTF.getText().trim();View on GitHub (pinned to be881553f2)
Solutions
- Fix the Setter Name cell named in the error message to a valid Java identifier.
- Keep the conventional 'set' + capitalized-parameter shape unless you have a reason not to.
- Scan all rows before OK — the loop reports only the first invalid setter.
Example fix
// before // setter name cell: set-width -> ConfigurationException // after // setter name cell: setWidth
Defensive patterns
Strategy: validation
Validate before calling
PsiNameHelper helper = PsiNameHelper.getInstance(project);
for (ParameterData pd : myParametersMap.values()) {
if (!helper.isIdentifier(pd.getSetterName())) {
// correct the setter cell before confirming the dialog
}
} Prevention
- Derive setter names with JavaCodeStyleManager.suggestPropertyName + 'set' prefix rather than hand-typing.
- Avoid dashes/spaces when customizing setter names in the table.
When it happens
Trigger: Replace Constructor with Builder with a Setter Name cell edited to 'set-my-value', 'set', empty, or a keyword; or a constructor parameter whose derived setter collides with a Java keyword.
Common situations: Hand-tuning setter names to fluent style and introducing a dash or leaving the cell blank; parameter named such that the stripped name becomes a keyword.
Related errors
- replace.constructor.builder.error.invalid.field.name
- ''{0}'' is invalid extracted class name
- ''{0}'' is invalid field name for delegation
- ''{0}'' is invalid parameter name
- ''{0}'' is invalid inner class name
AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14).
Data as JSON: /api/errors/629f7fada74a8cea.
Report an issue: GitHub.