{"record":{"id":"0bd0041c68be54bb","repo":"JetBrains/intellij-community","slug":"cannot-bind-to-element","errorCode":null,"errorMessage":"Cannot bind to {element}","messagePattern":"Cannot bind to (.+?)","errorType":"exception","errorClass":"IncorrectOperationException","httpStatus":null,"severity":"error","filePath":"java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiPackageReference.java","lineNumber":74,"sourceCode":"  }\n\n  @Override\n  public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {\n    return doMultiResolve();\n  }\n\n  protected ResolveResult @NotNull [] doMultiResolve() {\n    Collection<PsiPackage> packages = new HashSet<>();\n    for (PsiPackage parentPackage : getContext()) {\n      packages.addAll(myReferenceSet.resolvePackageName(parentPackage, getValue()));\n    }\n    return PsiElementResolveResult.createResults(packages);\n  }\n\n  @Override\n  public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {\n    if (!(element instanceof PsiPackage)) {\n      throw new IncorrectOperationException(\"Cannot bind to \" + element);\n    }\n    TextRange range = new TextRange(getReferenceSet().getReference(0).getRangeInElement().getStartOffset(), getRangeInElement().getEndOffset());\n    String newName = ((PsiPackage)element).getQualifiedName();\n    return ElementManipulators.handleContentChange(getElement(), range, newName);\n  }\n\n  public PackageReferenceSet getReferenceSet() {\n    return myReferenceSet;\n  }\n}","sourceCodeStart":56,"sourceCodeEnd":84,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiPackageReference.java#L56-L84","documentation":"Thrown by PsiPackageReference.bindToElement() when the element passed to rebind the reference is not a PsiPackage. Package references (used in import/package statements and package name references) can only be rebound to package PSI elements; anything else (a class, a directory, a PsiClass packaging element) is rejected with IncorrectOperationException. The call happens during refactorings such as package move/rename that re-point references.","triggerScenarios":"Calling bindToElement() on a PsiPackageReference with a PsiClass, PsiJavaFile, PsiDirectory or PsiPackage with null qualified name instead of a PsiPackage; custom refactoring handlers wiring a wrong target element into a move/rename of packages.","commonSituations":"Plugin authors implementing custom move refactorings and passing resolved classes where packages are expected; code that assumes bindToElement accepts any named element; edge cases where a reference resolves ambiguously and the caller feeds the wrong resolve result back in.","solutions":["Pass a PsiPackage to bindToElement: resolve the target package via JavaPsiFacade.getInstance(project).findPackage(qualifiedName) and check it is non-null first.","If the target is really a class, rebind the underlying class reference, not the package reference.","Guard with 'instanceof PsiPackage' before calling bindToElement and log/skip otherwise."],"exampleFix":"// before\nref.bindToElement(targetClass); // PsiClass -> throws\n// after\nPsiPackage pkg = JavaPsiFacade.getInstance(project).findPackage(\"com.example.newpkg\");\nif (pkg != null) ref.bindToElement(pkg);","handlingStrategy":"type-guard","validationCode":"PsiPackage target = JavaPsiFacade.getInstance(project).findPackage(newFqn);\nif (target == null) { /* package missing; create or abort */ }","typeGuard":"static boolean isRebindablePackageTarget(@NotNull PsiElement e) {\n  return e instanceof PsiPackage && ((PsiPackage)e).getQualifiedName() != null;\n}","tryCatchPattern":"try { ref.bindToElement(target); } catch (IncorrectOperationException e) { /* target was not a PsiPackage; log and skip rebinding this reference */ }","preventionTips":["Always resolve the target to a PsiPackage via JavaPsiFacade.findPackage before bindToElement on package references.","Check the reference type (PsiPackageReference vs PsiJavaCodeReferenceElement) before rebinding.","In custom refactoring plugins, re-run resolution after each bind to catch shifted ranges."],"tags":["java","refactoring","psi-reference","intellij-platform"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}