mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
extract superclass from anonymous (IDEA-115663)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user