diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index 42f854d9c799..dcbb81593dcf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -589,6 +589,13 @@ public class GenerateMembersUtil { } } + public static void copyAnnotations(@NotNull PsiModifierListOwner source, @NotNull PsiModifierListOwner target, String... skipAnnotations) { + PsiModifierList targetModifierList = target.getModifierList(); + PsiModifierList sourceModifierList = source.getModifierList(); + if (targetModifierList == null || sourceModifierList == null) return; + copyAnnotations(sourceModifierList, targetModifierList, skipAnnotations); + } + //java bean getters/setters public static PsiMethod generateSimpleGetterPrototype(@NotNull PsiField field) { return generatePrototype(field, PropertyUtilBase.generateGetterPrototype(field)); diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/JavaPushDownDelegate.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/JavaPushDownDelegate.java index 82db9383035f..837289c3e142 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/JavaPushDownDelegate.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/JavaPushDownDelegate.java @@ -17,6 +17,7 @@ package com.intellij.refactoring.memberPushDown; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.ChangeContextUtil; +import com.intellij.codeInsight.generation.GenerateMembersUtil; import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.codeInsight.intention.impl.CreateClassDialog; import com.intellij.codeInsight.intention.impl.CreateSubclassAction; @@ -277,6 +278,12 @@ public class JavaPushDownDelegate extends PushDownDelegatem(@Ann String s); +} + +class IImpl implements I { + @Override + public void m(String s) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pushDown/CopyAnnotationsFromSuper_after.java b/java/java-tests/testData/refactoring/pushDown/CopyAnnotationsFromSuper_after.java new file mode 100644 index 000000000000..810092e3bcff --- /dev/null +++ b/java/java-tests/testData/refactoring/pushDown/CopyAnnotationsFromSuper_after.java @@ -0,0 +1,8 @@ + +@interface Ann {} +interface I { +} + +class IImpl implements I { + public void m(@Ann String s) { } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java index febf5b517bd6..727c67e48cda 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java @@ -81,6 +81,7 @@ public class PushDownTest extends LightRefactoringTestCase { public void testInterfaceStaticMethodToClass() { doTest(); } public void testThisSuperExpressions() {doTest();} public void testMethodsInheritedFromSuper() {doTest();} + public void testCopyAnnotationsFromSuper() {doTest();} public void testInterfaceMethodToClass() { doTest();}