mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inline superclass: correct super references in extends/implements lists without pushdown (IDEA-86639)
This commit is contained in:
+3
-26
@@ -40,11 +40,11 @@ import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usageView.UsageViewDescriptor;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.Processor;import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -63,39 +63,16 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori
|
||||
myTargetClasses = targetClasses;
|
||||
MemberInfoStorage memberInfoStorage = new MemberInfoStorage(mySuperClass, new MemberInfo.Filter<PsiMember>() {
|
||||
public boolean includeMember(PsiMember element) {
|
||||
return true;
|
||||
return !(element instanceof PsiClass) || PsiTreeUtil.isAncestor(mySuperClass, element, true);
|
||||
}
|
||||
});
|
||||
List<MemberInfo> members = memberInfoStorage.getClassMemberInfos(mySuperClass);
|
||||
for (MemberInfo member : members) {
|
||||
member.setChecked(true);
|
||||
}
|
||||
members = appendSuperRefs(members);
|
||||
myMemberInfos = members.toArray(new MemberInfo[members.size()]);
|
||||
}
|
||||
|
||||
private List<MemberInfo> appendSuperRefs(List<MemberInfo> members) {
|
||||
if (!mySuperClass.isInterface()) {
|
||||
PsiReferenceList extendsList = mySuperClass.getExtendsList();
|
||||
if (extendsList != null && extendsList.getReferenceElements().length > 0) {
|
||||
PsiElement resolve = extendsList.getReferenceElements()[0].resolve();
|
||||
if (resolve instanceof PsiClass) {
|
||||
members = new ArrayList<MemberInfo>(members);
|
||||
|
||||
MemberInfo memberInfo = new MemberInfo((PsiMember)resolve, true, extendsList) {
|
||||
{
|
||||
overrides = false;
|
||||
}
|
||||
};
|
||||
|
||||
memberInfo.setChecked(true);
|
||||
members.add(memberInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
return members;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected UsageViewDescriptor createUsageViewDescriptor(final UsageInfo[] usages) {
|
||||
return new InlineSuperClassUsageViewDescriptor(mySuperClass);
|
||||
|
||||
+5
-5
@@ -21,22 +21,22 @@
|
||||
package com.intellij.refactoring.inlineSuperClass.usageInfo;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiJavaCodeReferenceElement;
|
||||
import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteExtendsClassUsageInfo;
|
||||
import com.intellij.refactoring.util.FixableUsageInfo;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
public class ReplaceExtendsListUsageInfo extends FixableUsageInfo {
|
||||
private final SafeDeleteExtendsClassUsageInfo mySafeDeleteUsageInfo;
|
||||
|
||||
public ReplaceExtendsListUsageInfo(PsiJavaCodeReferenceElement element, final PsiClass superClass, final PsiClass targetClass) {
|
||||
super(element);
|
||||
|
||||
mySafeDeleteUsageInfo = new SafeDeleteExtendsClassUsageInfo(element, superClass, targetClass);
|
||||
}
|
||||
|
||||
public void fixUsage() throws IncorrectOperationException {
|
||||
final PsiElement element = getElement();
|
||||
if (element != null) {
|
||||
element.delete();
|
||||
if (mySafeDeleteUsageInfo.isSafeDelete()) {
|
||||
mySafeDeleteUsageInfo.deleteElement();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
interface Int<T> {
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
interface Test<T> extends Int<T> {
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
interface Super<T> extends Int<T> {
|
||||
}
|
||||
interface Int<T> {
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
interface Test<T> extends Super<T>{
|
||||
}
|
||||
@@ -173,6 +173,10 @@ public class InlineSuperClassTest extends MultiFileTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testInterfaceHierarchyWithSubstitution() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTestMultipleSubclasses() throws Exception {
|
||||
doTest(new PerformAction() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user