{"record":{"id":"f54a5cf9220c2797","repo":"JetBrains/intellij-community","slug":"cannot-bind-to-default-package-0","errorCode":null,"errorMessage":"Cannot bind to default package: {0}","messagePattern":"Cannot bind to default package: (.+?)","errorType":"exception","errorClass":"IncorrectOperationException","httpStatus":null,"severity":"error","filePath":"java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java","lineNumber":790,"sourceCode":"      default:\n        throw new IllegalArgumentException(\"Unexpected kind: \" + kind);\n    }\n\n    ASTNode qualifier = findChildByRole(ChildRole.QUALIFIER);\n    if (qualifier == null) return false;\n\n    IElementType qualifierElementType = qualifier.getElementType();\n    LOG.assertTrue(qualifierElementType == JavaElementType.JAVA_CODE_REFERENCE, qualifierElementType);\n    PsiElement refElement = SourceTreeToPsiMap.<PsiJavaCodeReferenceElement>treeToPsiNotNull(qualifier).resolve();\n    if (refElement instanceof PsiPackage) return true;\n\n    return SourceTreeToPsiMap.<PsiJavaCodeReferenceElementImpl>treeToPsiNotNull(qualifier).isFullyQualified(containingFile);\n  }\n\n  private @NotNull PsiElement bindToPackage(@NotNull PsiPackage aPackage) throws IncorrectOperationException {\n    String qName = aPackage.getQualifiedName();\n    if (qName.isEmpty()) {\n      throw new IncorrectOperationException(\"Cannot bind to default package: \"+aPackage);\n    }\n    PsiJavaParserFacade parserFacade = JavaPsiFacade.getInstance(getProject()).getParserFacade();\n    PsiJavaCodeReferenceElement ref = parserFacade.createReferenceFromText(qName, getParent());\n    getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode());\n    return ref;\n  }\n\n  @Override\n  public boolean isReferenceTo(@NotNull PsiElement element) {\n    PsiFile containingFile = getContainingFile();\n    Kind kind = getKindEnum(containingFile);\n    switch (kind) {\n      case CLASS_NAME_KIND:\n      case CLASS_IN_QUALIFIED_NEW_KIND:\n        if (!(element instanceof PsiClass)) return false;\n        break;\n\n      case CLASS_FQ_NAME_KIND: {","sourceCodeStart":772,"sourceCodeEnd":808,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java#L772-L808","documentation":"When a Java code reference is re-bound to a package (e.g. after refactoring moves a class to another package), bindToPackage must construct a new reference text from the package's qualified name. The default (unnamed) package has an empty qualified name, and there is no way to write a reference to it, so it throws IncorrectOperationException(\"Cannot bind to default package: \"+aPackage).","triggerScenarios":"bindToElement(element) where element resolves to a PsiPackage with empty qualified name — i.e. the default package — e.g. moving/importing a class so its reference qualifier would become the unnamed package.","commonSituations":"Move class refactoring that moves a class into the default package while qualified references in other files point at its old package; code that programmatically rebinds imports to package roots; projects mixing default-package and packaged classes.","solutions":["Avoid moving classes into the default package; keep at least one package level in the target.","Before binding, check aPackage.getQualifiedName().isEmpty() and instead rewrite the reference to the simple class name (unqualified) plus fix imports.","Use the standard Move refactoring which handles default-package targets by adjusting references rather than binding to a package qualifier."],"exampleFix":"// before\nref.bindToElement(defaultPackage); // PsiPackage with qName \"\" -> throws\n\n// after\nif (element instanceof PsiPackage && ((PsiPackage)element).getQualifiedName().isEmpty()) {\n  // rebind to the class itself, not the default package\n  ref.bindToElement(targetClass);\n} else {\n  ref.bindToElement(element);\n}","handlingStrategy":"validation","validationCode":"if (element instanceof PsiPackage && ((PsiPackage)element).getQualifiedName().isEmpty()) {\n  // rebind to class or unqualify reference instead\n}","typeGuard":"static boolean isDefaultPackage(PsiElement e) { return e instanceof PsiPackage && ((PsiPackage)e).getQualifiedName().isEmpty(); }","tryCatchPattern":"try { ref.bindToElement(pkg); } catch (IncorrectOperationException e) { /* rewrite reference text manually */ }","preventionTips":["Never move classes into the default package in refactored codebases.","Check qualifiedName emptiness before binding references to packages."],"tags":["java","psi","references","default-package","bind"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}