{"record":{"id":"202bba619f2d4663","repo":"JetBrains/intellij-community","slug":"0-is-invalid-extracted-class-name","errorCode":null,"errorMessage":"''{0}'' is invalid extracted class name","messagePattern":"''(.+?)'' is invalid extracted class name","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"java/java-impl-refactorings/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java","lineNumber":183,"sourceCode":"      return;\n    }\n    invokeRefactoring(processor);\n  }\n\n  @Override\n  protected void canRun() throws ConfigurationException {\n    final Project project = sourceClass.getProject();\n    final PsiNameHelper nameHelper = PsiNameHelper.getInstance(project);\n    final List<PsiMethod> methods = getMethodsToExtract();\n    final List<PsiField> fields = getFieldsToExtract();\n    final List<PsiClass> innerClasses = getClassesToExtract();\n    if (methods.isEmpty() && fields.isEmpty() && innerClasses.isEmpty()) {\n      throw new ConfigurationException(LangBundle.message(\"dialog.message.nothing.found.to.extract\"));\n    }\n\n    final String className = getClassName();\n    if (className.isEmpty() || !nameHelper.isIdentifier(className)) {\n      throw new ConfigurationException(JavaBundle.message(\"invalid.extracted.class.name\", className));\n    }\n\n    /*final String packageName = getPackageName();\n    if (packageName.length() == 0 || !nameHelper.isQualifiedName(packageName)) {\n      throw new ConfigurationException(\"\\'\" + packageName + \"\\' is invalid extracted class package name\");\n    }*/\n    for (PsiClass innerClass : innerClasses) {\n      if (className.equals(innerClass.getName())) {\n        throw new ConfigurationException(\n          JavaBundle.message(\"extracted.class.should.have.unique.name\", className));\n      }\n    }\n  }\n\n  public @NotNull String getPackageName() {\n    return packageTextField.getText().trim();\n  }\n","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl-refactorings/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java#L165-L201","documentation":"ExtractClassDialog.canRun throws ConfigurationException (JavaBundle key invalid.extracted.class.name) when the 'class name' field of the Extract Class dialog is empty or fails PsiNameHelper.isIdentifier — i.e. it is not a valid Java identifier (keyword, illegal character, digit-first, or empty).","triggerScenarios":"Leaving the class-name field empty; entering '1Class', 'my-class', 'new', or 'My Class' (space) in the name field of the Extract Class dialog.","commonSituations":"Users typing display-style names with spaces or dashes; names colliding with Java keywords; auto-focus lost and OK pressed with the field untouched; pasted names with whitespace or trailing punctuation.","solutions":["Enter a non-empty identifier: letters/digits/underscore/'$', not starting with a digit, not a Java keyword.","Trim accidental spaces; CamelCase names like 'ExtractedData' are fine.","Pick a unique name relative to the source class's inner classes to also pass the subsequent uniqueness check."],"exampleFix":"# before:\nClass name: extracted-data\n\n# after:\nClass name: ExtractedData","handlingStrategy":"validation","validationCode":"String name = getClassName();\nif (name.isEmpty() || !PsiNameHelper.getInstance(project).isIdentifier(name)) {\n  // highlight the class-name field with 'not a valid Java identifier'\n}","typeGuard":null,"tryCatchPattern":"try { dialog.canRun(); } catch (ConfigurationException e) { /* fix the class name and retry */ }","preventionTips":["Validate identifier fields with PsiNameHelper.isIdentifier on every keystroke.","Suggest a default name derived from the source class."],"tags":["java","intellij","refactoring","extract-class","identifier","validation","user-input"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}