From b01b21b30f1a5b36ea785c97f6a3247cd74b0a10 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 2 Sep 2011 19:25:03 +0200 Subject: [PATCH] rationalize static method calls after pull up --- .../memberPullUp/PullUpHelper.java | 20 ++++++++++++++++++- .../refactoring/pullUp/UpdateStaticRefs.java | 10 ++++++++++ .../pullUp/UpdateStaticRefs_after.java | 11 ++++++++++ .../com/intellij/refactoring/PullUpTest.java | 10 ++++++---- 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java create mode 100644 java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java index dc1ad6118bde..d110d6e1943a 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java @@ -93,12 +93,30 @@ public class PullUpHelper extends BaseRefactoringProcessor{ @NotNull protected UsageInfo[] findUsages() { - return new UsageInfo[0]; + final List result = new ArrayList(); + for (MemberInfo memberInfo : myMembersToMove) { + final PsiMember member = memberInfo.getMember(); + if (member.hasModifierProperty(PsiModifier.STATIC)) { + for (PsiReference reference : ReferencesSearch.search(member)) { + result.add(new UsageInfo(reference)); + } + } + } + return result.isEmpty() ? UsageInfo.EMPTY_ARRAY : result.toArray(new UsageInfo[result.size()]); } protected void performRefactoring(UsageInfo[] usages) { moveMembersToBase(); moveFieldInitializations(); + for (UsageInfo usage : usages) { + PsiElement element = usage.getElement(); + if (element instanceof PsiReferenceExpression) { + PsiExpression qualifierExpression = ((PsiReferenceExpression)element).getQualifierExpression(); + if (qualifierExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifierExpression).resolve() == mySourceClass) { + ((PsiReferenceExpression)qualifierExpression).bindToElement(myTargetSuperClass); + } + } + } processMethodsDuplicates(); } diff --git a/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java new file mode 100644 index 000000000000..0d15177511f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java @@ -0,0 +1,10 @@ +class Foo {} +class FooImpl extends Foo { + public static void foo(){} + +} +class U { + public static void main(String[] args) { + FooImpl.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java new file mode 100644 index 000000000000..a267d992bde3 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java @@ -0,0 +1,11 @@ +class Foo { + public static void foo(){} +} +class FooImpl extends Foo { + +} +class U { + public static void main(String[] args) { + Foo.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java index fb6ec06ec21d..7c637436c796 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java @@ -35,7 +35,6 @@ public class PullUpTest extends LightCodeInsightTestCase { doTest(new RefactoringTestUtil.MemberDescriptor("x", PsiField.class), new RefactoringTestUtil.MemberDescriptor("getX", PsiMethod.class), new RefactoringTestUtil.MemberDescriptor("setX", PsiMethod.class)); - } public void testPullUpInheritedStaticClasses() throws Exception { @@ -46,7 +45,7 @@ public class PullUpTest extends LightCodeInsightTestCase { public void testPullUpPrivateInnerClassWithPrivateConstructor() throws Exception { doTest(new RefactoringTestUtil.MemberDescriptor("C", PsiClass.class)); } - + public void testPullUpAndAbstractize() throws Exception { doTest(new RefactoringTestUtil.MemberDescriptor("a", PsiMethod.class), new RefactoringTestUtil.MemberDescriptor("b", PsiMethod.class, true)); @@ -102,6 +101,10 @@ public class PullUpTest extends LightCodeInsightTestCase { doTest(false, new RefactoringTestUtil.MemberDescriptor("I", PsiClass.class)); } + public void testUpdateStaticRefs() throws Exception { + doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class)); + } + private void doTest(RefactoringTestUtil.MemberDescriptor... membersToFind) throws Exception { doTest(true, membersToFind); } @@ -121,7 +124,7 @@ public class PullUpTest extends LightCodeInsightTestCase { } MemberInfo[] infos = RefactoringTestUtil.findMembers(sourceClass, membersToFind); - final int[] countMoved = new int[] {0}; + final int[] countMoved = new int[]{0}; final MoveMemberListener listener = new MoveMemberListener() { @Override public void memberMoved(PsiClass aClass, PsiMember member) { @@ -143,5 +146,4 @@ public class PullUpTest extends LightCodeInsightTestCase { protected String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath(); } - }