From f522564dbc0716a08c0b897f4fa390c84785e3bb Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Mon, 11 Dec 2017 20:01:10 +0100 Subject: [PATCH] push down: conflict if move static to local (IDEA-182514) --- .../refactoring/memberPushDown/PushDownConflicts.java | 7 +++++++ .../testData/refactoring/pushDown/StaticToLocal.java | 9 +++++++++ .../refactoring/pushDown/StaticToLocal_after.java | 9 +++++++++ .../com/intellij/java/refactoring/PushDownTest.java | 6 ++++++ 4 files changed, 31 insertions(+) create mode 100644 java/java-tests/testData/refactoring/pushDown/StaticToLocal.java create mode 100644 java/java-tests/testData/refactoring/pushDown/StaticToLocal_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownConflicts.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownConflicts.java index 63f28bc88c72..f0d149f9730b 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownConflicts.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownConflicts.java @@ -21,6 +21,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.MethodSignatureUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.refactoring.util.RefactoringConflictsUtil; @@ -203,6 +204,12 @@ public class PushDownConflicts { } } } + + if (movedMember.hasModifierProperty(PsiModifier.STATIC) && + PsiUtil.getEnclosingStaticElement(targetClass, null) == null && + !(targetClass.getParent() instanceof PsiFile)) { + myConflicts.putValue(movedMember, "Static " + RefactoringUIUtil.getDescription(movedMember, false) + " can't be pushed to non-static " + RefactoringUIUtil.getDescription(targetClass, false)); + } } private class UsedMovedMembersConflictsCollector extends ClassMemberReferencesVisitor { diff --git a/java/java-tests/testData/refactoring/pushDown/StaticToLocal.java b/java/java-tests/testData/refactoring/pushDown/StaticToLocal.java new file mode 100644 index 000000000000..72d141a821c5 --- /dev/null +++ b/java/java-tests/testData/refactoring/pushDown/StaticToLocal.java @@ -0,0 +1,9 @@ +class Foo { + public static void foo() { + + } + + void m() { + class FooExt extends Foo { } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pushDown/StaticToLocal_after.java b/java/java-tests/testData/refactoring/pushDown/StaticToLocal_after.java new file mode 100644 index 000000000000..72d141a821c5 --- /dev/null +++ b/java/java-tests/testData/refactoring/pushDown/StaticToLocal_after.java @@ -0,0 +1,9 @@ +class Foo { + public static void foo() { + + } + + void m() { + class FooExt extends Foo { } + } +} \ 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 2547994c34ff..fc8a9790eada 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/PushDownTest.java @@ -121,6 +121,12 @@ public class PushDownTest extends LightRefactoringTestCase { }); } + public void testStaticToLocal() { + doTest(conflicts -> { + assertSameElements(conflicts.values(), Collections.singletonList("Static method foo() can't be pushed to non-static class FooExt")); + }); + } + private void doTest() { doTest(false); }