diff --git a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java index 1c9de953f11f..8b4ceef2605b 100644 --- a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java @@ -354,7 +354,7 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori public void visitTypeElement(final PsiTypeElement typeElement) { super.visitTypeElement(typeElement); final PsiType superClassType = typeElement.getType(); - if (PsiUtil.resolveClassInType(superClassType) == mySuperClass) { + if (PsiUtil.resolveClassInClassTypeOnly(superClassType) == mySuperClass) { PsiSubstitutor subst = getSuperClassSubstitutor(superClassType, targetClassType, resolveHelper, targetClass); replacementMap.put(new UsageInfo(typeElement), elementFactory.createTypeElement(elementFactory.createType(targetClass, subst))); } @@ -367,8 +367,11 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori if (PsiUtil.resolveClassInType(superClassType) == mySuperClass) { PsiSubstitutor subst = getSuperClassSubstitutor(superClassType, targetClassType, resolveHelper, targetClass); try { - replacementMap.put(new UsageInfo(expression), elementFactory.createExpressionFromText("new " + elementFactory.createType( - targetClass, subst).getCanonicalText() + expression.getArgumentList().getText(), expression)); + final String typeCanonicalText = elementFactory.createType(targetClass, subst).getCanonicalText(); + final PsiJavaCodeReferenceElement classReference = expression.getClassOrAnonymousClassReference(); + if (classReference != null) { + replacementMap.put(new UsageInfo(classReference), elementFactory.createReferenceFromText(typeCanonicalText, expression)); + } } catch (IncorrectOperationException e) { LOG.error(e); diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/after/Test.java new file mode 100644 index 000000000000..053d10d307ea --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/after/Test.java @@ -0,0 +1,9 @@ +class Test { + public static Test[] getArray() { + return new Test[0]; + } + + public static Test[] getArrayWithInitializer() { + return new Test[]{}; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Super.java new file mode 100644 index 000000000000..29e1e5a1aa6c --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Super.java @@ -0,0 +1,10 @@ +class Super { + public static Super[] getArray() { + return new Super[0]; + } + + public static Super[] getArrayWithInitializer() { + return new Super[]{}; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Test.java new file mode 100644 index 000000000000..e22cc838eaab --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/arrayTypeElements/before/Test.java @@ -0,0 +1 @@ +class Test extends Super {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java index 4ee7e74c0dcc..074f1b1e7110 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java @@ -71,6 +71,7 @@ public class InlineSuperClassTest extends MultiFileTestCase { public void testInterfaceHierarchyWithSubstitution() { doTest(); } public void testTypeParameterBound() { doTest();} public void testInlineInterfaceDoNotChangeConstructor() { doTest(); } + public void testArrayTypeElements() { doTest(); } private void doTest() { doTest(false, false);