diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java index a95d6ef78a7f..fb76c4ad7687 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java @@ -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); diff --git a/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/A.java new file mode 100644 index 000000000000..c28a8708f62a --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/A.java @@ -0,0 +1,8 @@ +package p; + +import java.util.List; + +abstract class A implements List { + static class B { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/Main.java b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/Main.java new file mode 100644 index 000000000000..97a22e77614a --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/after/p/Main.java @@ -0,0 +1,6 @@ +package p; + +import java.util.List; + +public class Main { +} diff --git a/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/before/p/Main.java b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/before/p/Main.java new file mode 100644 index 000000000000..3f22633d29f3 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInner/innerInnerClassUsedInTypeParams/before/p/Main.java @@ -0,0 +1,10 @@ +package p; + +import java.util.List; + +public class Main { + static abstract class A implements List { + static class B { + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveInnerTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveInnerTest.java index c56ff8219d1f..f0ef6cdbc931 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveInnerTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveInnerTest.java @@ -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")); }