mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
Java: rename method correctly if the name conflicts with javadoc reference (IDEA-355643)
GitOrigin-RevId: c1ae53780e8ec3a56834dd32ecd9bc19cfd222fb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
eb3403c62f
commit
c40e983f98
@@ -1,9 +1,9 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.refactoring.rename;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
@@ -19,8 +19,6 @@ import java.util.Set;
|
||||
|
||||
|
||||
public abstract class RenameJavaMemberProcessor extends RenamePsiElementProcessor {
|
||||
private static final Logger LOG = Logger.getInstance(RenameJavaMemberProcessor.class);
|
||||
|
||||
public static void qualifyMember(PsiMember member, PsiElement occurence, String newName) throws IncorrectOperationException {
|
||||
final PsiClass containingClass = member.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
@@ -123,10 +121,11 @@ public abstract class RenameJavaMemberProcessor extends RenamePsiElementProcesso
|
||||
protected static void qualifyOuterMemberReferences(final List<? extends MemberHidesOuterMemberUsageInfo> outerHides) throws IncorrectOperationException {
|
||||
for (MemberHidesOuterMemberUsageInfo usage : outerHides) {
|
||||
final PsiElement element = usage.getElement();
|
||||
PsiJavaCodeReferenceElement collidingRef = (PsiJavaCodeReferenceElement)element;
|
||||
if (element == null) continue;
|
||||
PsiMember member = (PsiMember)usage.getReferencedElement();
|
||||
PsiReferenceExpression ref = createMemberReference(member, collidingRef);
|
||||
collidingRef.replace(ref);
|
||||
if (member == null) continue;
|
||||
PsiReference reference = element.getReference();
|
||||
if (reference != null) JavaCodeStyleManager.getInstance(element.getProject()).shortenClassReferences(reference.bindToElement(member));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.refactoring.rename;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
@@ -70,8 +70,9 @@ public class RenameJavaMethodProcessor extends RenameJavaMemberProcessor {
|
||||
if (usage instanceof MemberHidesStaticImportUsageInfo) {
|
||||
staticImportHides.add((MemberHidesStaticImportUsageInfo)usage);
|
||||
} else if (usage instanceof MemberHidesOuterMemberUsageInfo) {
|
||||
PsiJavaCodeReferenceElement collidingRef = (PsiJavaCodeReferenceElement)element;
|
||||
PsiMethod resolved = (PsiMethod)collidingRef.resolve();
|
||||
PsiReference reference = element.getReference();
|
||||
if (reference == null) continue;
|
||||
PsiMethod resolved = (PsiMethod)reference.resolve();
|
||||
outerHides.add(new MemberHidesOuterMemberUsageInfo(element, resolved));
|
||||
}
|
||||
else if (!(element instanceof PsiMethod overrider)) {
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
interface Add {
|
||||
static OptionalLong set(long a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
interface Async {
|
||||
/**
|
||||
* @see #set(long)
|
||||
*/
|
||||
CompletableFuture<OptionalLong> add<caret>(long a);
|
||||
|
||||
static void x() {
|
||||
set(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
interface Add {
|
||||
static OptionalLong set(long a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
interface Async {
|
||||
/**
|
||||
* @see Add#set(long)
|
||||
*/
|
||||
CompletableFuture<OptionalLong> set(long a);
|
||||
|
||||
static void x() {
|
||||
Add.set(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.refactoring;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
@@ -74,6 +74,10 @@ public class RenameMembersInplaceTest extends LightJavaCodeInsightTestCase {
|
||||
doTestInplaceRename("bar");
|
||||
}
|
||||
|
||||
public void testMethodWithJavadocRef2() {
|
||||
doTestInplaceRename("set");
|
||||
}
|
||||
|
||||
public void testEnumConstructor() {
|
||||
doTestInplaceRename("Bar");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user