{"record":{"id":"daa2b31a1f437ca9","repo":"JetBrains/intellij-community","slug":"replace-constructor-builder-error-invalid-field-na","errorCode":null,"errorMessage":"replace.constructor.builder.error.invalid.field.name","messagePattern":"replace\\.constructor\\.builder\\.error\\.invalid\\.field\\.name","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"warning","filePath":"java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java","lineNumber":497,"sourceCode":"    return splitter;\n  }\n\n  private void setEnabled(final boolean createNew) {\n    UIUtil.setEnabled(myCreateNewPanel, createNew, true);\n    myExistentClassTF.setEnabled(!createNew);\n  }\n\n  @Override\n  public JComponent getPreferredFocusedComponent() {\n    return myNewClassName;\n  }\n\n  @Override\n  protected void canRun() throws ConfigurationException {\n    final PsiNameHelper nameHelper = PsiNameHelper.getInstance(myProject);\n    for (ParameterData parameterData : myParametersMap.values()) {\n      if (!nameHelper.isIdentifier(parameterData.getFieldName())) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"replace.constructor.builder.error.invalid.field.name\", parameterData.getFieldName()));\n      }\n      if (!nameHelper.isIdentifier(parameterData.getSetterName())) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"replace.constructor.builder.error.invalid.setter.name\", parameterData.getSetterName()));\n      }\n    }\n    if (myCreateBuilderClassRadioButton.isSelected()) {\n      final String className = myNewClassName.getText().trim();\n      if (className.isEmpty()) throw new ConfigurationException(null);\n      if (!nameHelper.isQualifiedName(className)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"replace.constructor.builder.error.invalid.builder.class.name\", className));\n      }\n      final String packageName = myPackageTextField.getText().trim();\n      if (!packageName.isEmpty() && !nameHelper.isQualifiedName(packageName)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"replace.constructor.builder.error.invalid.builder.package.name\", packageName));","sourceCodeStart":479,"sourceCodeEnd":515,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java#L479-L515","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n// constructor: Foo(int default) -> suggested field name 'default' -> invalid\n\n// after\n// table row: field name 'defaultValue', setter name 'defaultValue' -> valid","handlingStrategy":"validation","validationCode":"PsiNameHelper helper = PsiNameHelper.getInstance(project);\nfor (ParameterData pd : myParametersMap.values()) {\n  if (!helper.isIdentifier(pd.getFieldName())) {\n    // fix this row (e.g. keyword parameter 'default' -> 'defaultValue') before OK\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When constructing ParameterData programmatically, sanitize names: strip keywords, replace '-' with camelCase.","Name constructor parameters so their derived field names are never Java keywords."],"tags":["intellij","refactoring","builder","java","identifier","validation"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}