diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java index 92c49547076e..913412636ea9 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java @@ -17,6 +17,8 @@ package com.intellij.refactoring.memberPushDown; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.ChangeContextUtil; +import com.intellij.codeInsight.generation.OverrideImplementExploreUtil; +import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.codeInsight.intention.impl.CreateClassDialog; import com.intellij.codeInsight.intention.impl.CreateSubclassAction; import com.intellij.openapi.application.ApplicationManager; @@ -473,6 +475,9 @@ public class PushDownProcessor extends BaseRefactoringProcessor { } myJavaDocPolicy.processNewJavaDoc(((PsiMethod)newMember).getDocComment()); } + if (memberInfo.isToAbstract()) { + OverrideImplementUtil.annotateOnOverrideImplement((PsiMethod)newMember, targetClass, (PsiMethod)memberInfo.getMember()); + } } else { //abstract method: remove @Override final PsiAnnotation annotation = AnnotationUtil.findAnnotation(methodBySignature, "java.lang.Override"); diff --git a/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract.java b/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract.java new file mode 100644 index 000000000000..dc32bd65b0d9 --- /dev/null +++ b/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract.java @@ -0,0 +1,6 @@ +interface Test { + void bar(); +} + +class Child implements Test { +} diff --git a/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract_after.java b/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract_after.java new file mode 100644 index 000000000000..592f48687ff0 --- /dev/null +++ b/java/java-tests/testData/refactoring/pushDown/InsertOverrideWhenKeepAbstract_after.java @@ -0,0 +1,8 @@ +interface Test { + void bar(); +} + +class Child implements Test { + @Override + public abstract void bar(); +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/PushDownTest.java b/java/java-tests/testSrc/com/intellij/refactoring/PushDownTest.java index db86af358328..eb06a85f99a5 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PushDownTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PushDownTest.java @@ -63,6 +63,10 @@ public class PushDownTest extends LightRefactoringTestCase { public void testInterfaceConstants() { doTest();} + public void testInsertOverrideWhenKeepAbstract() throws Exception { + doTestImplements(true); + } + private void doTest() { doTest(false); } @@ -107,6 +111,10 @@ public class PushDownTest extends LightRefactoringTestCase { } private void doTestImplements() { + doTestImplements(false); + } + + private void doTestImplements(boolean toAbstract) { configureByFile(BASE_PATH + getTestName(false) + ".java"); PsiClass currentClass = JavaPsiFacade.getInstance(getProject()).findClass("Test", GlobalSearchScope.projectScope(getProject())); @@ -114,6 +122,9 @@ public class PushDownTest extends LightRefactoringTestCase { List members = memberInfoStorage.getClassMemberInfos(currentClass); for (MemberInfo member : members) { member.setChecked(true); + if (toAbstract) { + member.setToAbstract(toAbstract); + } } new PushDownProcessor(getProject(), members.toArray(new MemberInfo[members.size()]), currentClass,