{"record":{"id":"fa8e29809ac8b3f8","repo":"JetBrains/intellij-community","slug":"0-is-invalid-parameter-class-package-name","errorCode":null,"errorMessage":"''{0}'' is invalid parameter class package name","messagePattern":"''(.+?)'' is invalid parameter class package name","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"warning","filePath":"java/java-impl-refactorings/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java","lineNumber":496,"sourceCode":"      if (!nameHelper.isIdentifier(innerClassName)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"introduce.parameter.object.error.invalid.inner.class.name\", innerClassName));\n      }\n      if (mySourceMethod.getContainingClass().findInnerClassByName(innerClassName, false) != null) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"introduce.parameter.object.error.inner.class.already.exist\", innerClassName));\n      }\n    }\n    else if (!useExistingClass()) {\n      final String className = getClassName();\n      if (className.isEmpty() || !nameHelper.isIdentifier(className)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"introduce.parameter.object.error.invalid.parameter.class.name\", className));\n      }\n      final String packageName = getPackageName();\n\n      if (packageName.isEmpty() || !nameHelper.isQualifiedName(packageName)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"introduce.parameter.object.error.invalid.parameter.class.package.name\", packageName));\n      }\n    }\n    else {\n      final String className = getExistingClassName();\n      if (className.isEmpty() || !nameHelper.isQualifiedName(className)) {\n        throw new ConfigurationException(\n          JavaRefactoringBundle.message(\"introduce.parameter.object.error.invalid.qualified.parameter.class.name\", className));\n      }\n      if (JavaPsiFacade.getInstance(getProject()).findClass(className, GlobalSearchScope.allScope(getProject())) == null) {\n        throw new ConfigurationException(JavaRefactoringBundle.message(\"introduce.parameter.object.error.class.does.not.exist\", className));\n      }\n    }\n  }\n\n  private @NotNull String getInnerClassName() {\n    return myInnerClassNameTextField.getText().trim();\n  }","sourceCodeStart":478,"sourceCodeEnd":514,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl-refactorings/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java#L478-L514","documentation":"Thrown by IntroduceParameterObjectDialog.canRun() (IntroduceParameterObjectDialog.java:496) in the create-new-class branch when the package field is empty or fails PsiNameHelper.isQualifiedName. A generated class must live in a syntactically valid package, so the dialog validates the package name grammar (dot-separated identifiers). It is purely syntactic — it does not check that the package exists on disk or in sources.","triggerScenarios":"Introduce Parameter Object, create-new-class option, package field blank or containing 'com..acme', '.com.acme', 'com.acme.', 'my pkg', or a keyword segment like 'com.int'.","commonSituations":"Trailing dot from autocompletion, doubled dots after editing, spaces from pasting, or leaving the package empty when the refactoring requires a destination package.","solutions":["Type/select a well-formed dotted package name ('com.acme.refactoring') with no empty segments.","Use the package chooser (...) button instead of typing to avoid typos.","Pre-validate programmatically: PsiNameHelper.getInstance(project).isQualifiedName(packageName) && !packageName.isEmpty()."],"exampleFix":"// before\nString pkg = \"com.acme.\"; // trailing dot -> rejected\n\n// after\nString pkg = \"com.acme\";\nassert PsiNameHelper.getInstance(project).isQualifiedName(pkg);","handlingStrategy":"validation","validationCode":"String pkg = getPackageName().trim();\nPsiNameHelper helper = PsiNameHelper.getInstance(project);\nif (pkg.isEmpty() || !helper.isQualifiedName(pkg)) {\n  // block before running: package name must be dot-separated identifiers\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a package reference editor (PackageReferenceEditorCombo) so only choosable packages are entered.","Trim and strip trailing dots from pasted package names."],"tags":["intellij","refactoring","java","validation","package-name"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}