move inner to upper level: don't remove qualifier from inner types used in extends/implements list (IDEA-140839)

This commit is contained in:
Anna Kozlova
2015-05-29 17:42:28 +02:00
parent f2ebc25583
commit cde47646e5
5 changed files with 36 additions and 5 deletions
@@ -20,8 +20,6 @@ import com.intellij.codeInsight.CodeInsightUtilCore;
import com.intellij.ide.util.EditorHelper;
import com.intellij.lang.findUsages.DescriptiveNameUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
@@ -38,7 +36,9 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.move.MoveCallback;
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil;
import com.intellij.refactoring.rename.RenameUtil;
import com.intellij.refactoring.util.*;
import com.intellij.refactoring.util.ConflictsUtil;
import com.intellij.refactoring.util.NonCodeUsageInfo;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.util.Function;
@@ -193,8 +193,11 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor {
PsiJavaCodeReferenceElement parentRef = (PsiJavaCodeReferenceElement)element.getParent();
PsiElement parentRefElement = parentRef.resolve();
if (parentRefElement instanceof PsiClass) { // reference to inner class inside our inner
parentRef.getQualifier().delete();
continue;
final PsiReferenceList referenceList = PsiTreeUtil.getTopmostParentOfType(parentRef, PsiReferenceList.class);
if (referenceList == null || referenceList.getParent() != newClass) {
parentRef.getQualifier().delete();
continue;
}
}
}
ref.bindToElement(newClass);
@@ -0,0 +1,8 @@
package p;
import java.util.List;
abstract class A implements List<A.B> {
static class B {
}
}
@@ -0,0 +1,6 @@
package p;
import java.util.List;
public class Main {
}
@@ -0,0 +1,10 @@
package p;
import java.util.List;
public class Main {
static abstract class A implements List<A.B> {
static class B {
}
}
}
@@ -101,6 +101,10 @@ public class MoveInnerTest extends MultiFileTestCase {
doTest(createAction("p.A.E", "E", false, null, false, false, null));
}
public void testInnerInnerClassUsedInTypeParams() throws Exception {
doTest(createAction("p.Main.A", "A", false, null, false, false, null));
}
public void testEnumConstructorVisibility() throws Exception { // IDEADEV-28619
doTest(createAction("p.A.E", "E", false, null, false, false, "p2"));
}