{"record":{"id":"e86907d1be01a513","repo":"JetBrains/intellij-community","slug":"cannot-set-package-name-for-module-declarations","errorCode":null,"errorMessage":"Cannot set package name for module declarations","messagePattern":"Cannot set package name for module declarations","errorType":"exception","errorClass":"IncorrectOperationException","httpStatus":null,"severity":"error","filePath":"java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileBaseImpl.java","lineNumber":170,"sourceCode":"  public @NotNull String getPackageName() {\n    return withGreenStubOrAst(\n      PsiJavaFileStub.class,\n      stub -> stub.getPackageName(),\n      ast -> {\n        String name = myPackageName;\n        if (name == null) {\n          PsiPackageStatement statement = getPackageStatement();\n          myPackageName = name = statement == null ? \"\" : statement.getPackageName();\n        }\n        return name;\n      }\n    );\n  }\n\n  @Override\n  public void setPackageName(@NotNull String packageName) throws IncorrectOperationException {\n    if (PsiUtil.isModuleFile(this)) {\n      throw new IncorrectOperationException(\"Cannot set package name for module declarations\");\n    }\n\n    PsiPackageStatement packageStatement = getPackageStatement();\n    PsiElementFactory factory = JavaPsiFacade.getElementFactory(getProject());\n    if (packageStatement != null) {\n      if (!packageName.isEmpty()) {\n        PsiJavaCodeReferenceElement reference = packageStatement.getPackageReference();\n        reference.replace(factory.createPackageStatement(packageName).getPackageReference());\n      }\n      else {\n        packageStatement.delete();\n      }\n    }\n    else if (!packageName.isEmpty()) {\n      cleanupBrokenPackageKeyword();\n      PsiElement anchor = getFirstChild();\n      if (PsiPackage.PACKAGE_INFO_FILE.equals(getName())) {\n        // If javadoc is already present in a package-info.java file, try to position the new package statement after it,","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileBaseImpl.java#L152-L188","documentation":"PsiJavaFileBaseImpl.setPackageName rewrites the package statement of a Java file, but module-info.java describes a Java module, not a packaged compilation unit; its 'package' concept is fixed, so the method throws IncorrectOperationException(\"Cannot set package name for module declarations\") when PsiUtil.isModuleFile(this) is true.","triggerScenarios":"Calling PsiJavaFile.setPackageName (directly or via refactoring APIs like JavaPsiFacade/refactor move that retarget package) on a file named module-info.java.","commonSituations":"Move/refactor package operations applied blindly to all files in a directory including module-info.java; plugins that 'normalize' package statements across a source root; scripts that migrate packages and hit JPMS descriptors.","solutions":["Skip module declaration files before the call: check PsiUtil.isModuleFile(psiFile) or file.getName().equals(JavaModuleFileType.MODULE_INFO_FILE) / \"module-info.java\".","When moving a package, update module-info.java explicitly (requires-info, exports statements) instead of setPackageName.","Use the IDE's standard Move refactoring, which already handles module descriptors specially."],"exampleFix":"// before\npsiJavaFile.setPackageName(\"org.newpkg\"); // throws for module-info.java\n\n// after\nif (!PsiUtil.isModuleFile(psiJavaFile)) {\n  psiJavaFile.setPackageName(\"org.newpkg\");\n} else {\n  // update module-info contents (exports/requires) separately\n}","handlingStrategy":"validation","validationCode":"if (PsiUtil.isModuleFile(psiJavaFile)) return; // module-info: no setPackageName","typeGuard":"static boolean isModuleDescriptor(PsiJavaFile f) { return PsiUtil.isModuleFile(f); }","tryCatchPattern":"try { file.setPackageName(p); } catch (IncorrectOperationException e) { /* handle module-info separately */ }","preventionTips":["Exclude module-info.java from package-migration loops.","Use platform Move refactoring which special-cases module descriptors."],"tags":["java","psi","jpms","module-info","refactoring"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}