Java: rename method correctly if the name conflicts with javadoc reference (IDEA-355643)

GitOrigin-RevId: c1ae53780e8ec3a56834dd32ecd9bc19cfd222fb
This commit is contained in:
Bas Leijdekkers
2024-09-12 13:06:30 +02:00
committed by intellij-monorepo-bot
parent eb3403c62f
commit c40e983f98
7 changed files with 67 additions and 20 deletions

View File

@@ -335,13 +335,11 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo
((PsiJavaCodeReferenceElement)ref).bindToElement(containingClass);
}
}
else {
if (containingClass != null && !PsiTreeUtil.isAncestor(containingClass, PsiDocMethodOrFieldRef.this, true)) {
PsiDocComment fromText = JavaPsiFacade.getElementFactory(containingClass.getProject())
.createDocCommentFromText("/**{@link " + containingClass.getQualifiedName() + "#" + newName + "}*/");
PsiDocMethodOrFieldRef methodOrFieldRefFromText = PsiTreeUtil.findChildOfType(fromText, PsiDocMethodOrFieldRef.class);
addAfter(Objects.requireNonNull(methodOrFieldRefFromText).getFirstChild(), null);
}
else if (containingClass != null && PsiTreeUtil.getParentOfType(PsiDocMethodOrFieldRef.this, PsiClass.class) != containingClass) {
PsiDocComment fromText = JavaPsiFacade.getElementFactory(containingClass.getProject())
.createDocCommentFromText("/**{@link " + containingClass.getQualifiedName() + "#" + newName + "}*/");
PsiDocMethodOrFieldRef methodOrFieldRefFromText = PsiTreeUtil.findChildOfType(fromText, PsiDocMethodOrFieldRef.class);
addAfter(Objects.requireNonNull(methodOrFieldRefFromText).getFirstChild(), null);
}
if (hasSignature || !name.equals(newName)) {

View File

@@ -671,11 +671,12 @@ public class PsiReferenceExpressionImpl extends ExpressionPsiElement implements
getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode());
return ref;
}
else if ((element instanceof PsiField || element instanceof PsiMethod) && ((PsiMember) element).hasModifierProperty(PsiModifier.STATIC)) {
else if ((element instanceof PsiField || element instanceof PsiMethod)) {
PsiMember member = (PsiMember) element;
PsiClass psiClass = member.getContainingClass();
if (psiClass == null) throw new IncorrectOperationException();
String qName = psiClass.getQualifiedName() + "." + member.getName();
boolean isStatic = ((PsiMember)element).hasModifierProperty(PsiModifier.STATIC);
String qName = psiClass.getQualifiedName() + (isStatic ? "." : ".this.") + member.getName();
PsiExpression ref = parserFacade.createExpressionFromText(qName, this);
getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode());
return ref;