extract super: ensure extends reference reformatted (IDEA-149247)

This commit is contained in:
Anna Kozlova
2015-12-28 10:27:00 +01:00
parent 6594af0dc1
commit 930bbc66e2
6 changed files with 20 additions and 5 deletions
@@ -26,6 +26,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.RefactoringBundle;
@@ -140,20 +141,21 @@ public class ExtractInterfaceHandler implements RefactoringActionHandler, Elemen
String interfaceName,
MemberInfo[] selectedMembers,
DocCommentPolicy javaDocPolicy) throws IncorrectOperationException {
aClass.getProject().getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
final Project project = aClass.getProject();
project.getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
.refactoringStarted(ExtractSuperClassUtil.REFACTORING_EXTRACT_SUPER_ID, ExtractSuperClassUtil.createBeforeData(aClass, selectedMembers));
final PsiClass anInterface = JavaDirectoryService.getInstance().createInterface(targetDir, interfaceName);
try {
PsiJavaCodeReferenceElement ref = ExtractSuperClassUtil.createExtendingReference(anInterface, aClass, selectedMembers);
final PsiReferenceList referenceList = aClass.isInterface() ? aClass.getExtendsList() : aClass.getImplementsList();
assert referenceList != null;
referenceList.add(ref);
CodeStyleManager.getInstance(project).reformat(referenceList.add(ref));
PullUpProcessor pullUpHelper = new PullUpProcessor(aClass, anInterface, selectedMembers, javaDocPolicy);
pullUpHelper.moveMembersToBase();
return anInterface;
}
finally {
aClass.getProject().getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
project.getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC)
.refactoringDone(ExtractSuperClassUtil.REFACTORING_EXTRACT_SUPER_ID, ExtractSuperClassUtil.createAfterData(anInterface));
}
}
@@ -95,10 +95,11 @@ public class ExtractSuperClassUtil {
// make original class extend extracted superclass
PsiJavaCodeReferenceElement ref = createExtendingReference(superclass, subclass, selectedMemberInfos);
final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
if (subClassExtends != null) {
subclass.getExtendsList().add(ref);
codeStyleManager.reformat(subclass.getExtendsList().add(ref));
} else if (subclass instanceof PsiAnonymousClass) {
((PsiAnonymousClass)subclass).getBaseClassReference().replace(ref);
codeStyleManager.reformat(((PsiAnonymousClass)subclass).getBaseClassReference().replace(ref));
}
PullUpProcessor pullUpHelper = new PullUpProcessor(subclass, superclass, selectedMemberInfos,
@@ -0,0 +1,3 @@
public class Test<A, B extends Number> {
public B m(A a){return null;}
}
@@ -0,0 +1,2 @@
public class TestSubclass<A, B extends Number> extends Test<A, B> {
}
@@ -0,0 +1,3 @@
public class Test<A, B extends Number> {
public B m(A a){return null;}
}
@@ -59,6 +59,10 @@ public class ExtractSuperClassTest extends RefactoringTestCase {
doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("m", PsiMethod.class));
}
public void testMultipleTypeParameters() throws Exception {
doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("m", PsiMethod.class));
}
public void testEmptyForeach() throws Exception {
doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("m", PsiMethod.class));