mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
push down: warn if used member from anonymous won't be accessible (IDEA-155656)
This commit is contained in:
@@ -160,7 +160,8 @@ public class RefactoringConflictsUtil {
|
||||
PsiElement refElement = refExpr.resolve();
|
||||
if (refElement instanceof PsiMember) {
|
||||
PsiExpression qualifier = refExpr.getQualifierExpression();
|
||||
PsiClass qualifierAccessClass = (PsiClass)(qualifier != null && !(qualifier instanceof PsiSuperExpression) ? PsiUtil.getAccessObjectClass(qualifier).getElement() : accessClass);
|
||||
PsiClass qualifierAccessClass = (PsiClass)(qualifier != null && !(qualifier instanceof PsiSuperExpression) ? PsiUtil.getAccessObjectClass(qualifier).getElement()
|
||||
: accessClass != null && PsiTreeUtil.isAncestor(((PsiMember)refElement).getContainingClass(), accessClass, true) ? null : accessClass);
|
||||
if (!RefactoringHierarchyUtil.willBeInTargetClass(refElement, moving, targetClass, false) &&
|
||||
(qualifierAccessClass == null || !RefactoringHierarchyUtil.willBeInTargetClass(qualifierAccessClass, moving, targetClass, false))) {
|
||||
checkAccessibility((PsiMember)refElement, context, qualifierAccessClass, member, conflicts);
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
class A {
|
||||
private String prefix = "> ";
|
||||
|
||||
void f<caret>oo() {
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println(prefix);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
|
||||
class A {
|
||||
private String prefix = "> ";
|
||||
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
void foo() {
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println(prefix);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -89,7 +89,8 @@ public class PullUpMultifileTest extends MultiFileTestCase {
|
||||
}
|
||||
|
||||
public void testAccessibleViaInheritanceInsideAnonymousClass() {
|
||||
doTest("Method <b><code>method2Move()</code></b> uses method <b><code>A.bar()</code></b>, which is not accessible from the superclass");
|
||||
doTest("Method <b><code>method2Move()</code></b> uses method <b><code>A.bar()</code></b>, which is not accessible from the superclass",
|
||||
"Method <b><code>A.bar()</code></b> is protected and will not be accessible from method <b><code>method2Move()</code></b>.");
|
||||
}
|
||||
|
||||
public void testReuseSuperMethod() {
|
||||
|
||||
@@ -46,6 +46,7 @@ public class PushDownTest extends LightRefactoringTestCase {
|
||||
public void testFieldAndStaticReferencedClass() { doTest(); }
|
||||
public void testThisRefInAnonymous() { doTest(); }
|
||||
public void testSuperOverHierarchyConflict() { doTest(true); }
|
||||
public void testPrivateFieldUsedFromMovedAnonymous() { doTest(true); }
|
||||
public void testSuperOverHierarchy() { doTest(); }
|
||||
public void testMethodTypeParametersList() { doTest(); }
|
||||
public void testMethodFromInterfaceToAbstractClass() { doTest(); }
|
||||
|
||||
Reference in New Issue
Block a user