extract superclass from anonymous (IDEA-115663)

This commit is contained in:
Anna Kozlova
2013-12-12 13:50:35 +04:00
parent 4268473305
commit 3c20d47095
3 changed files with 19 additions and 7 deletions

View File

@@ -66,8 +66,11 @@ public class ExtractSuperClassUtil {
assert superClassModifierList != null;
superClassModifierList.setModifierProperty(PsiModifier.FINAL, false);
final PsiReferenceList subClassExtends = subclass.getExtendsList();
assert subClassExtends != null: subclass;
copyPsiReferenceList(subClassExtends, superclass.getExtendsList());
if (subClassExtends != null) {
copyPsiReferenceList(subClassExtends, superclass.getExtendsList());
} else if (subclass instanceof PsiAnonymousClass) {
superclass.getExtendsList().add(((PsiAnonymousClass)subclass).getBaseClassReference());
}
// create constructors if neccesary
PsiMethod[] constructors = getCalledBaseConstructors(subclass);
@@ -76,11 +79,17 @@ public class ExtractSuperClassUtil {
}
// clear original class' "extends" list
clearPsiReferenceList(subclass.getExtendsList());
if (subClassExtends != null) {
clearPsiReferenceList(subclass.getExtendsList());
}
// make original class extend extracted superclass
PsiJavaCodeReferenceElement ref = createExtendingReference(superclass, subclass, selectedMemberInfos);
subclass.getExtendsList().add(ref);
if (subClassExtends != null) {
subclass.getExtendsList().add(ref);
} else if (subclass instanceof PsiAnonymousClass) {
((PsiAnonymousClass)subclass).getBaseClassReference().replace(ref);
}
PullUpProcessor pullUpHelper = new PullUpProcessor(subclass, superclass, selectedMemberInfos,
javaDocPolicy

View File

@@ -70,7 +70,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HelpID.EXTRACT_SUPERCLASS);
return;
}
if (element instanceof PsiClass && !(element instanceof PsiAnonymousClass)) {
if (element instanceof PsiClass) {
invoke(project, new PsiElement[]{element}, dataContext);
return;
}
@@ -138,7 +138,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
final MultiMap<PsiElement,String> conflicts = new MultiMap<PsiElement, String>();
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
public void run() {
final PsiClass superClass = mySubclass.getExtendsListTypes().length > 0 ? mySubclass.getSuperClass() : null;
final PsiClass superClass = mySubclass.getExtendsListTypes().length > 0 || mySubclass instanceof PsiAnonymousClass ? mySubclass.getSuperClass() : null;
conflicts.putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier(), false));
}
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;

View File

@@ -27,6 +27,8 @@ import com.intellij.openapi.util.Pass;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.ElementPresentationUtil;
import com.intellij.psi.presentation.java.SymbolPresentationUtil;
import com.intellij.refactoring.MoveDestination;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.RefactoringBundle;
@@ -96,7 +98,8 @@ public abstract class JavaExtractSuperBaseDialog extends ExtractSuperBaseDialog<
protected JTextField createSourceClassField() {
JTextField result = new JTextField();
result.setEditable(false);
result.setText(mySourceClass.getQualifiedName());
final String qualifiedName = mySourceClass.getQualifiedName();
result.setText(qualifiedName != null ? qualifiedName : SymbolPresentationUtil.getSymbolPresentableText(mySourceClass));
return result;
}