move to inner: do not raise a conflict when move class with private inner class (IDEA-104986)

This commit is contained in:
anna
2013-04-10 15:11:51 +02:00
parent 1b659311df
commit a9544ca296
11 changed files with 39 additions and 1 deletions
@@ -301,6 +301,9 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
ReferencesSearch.search(member).forEach(new Processor<PsiReference>() {
public boolean process(final PsiReference psiReference) {
PsiElement element = psiReference.getElement();
for (PsiClass psiClass : myClassesToMove) {
if (PsiTreeUtil.isAncestor(psiClass, element, false)) return true;
}
if (isInaccessibleFromTarget(element, PsiModifier.PACKAGE_LOCAL)) {
collector.addConflict(psiReference.resolve(), element);
}
@@ -0,0 +1,8 @@
package pack2;
public class A {
public static class Class1 {
class Inner {}
Inner i;
}
}
@@ -0,0 +1,7 @@
package packUser;
import pack2.A;
public class Class2 {
A.Class1 myClass1;
}
@@ -0,0 +1,6 @@
package pack1;
public class Class1 {
class Inner {}
Inner i;
}
@@ -0,0 +1,4 @@
package pack2;
public class A {
}
@@ -0,0 +1,7 @@
package packUser;
import pack1.Class1;
public class Class2 {
Class1 myClass1;
}
@@ -17,7 +17,6 @@ package com.intellij.refactoring;
import com.intellij.JavaTestUtil;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
@@ -50,6 +49,10 @@ public class MoveClassToInnerTest extends RefactoringTestCase {
doTest(new String[] { "pack1.Class1" }, "pack2.A");
}
public void testInnerInsideMoved() throws Exception {
doTest(new String[] { "pack1.Class1" }, "pack2.A");
}
public void testInsertInnerClassImport() throws Exception {
final boolean imports = CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS;
try {