JetBrains/intellij-community · warning · ConfigurationException
replace.constructor.builder.error.invalid.builder.class.name
Error message
replace.constructor.builder.error.invalid.builder.class.name
What it means
Thrown by ReplaceConstructorWithBuilderDialog.canRun() (ReplaceConstructorWithBuilderDialog.java:509) when the 'Create new builder class' option is selected, the class-name field is non-empty (empty is caught earlier with a null-message exception), and the text fails PsiNameHelper.isQualifiedName. Note this field accepts a qualified name (dots allowed), unlike the parameter-object dialog's simple-name field.
Source
Thrown at java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java:509
@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();
if (qualifiedName.isEmpty()) throw new ConfigurationException(null);
if (!nameHelper.isQualifiedName(qualifiedName)) {
throw new ConfigurationException(
JavaRefactoringBundle.message("replace.constructor.builder.error.invalid.builder.qualified.class.name", qualifiedName));
}
}
}
View on GitHub (pinned to be881553f2)
Solutions
- Enter a syntactically valid (possibly dotted) class name such as 'com.acme.FooBuilder'.
- Fix doubled dots/spaces/keywords in the field.
- Programmatic pre-check: PsiNameHelper.getInstance(project).isQualifiedName(className.trim()).
Example fix
// before // builder class name: com.acme..FooBuilder -> rejected // after // builder class name: com.acme.FooBuilder
Defensive patterns
Strategy: validation
Validate before calling
String className = myNewClassName.getText().trim();
if (!className.isEmpty() && !PsiNameHelper.getInstance(project).isQualifiedName(className)) {
// block before OK; this field accepts dotted FQNs but they must be well-formed
} Prevention
- Default the builder-class field to the constructor's class + 'Builder' suffix.
- Validate qualified names with PsiNameHelper.isQualifiedName in custom refactoring UIs.
When it happens
Trigger: Replace Constructor with Builder, 'Create builder class' radio selected, and the class-name field holding 'My Builder', 'com..Builder', '.Builder', or a keyword-terminated segment.
Common situations: Pasting a name with leading/trailing spaces already trimmed but internal spaces, doubled dots from editing, or a segment that is a Java keyword ('new').
Related errors
- ''{0}'' is invalid qualified parameter class name
- replace.constructor.builder.error.invalid.field.name
- replace.constructor.builder.error.invalid.builder.package.na
- replace.constructor.builder.error.invalid.builder.qualified.
- Invalid package name: {0}
AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14).
Data as JSON: /api/errors/e6563a075e71fab6.
Report an issue: GitHub.