move to inner: ignore package local access if class was moved to interface (IDEA-39296)

This commit is contained in:
anna
2010-02-01 17:13:37 +03:00
parent efad1cbeeb
commit c81ea3ceca
11 changed files with 30 additions and 1 deletions
@@ -353,7 +353,7 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
private boolean isInaccessibleFromTarget(final PsiElement element, final String visibility) {
final PsiPackage elementPackage = JavaDirectoryService.getInstance().getPackage(element.getContainingFile().getContainingDirectory());
return !PsiUtil.isAccessible(myTargetClass, element, null) ||
(visibility.equals(PsiModifier.PACKAGE_LOCAL) && !Comparing.equal(elementPackage, myTargetPackage));
(!myTargetClass.isInterface() && visibility.equals(PsiModifier.PACKAGE_LOCAL) && !Comparing.equal(elementPackage, myTargetPackage));
}
private void detectInaccessibleMemberUsages(final ConflictsCollector collector) {
@@ -0,0 +1,7 @@
package pack1;
import pack2.A;
class Usage {
A.Class1 cl1;
}
@@ -0,0 +1,6 @@
package pack2;
public interface A {
static class Class1 {
}
}
@@ -0,0 +1,4 @@
package pack1;
class Usage {
Class1 cl1;
}
@@ -0,0 +1,4 @@
package pack2;
public interface A {
}
@@ -79,6 +79,10 @@ public class MoveClassToInnerTest extends CodeInsightTestCase {
doTest(new String[] { "pack1.Class1" }, "pack1.A");
}
public void testLocallyUsedPackageLocalToPublicInterface() throws Exception {
doTest(new String[]{"pack1.Class1"}, "pack2.A");
}
public void testPackageLocalClass() throws Exception {
doTestConflicts("pack1.Class1", "pack2.A", "Field <b><code>Class1.c2</code></b> uses a package-local class <b><code>pack1.Class2</code></b>.");
}