mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extract super: ensure extends reference reformatted (IDEA-149247)
This commit is contained in:
+5
-3
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -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,
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class Test<A, B extends Number> {
|
||||
public B m(A a){return null;}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class TestSubclass<A, B extends Number> extends Test<A, B> {
|
||||
}
|
||||
+3
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user