extract superclass: hide implements base type from chooser for anonymous classes; fixed implements/extends list in the generated superclass

This commit is contained in:
Anna Kozlova
2016-06-01 21:19:15 +03:00
parent a8e849664a
commit d74f07e07c
3 changed files with 18 additions and 4 deletions
@@ -78,8 +78,16 @@ public class ExtractSuperClassUtil {
final PsiReferenceList subClassExtends = subclass.getExtendsList();
if (subClassExtends != null) {
copyPsiReferenceList(subClassExtends, superclass.getExtendsList());
} else if (subclass instanceof PsiAnonymousClass) {
superclass.getExtendsList().add(((PsiAnonymousClass)subclass).getBaseClassReference());
}
else if (subclass instanceof PsiAnonymousClass) {
PsiJavaCodeReferenceElement classReference = ((PsiAnonymousClass)subclass).getBaseClassReference();
PsiElement baseClass = classReference.resolve();
if (baseClass instanceof PsiClass && ((PsiClass)baseClass).isInterface()) {
superclass.getImplementsList().add(classReference);
}
else {
superclass.getExtendsList().add(classReference);
}
}
// create constructors if neccesary
@@ -40,6 +40,7 @@ import com.intellij.refactoring.util.DocCommentPolicy;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
@@ -98,13 +99,18 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
}
final List<MemberInfo> memberInfos = MemberInfo.extractClassMembers(mySubclass, new MemberInfo.Filter<PsiMember>() {
List<MemberInfo> memberInfos = MemberInfo.extractClassMembers(mySubclass, new MemberInfo.Filter<PsiMember>() {
@Override
public boolean includeMember(PsiMember element) {
return true;
}
}, false);
if (mySubclass instanceof PsiAnonymousClass) {
memberInfos = ContainerUtil.filter(memberInfos, memberInfo -> !(memberInfo.getMember() instanceof PsiClass &&
memberInfo.getOverrides() != null));
}
final ExtractSuperclassDialog dialog =
new ExtractSuperclassDialog(project, mySubclass, memberInfos, this);
if (!dialog.showAndGet() || !dialog.isExtractSuperclass()) {
@@ -1,2 +1,2 @@
public abstract class TestSubclass extends Runnable {
public abstract class TestSubclass implements Runnable {
}