pull up: ignore conflicts coming from access object when it is also moved (IDEA-117671)

This commit is contained in:
Anna Kozlova
2013-12-06 17:26:22 +01:00
parent 63044bd118
commit da48448b83
4 changed files with 28 additions and 3 deletions
@@ -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);
}
}
@@ -0,0 +1,9 @@
import java.util.*;
class A {}
class B extends A {
void fo<caret>o() {
HM<String, String> hm = new HM<>();
for (Map.Entry<String, String> stringStringEntry : hm.entrySet()) {}
}
private static class HM<K, V> extends HashMap<K, V>{}
}
@@ -0,0 +1,11 @@
import java.util.*;
class A {
void foo() {
HM<String, String> hm = new HM<>();
for (Map.Entry<String, String> stringStringEntry : hm.entrySet()) {}
}
private static class HM<K, V> extends HashMap<K, V>{}
}
class B extends A {
}
@@ -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);
}