IDEA-151861 ExtractMethodObject should not move static methods into created inner...
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 26 Feb 2016 17:00:12 +0000 (20:00 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 26 Feb 2016 17:01:51 +0000 (20:01 +0300)
java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java
java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java [new file with mode: 0644]
java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java.after [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectTest.java

index db498b9f507a179529481bea0c1c8068bfb6dcb8..d13a4c7d368520b1fb63f382be90820845f9197f 100644 (file)
@@ -131,7 +131,8 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
 
 
       for (PsiMethod usedMethod : usedMethods) {
-        if (usedMethod.getModifierList().hasModifierProperty(PsiModifier.PRIVATE)) {
+        PsiModifierList modifiers = usedMethod.getModifierList();
+        if (modifiers.hasModifierProperty(PsiModifier.PRIVATE) && !modifiers.hasModifierProperty(PsiModifier.STATIC)) {
           PsiMethod toMove = usedMethod;
           for (PsiReference reference : ReferencesSearch.search(usedMethod)) {
             if (!PsiTreeUtil.isAncestor(getMethod(), reference.getElement(), false)) {
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java
new file mode 100644 (file)
index 0000000..497537d
--- /dev/null
@@ -0,0 +1,9 @@
+public class XXX {
+  void f<caret>oo() {
+    int i = 0 ;
+    bar(i);
+    System.out.println(i);
+  }
+
+  private static void bar(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateStaticMethodUsed.java.after
new file mode 100644 (file)
index 0000000..0c55f14
--- /dev/null
@@ -0,0 +1,15 @@
+public class XXX {
+  void foo() {
+      new InnerClass().invoke();
+  }
+
+    private static void bar(int i){}
+
+    private class InnerClass {
+        public void invoke() {
+            int i = 0 ;
+            bar(i);
+            System.out.println(i);
+        }
+    }
+}
\ No newline at end of file
index e638a62072636c87a51da7c93304a6ca8e5f9b7f..02b8eecfc1b34d0e2f5afb0f66889ecd68c7671e 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 /*
  * User: anna
  * Date: 06-May-2008
@@ -117,6 +133,10 @@ public class ExtractMethodObjectTest extends LightRefactoringTestCase {
     doTest();
   }
 
+  public void testWithPrivateStaticMethodUsed() throws Exception {
+    doTest();
+  }
+
   public void testWithPrivateMethodWhichCantBeMoved() throws Exception {
     doTest();
   }