JetBrains/intellij-community · warning · ConfigurationException
replace.constructor.builder.error.invalid.field.name
Error message
replace.constructor.builder.error.invalid.field.name
What it means
Thrown by ReplaceConstructorWithBuilderDialog.canRun() (ReplaceConstructorWithBuilderDialog.java:497) when any row of the parameters table has a field name that fails PsiNameHelper.isIdentifier. Replace Constructor with Builder generates a builder field per constructor parameter; each user-editable field name in the table must be a legal identifier before the refactoring can run.
Source
Thrown at java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java:497
return splitter;
}
private void setEnabled(final boolean createNew) {
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));View on GitHub (pinned to be881553f2)
Solutions
- Find the offending row in the parameters table and fix its Field Name to a valid identifier (the error message names the value).
- If a constructor parameter is legitimately a keyword, give the builder field a suffixed name ('defaultValue') while keeping the setter name aligned.
- Re-check every row — validation loops over all ParameterData entries and stops at the first bad one.
Example fix
// before // constructor: Foo(int default) -> suggested field name 'default' -> invalid // after // table row: field name 'defaultValue', setter name 'defaultValue' -> valid
Defensive patterns
Strategy: validation
Validate before calling
PsiNameHelper helper = PsiNameHelper.getInstance(project);
for (ParameterData pd : myParametersMap.values()) {
if (!helper.isIdentifier(pd.getFieldName())) {
// fix this row (e.g. keyword parameter 'default' -> 'defaultValue') before OK
}
} Prevention
- When constructing ParameterData programmatically, sanitize names: strip keywords, replace '-' with camelCase.
- Name constructor parameters so their derived field names are never Java keywords.
When it happens
Trigger: Refactoring | Replace Constructor with Builder on a constructor; editing the 'Field Name' column of the parameters table to a keyword ('default'), empty, digit-leading, or dashed value ('max-size') and clicking OK.
Common situations: Accepting auto-derived names that clash with Java keywords (parameter named 'default'), hand-editing several rows quickly and leaving one invalid, or clearing a cell accidentally.
Related errors
- ''{0}'' is invalid extracted class name
- ''{0}'' is invalid field name for delegation
- ''{0}'' is invalid parameter name
- ''{0}'' is invalid inner class name
- ''{0}'' is invalid parameter class name
AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14).
Data as JSON: /api/errors/daa2b31a1f437ca9.
Report an issue: GitHub.