diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java index d79de6646780..a64c2cffef62 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java @@ -202,7 +202,10 @@ public class ChangeContextUtil { if (refMember.hasModifierProperty(PsiModifier.STATIC)){ PsiElement refElement = refExpr.resolve(); if (!manager.areElementsEquivalent(refMember, refElement)){ - refExpr.setQualifierExpression(factory.createReferenceExpression(containingClass)); + final PsiClass currentClass = PsiTreeUtil.getParentOfType(refExpr, PsiClass.class); + if (currentClass == null || !InheritanceUtil.isInheritorOrSelf(currentClass, containingClass, true)) { + refExpr.setQualifierExpression(factory.createReferenceExpression(containingClass)); + } } } else { diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p1/StaticMethod.java b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p1/StaticMethod.java new file mode 100644 index 000000000000..bd1ea3518601 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p1/StaticMethod.java @@ -0,0 +1,4 @@ +package p1; +public class StaticMethod { + public static int bar() {return 1;} +} diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p2/Test.java b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p2/Test.java new file mode 100644 index 000000000000..8cbeea59015b --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p2/Test.java @@ -0,0 +1,12 @@ +package p2; +import p1.StaticMethod; + +import java.math.BigDecimal; +public class Test extends BigDecimal { + Test() {super(0);} + void test() { + valueOf(0); + valueOf(StaticMethod.bar()); + valueOf(StaticMethod.bar()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p2/empty.txt b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/after/p2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/StaticMethod.java b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/StaticMethod.java new file mode 100644 index 000000000000..bd1ea3518601 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/StaticMethod.java @@ -0,0 +1,4 @@ +package p1; +public class StaticMethod { + public static int bar() {return 1;} +} diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/Test.java b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/Test.java new file mode 100644 index 000000000000..0f0d205f652a --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p1/Test.java @@ -0,0 +1,10 @@ +package p1; +import java.math.BigDecimal; +public class Test extends BigDecimal { + Test() {super(0);} + void test() { + valueOf(0); + valueOf(StaticMethod.bar()); + valueOf(StaticMethod.bar()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p2/empty.txt b/java/java-tests/testData/refactoring/moveClass/qualifiedRef/before/p2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java index c646301c664c..98c749655c2d 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java @@ -89,6 +89,10 @@ public class MoveClassTest extends RefactoringTestCase { public void testUnusedImport() throws Exception { doTest("unusedImport", new String[]{"p2.F2"}, "p1"); } + + public void testQualifiedReferenceAfterFailedMethodConflictResolution() throws Exception { + doTest("qualifiedRef", new String[]{"p1.Test"}, "p2"); + } private void doTest(@NonNls String testName, @NonNls String[] classNames, @NonNls String newPackageName) throws Exception{ String root = JavaTestUtil.getJavaTestDataPath() + "/refactoring/moveClass/" + testName;