From da48448b83280217fc9d0a9bcaba2f15dab66217 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 6 Dec 2013 16:33:11 +0100 Subject: [PATCH] pull up: ignore conflicts coming from access object when it is also moved (IDEA-117671) --- .../refactoring/util/RefactoringConflictsUtil.java | 7 ++++--- .../pullUp/PublicMethodFromPrivateClassConflict.java | 9 +++++++++ .../PublicMethodFromPrivateClassConflict_after.java | 11 +++++++++++ .../testSrc/com/intellij/refactoring/PullUpTest.java | 4 ++++ 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict.java create mode 100644 java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict_after.java 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 2ec39e07542c..aece13de0764 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringConflictsUtil.java @@ -149,9 +149,10 @@ public class RefactoringConflictsUtil { PsiReferenceExpression refExpr = (PsiReferenceExpression)scope; PsiElement refElement = refExpr.resolve(); if (refElement instanceof PsiMember) { - if (!RefactoringHierarchyUtil.willBeInTargetClass(refElement, moving, targetClass, false)) { - PsiExpression qualifier = refExpr.getQualifierExpression(); - PsiClass accessClass = (PsiClass)(qualifier != null ? PsiUtil.getAccessObjectClass(qualifier).getElement() : null); + PsiExpression qualifier = refExpr.getQualifierExpression(); + PsiClass accessClass = (PsiClass)(qualifier != null ? PsiUtil.getAccessObjectClass(qualifier).getElement() : null); + if (!RefactoringHierarchyUtil.willBeInTargetClass(refElement, moving, targetClass, false) && + (accessClass == null || !RefactoringHierarchyUtil.willBeInTargetClass(accessClass, moving, targetClass, false))) { checkAccessibility((PsiMember)refElement, context, accessClass, member, conflicts); } } diff --git a/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict.java b/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict.java new file mode 100644 index 000000000000..a028329a4693 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict.java @@ -0,0 +1,9 @@ +import java.util.*; +class A {} +class B extends A { + void foo() { + HM hm = new HM<>(); + for (Map.Entry stringStringEntry : hm.entrySet()) {} + } + private static class HM extends HashMap{} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict_after.java b/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict_after.java new file mode 100644 index 000000000000..96932a3c1923 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PublicMethodFromPrivateClassConflict_after.java @@ -0,0 +1,11 @@ +import java.util.*; +class A { + void foo() { + HM hm = new HM<>(); + for (Map.Entry stringStringEntry : hm.entrySet()) {} + } + + private static class HM extends HashMap{} +} +class B extends A { +} \ 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 aa539bd4d801..cbf095578213 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java @@ -147,6 +147,10 @@ public class PullUpTest extends LightRefactoringTestCase { doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class)); } + public void testPublicMethodFromPrivateClassConflict() { + doTest(false, new RefactoringTestUtil.MemberDescriptor("HM", PsiClass.class), new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class)); + } + private void doTest(RefactoringTestUtil.MemberDescriptor... membersToFind) { doTest(true, membersToFind); }