diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java index e7d1c863e8ef..2c4158f8e6ec 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java @@ -234,8 +234,14 @@ public class MoveJavaMemberHandler implements MoveMemberHandler { // might need to make modifiers explicit, see IDEADEV-11416 final PsiModifierList list = memberCopy.getModifierList(); assert list != null; - list.setModifierProperty(PsiModifier.STATIC, member.hasModifierProperty(PsiModifier.STATIC)); - list.setModifierProperty(PsiModifier.FINAL, member.hasModifierProperty(PsiModifier.FINAL)); + + if (!(member instanceof PsiClass && (((PsiClass)member).isEnum() || ((PsiClass)member).isInterface()))) { + list.setModifierProperty(PsiModifier.STATIC, member.hasModifierProperty(PsiModifier.STATIC)); + } + if (!(member instanceof PsiClass && ((PsiClass)member).isEnum())) { + list.setModifierProperty(PsiModifier.FINAL, member.hasModifierProperty(PsiModifier.FINAL)); + } + VisibilityUtil.setVisibility(list, VisibilityUtil.getVisibilityModifier(member.getModifierList())); } } diff --git a/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/after/Test.java b/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/after/Test.java new file mode 100644 index 000000000000..6b6ac89558c8 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/after/Test.java @@ -0,0 +1,8 @@ +class A { + public enum E {} + + public interface I {} +} + +interface B { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/before/Test.java b/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/before/Test.java new file mode 100644 index 000000000000..77d1b945c8ed --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/clearFinalStatic/before/Test.java @@ -0,0 +1,6 @@ +class A {} + +interface B { + enum E {} + interface I {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/MoveMembersTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/MoveMembersTest.java index 4c9e57cacb58..69a7dfac00ff 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/MoveMembersTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/MoveMembersTest.java @@ -84,6 +84,10 @@ public class MoveMembersTest extends LightMultiFileTestCase { public void testIDEADEV12448() { doTest("B", "A", false, 0); } + + public void testClearFinalStatic() { + doTest("B", "A", 0, 1); + } public void testFieldForwardRef() { doTest("A", "Constants", 0);