{"record":{"id":"b211761f5c77f31b","repo":"JetBrains/intellij-community","slug":"cannot-rename-receiver-parameter","errorCode":null,"errorMessage":"Cannot rename receiver parameter","messagePattern":"Cannot rename receiver parameter","errorType":"exception","errorClass":"IncorrectOperationException","httpStatus":null,"severity":"error","filePath":"java/java-psi-impl/src/com/intellij/psi/impl/source/PsiReceiverParameterImpl.java","lineNumber":71,"sourceCode":"\n  @Override\n  public @Nullable PsiExpression getInitializer() {\n    return null;\n  }\n\n  @Override\n  public boolean hasInitializer() {\n    return false;\n  }\n\n  @Override\n  public @Nullable PsiIdentifier getNameIdentifier() {\n    return null;\n  }\n\n  @Override\n  public PsiElement setName(@NotNull String name) throws IncorrectOperationException {\n    throw new IncorrectOperationException(\"Cannot rename receiver parameter\");\n  }\n\n  @Override\n  public void normalizeDeclaration() throws IncorrectOperationException { }\n\n  @Override\n  public @Nullable Object computeConstantValue() {\n    return null;\n  }\n\n  @Override\n  public void accept(@NotNull PsiElementVisitor visitor) {\n    if (visitor instanceof JavaElementVisitor) {\n      ((JavaElementVisitor)visitor).visitReceiverParameter(this);\n    }\n    else {\n      visitor.visitElement(this);\n    }","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiReceiverParameterImpl.java#L53-L89","documentation":"PsiReceiverParameterImpl represents the receiver parameter ('this') of an instance method (Java 8 explicit receiver parameters, e.g. 'void m(Foo this)'). It has no name identifier — getNameIdentifier() returns null — so setName throws IncorrectOperationException(\"Cannot rename receiver parameter\").","triggerScenarios":"Calling setName on a PsiParameter obtained from method.getParameterList() where the parameter is the receiver 'this'; e.g. rename refactoring iterating all parameters, or intention trying to rename an unnamed parameter.","commonSituations":"Rename-all-parameters tooling; plugins that walk parameter lists and call setName on each; refactorings on code using explicit receiver parameters (common in instrumentation/annotation-heavy codebases).","solutions":["Skip receiver parameters: check parameter instanceof PsiReceiverParameter or parameter.getNameIdentifier() == null before setName.","Rename the method's first real parameter instead if the intent was to rename a normal parameter.","If API requires a name, use ReadAction-safe null checks and prompt the user for a name on unnamed parameters instead of auto-renaming."],"exampleFix":"// before\nfor (PsiParameter p : method.getParameterList().getParameters()) {\n  p.setName(newName); // throws on receiver 'this'\n}\n\n// after\nfor (PsiParameter p : method.getParameterList().getParameters()) {\n  if (p.getNameIdentifier() == null) continue; // receiver parameter\n  p.setName(newName);\n}","handlingStrategy":"type-guard","validationCode":"if (param instanceof PsiReceiverParameter || param.getNameIdentifier() == null) continue;","typeGuard":"static boolean isRenamableParameter(PsiParameter p) { return p.getNameIdentifier() != null && !(p instanceof PsiReceiverParameter); }","tryCatchPattern":"try { param.setName(n); } catch (IncorrectOperationException e) { /* skip receiver 'this' */ }","preventionTips":["Check getNameIdentifier() != null before renaming parameters.","Remember receiver parameters ('this') are nameless by spec."],"tags":["java","psi","receiver-parameter","rename"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}