{"record":{"id":"629f7fada74a8cea","repo":"JetBrains/intellij-community","slug":"replace-constructor-builder-error-invalid-setter-n","errorCode":null,"errorMessage":"replace.constructor.builder.error.invalid.setter.name","messagePattern":"replace\\.constructor\\.builder\\.error\\.invalid\\.setter\\.name","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"warning","filePath":"java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java","lineNumber":501,"sourceCode":"    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));\n      }\n    }\n    else {\n      final String qualifiedName = myExistentClassTF.getText().trim();","sourceCodeStart":483,"sourceCodeEnd":519,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java#L483-L519","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n// setter name cell: set-width -> ConfigurationException\n\n// after\n// setter name cell: setWidth","handlingStrategy":"validation","validationCode":"PsiNameHelper helper = PsiNameHelper.getInstance(project);\nfor (ParameterData pd : myParametersMap.values()) {\n  if (!helper.isIdentifier(pd.getSetterName())) {\n    // correct the setter cell before confirming the dialog\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive setter names with JavaCodeStyleManager.suggestPropertyName + 'set' prefix rather than hand-typing.","Avoid dashes/spaces when customizing setter names in the table."],"tags":["intellij","refactoring","builder","java","identifier","setter"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}