inline superclass: preserve superclass extends/implements list (IDEA-69339)

This commit is contained in:
anna
2011-09-06 11:04:59 +02:00
parent 7a882556f7
commit d1a5dacee3
7 changed files with 68 additions and 2 deletions
@@ -44,6 +44,7 @@ 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;
@@ -65,13 +66,36 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori
return true;
}
});
final List<MemberInfo> members = memberInfoStorage.getClassMemberInfos(mySuperClass);
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;
}
protected UsageViewDescriptor createUsageViewDescriptor(final UsageInfo[] usages) {
return new InlineSuperClassUsageViewDescriptor(mySuperClass);
}
@@ -388,7 +388,11 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
final PsiClass aClass = (PsiClass)member;
if (!targetClass.isInheritor(aClass, false)) {
PsiJavaCodeReferenceElement classRef = factory.createClassReferenceElement(aClass);
targetClass.getImplementsList().add(classRef);
if (aClass.isInterface()) {
targetClass.getImplementsList().add(classRef);
} else {
targetClass.getExtendsList().add(classRef);
}
}
}
else {
@@ -0,0 +1,5 @@
interface Int {}
class Dummy {}
@@ -0,0 +1,11 @@
class Test extends Dummy implements Int {
Test(){}
public void main() {}
}
class U {
public static void main(String[] args) {
new Test().main();
}
}
@@ -0,0 +1,9 @@
interface Int {}
class Dummy {}
public class Super extends Dummy implements Int {
public void main() {}
}
@@ -0,0 +1,9 @@
class Test extends Super{
Test(){}
}
class U {
public static void main(String[] args) {
new Test().main();
}
}
@@ -171,6 +171,10 @@ public class InlineSuperClassTest extends MultiFileTestCase {
doTestMultipleSubclasses();
}
public void testInlineSuperclassExtendsList() throws Exception {
doTest();
}
private void doTestMultipleSubclasses() throws Exception {
doTest(new PerformAction() {
@Override