diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java index 7fb6a78b0bef..2d3480f02f26 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java @@ -16,7 +16,6 @@ package com.intellij.refactoring.util; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; @@ -217,7 +216,10 @@ public class RefactoringConflictsUtil { } else if (newContext instanceof PsiClass && refMember instanceof PsiField && refMember.getContainingClass() == member.getContainingClass()) { final PsiField fieldInSubClass = ((PsiClass)newContext).findFieldByName(refMember.getName(), false); - if (fieldInSubClass != null && fieldInSubClass != refMember) { + if (fieldInSubClass != null && + !refMember.hasModifierProperty(PsiModifier.STATIC) && + fieldInSubClass != refMember && + !member.hasModifierProperty(PsiModifier.STATIC)) { conflicts.putValue(refMember, CommonRefactoringUtil.capitalize(RefactoringUIUtil.getDescription(fieldInSubClass, true) + " would hide " + RefactoringUIUtil.getDescription(refMember, true) + " which is used by moved " + RefactoringUIUtil.getDescription(member, false))); diff --git a/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/after/Outer.java b/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/after/Outer.java new file mode 100644 index 000000000000..72b623ce54b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/after/Outer.java @@ -0,0 +1,13 @@ +class A { + + String myFoo; +} + +class B { + String myFoo; + + public static void foo(A a) { + System.out.println(myFoo); + System.out.println(a.myFoo); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/before/Outer.java b/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/before/Outer.java new file mode 100644 index 000000000000..a69b4f169185 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/staticProblemsShouldNotRaiseAConflict/before/Outer.java @@ -0,0 +1,12 @@ +class A { + public static void foo(A a) { + System.out.println(myFoo); + System.out.println(a.myFoo); + } + + String myFoo; +} + +class B { + String myFoo; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java index 8561f61120e7..51f896f1c9d2 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java @@ -194,6 +194,10 @@ public class MoveMembersTest extends MultiFileTestCase { doTest("ImportingClass.Constants", "ImportingClass.ImportantConstants", 0); } + public void testStaticProblemsShouldNotRaiseAConflict() throws Exception { + doTest("A", "B", 0); + } + public void testFromNestedToOuterMethodRef() throws Exception { final LanguageLevelProjectExtension projectExtension = LanguageLevelProjectExtension.getInstance(getProject()); final LanguageLevel oldLevel = projectExtension.getLanguageLevel();