diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index def7f01ff2c3..ff4231c3f728 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -648,12 +648,11 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme PsiReferenceParameterList parameterList = getParameterList(); if (parameterList != null) { PsiElement cur = getReferenceNameElement(); - do { + while (cur != parameterList) { assert cur != null : getText(); cur = cur.getNextSibling(); text.append(cur.getText()); } - while (cur != parameterList); } PsiJavaCodeReferenceElement ref; @@ -664,6 +663,11 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme throw new IncorrectOperationException(e.getMessage() + " [qname=" + qName + " class=" + aClass + ";" + aClass.getClass().getName() + "]"); } + PsiReferenceParameterList refParameterList = ref.getParameterList(); + if (parameterList != null && refParameterList != null) { + refParameterList.replace(parameterList); + } + getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode()); if (!preserveQualification) { diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/after/Test.java new file mode 100644 index 000000000000..f59bc0fb764d --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/after/Test.java @@ -0,0 +1,12 @@ +class Test { + static { + List l = new ArrayList<>(); + List l1 = new ArrayList<>(); + } + + private static class MethodCandidate { + } + + private static class MethodCandidate1 { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Super.java new file mode 100644 index 000000000000..4b2c64065e79 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Super.java @@ -0,0 +1,12 @@ +class Super { + private static class MethodCandidate { + } + + static { + List l = new ArrayList<>(); + List l1 = new ArrayList<>(); + } + + private static class MethodCandidate1 { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Test.java new file mode 100644 index 000000000000..f9ac43312c5e --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/referencesOnInnerClasses/before/Test.java @@ -0,0 +1,2 @@ +class Test extends Super{ +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java index ac2ccf3b7c56..6bc438bc2aab 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java @@ -77,6 +77,7 @@ public class InlineSuperClassTest extends MultiFileTestCase { public void testTypeParameterBound() { doTest();} public void testInlineInterfaceDoNotChangeConstructor() { doTest(); } public void testArrayTypeElements() { doTest(); } + public void testReferencesOnInnerClasses() { doTest(); } public void testConflictOnMemberNotAccessibleThroughInheritor() { doTest(true, false); } public void testOneAndKeepReferencesInAnotherInheritor() { doTest(false, true);