mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
rename: do not conflict if class type parameter and type param defined inside class in static context (IDEA-57427)
This commit is contained in:
@@ -26,6 +26,7 @@ import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.searches.ClassInheritorsSearch;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.ClassUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.HelpID;
|
||||
import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
@@ -33,6 +34,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||
import com.intellij.refactoring.util.MoveRenameUsageInfo;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -176,6 +178,15 @@ public class RenameJavaClassProcessor extends RenamePsiElementProcessor {
|
||||
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(referenceElement.getProject()).getResolveHelper();
|
||||
final PsiClass aClass = resolveHelper.resolveReferencedClass(newName, referenceElement);
|
||||
if (aClass == null) return;
|
||||
if (aClass instanceof PsiTypeParameter && myRenamedClass instanceof PsiTypeParameter) {
|
||||
final PsiTypeParameterListOwner member = PsiTreeUtil.getParentOfType(referenceElement, PsiTypeParameterListOwner.class);
|
||||
if (member != null) {
|
||||
final PsiTypeParameterList typeParameterList = member.getTypeParameterList();
|
||||
if (typeParameterList != null && ArrayUtil.find(typeParameterList.getTypeParameters(), myRenamedClass) > -1) {
|
||||
if (member.hasModifierProperty(PsiModifier.STATIC)) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
final PsiFile containingFile = referenceElement.getContainingFile();
|
||||
final String text = referenceElement.getText();
|
||||
if (Comparing.equal(myRenamedClassQualifiedName, removeSpaces(text))) return;
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
public class Holder<E> {
|
||||
private final E elem;
|
||||
|
||||
private Holder(E elem) { this.elem = elem; }
|
||||
|
||||
public static <<caret>X> Holder<X> of(X elem) { return new Holder<X>(elem); }
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
public class Holder<E> {
|
||||
private final E elem;
|
||||
|
||||
private Holder(E elem) { this.elem = elem; }
|
||||
|
||||
public static <E> Holder<E> of(E elem) { return new Holder<E>(elem); }
|
||||
}
|
||||
@@ -169,6 +169,10 @@ public class RenameCollisionsTest extends LightCodeInsightTestCase {
|
||||
doTest("C");
|
||||
}
|
||||
|
||||
public void testRenameStaticMethodTypeParameter() throws Exception {
|
||||
doTest("E");
|
||||
}
|
||||
|
||||
private void doTest(final String newName) throws Exception {
|
||||
configureByFile(BASE_PATH + getTestName(false) + ".java");
|
||||
PsiElement element = TargetElementUtilBase
|
||||
|
||||
Reference in New Issue
Block a user