diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index c0baab143d65..6752d6e8b45d 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -30,10 +30,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.psi.util.InheritanceUtil; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiTypesUtil; -import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.*; import com.intellij.refactoring.BaseRefactoringProcessor; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.introduceParameter.Util; @@ -46,6 +43,7 @@ import com.intellij.usageView.UsageViewDescriptor; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.JavaPsiConstructorUtil; +import com.intellij.util.ObjectUtils; import com.intellij.util.containers.MultiMap; import com.siyeh.ig.psiutils.CommentTracker; import com.siyeh.ig.psiutils.SideEffectChecker; @@ -841,7 +839,8 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { final PsiEllipsisType ellipsisType = (PsiEllipsisType)paramType; paramType = callSubstitutor.substitute(ellipsisType.toArrayType()); if (applicabilityLevel == MethodCandidateInfo.ApplicabilityLevel.VARARGS) { - defaultValue = "new " + ((PsiArrayType)paramType).getComponentType().getCanonicalText() + "[]{}"; + PsiType componentType = ((PsiArrayType)paramType).getComponentType(); + defaultValue = "new " + ObjectUtils.notNull(TypeConversionUtil.erasure(componentType), componentType).getCanonicalText() + "[]{}"; } else { defaultValue = PsiTypesUtil.getDefaultValueOfType(paramType); diff --git a/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java b/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java new file mode 100644 index 000000000000..4b64408850f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java @@ -0,0 +1,13 @@ + +import java.util.Optional; + +class Test +{ + void x() { + Optional[] os = array(Optional.empty()); + } + + public static T[] array(T... values) { + return values; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java.after b/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java.after new file mode 100644 index 000000000000..9f417679076e --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/GenericArrayCreation.java.after @@ -0,0 +1,10 @@ + +import java.util.Optional; + +class Test +{ + void x() { + Optional[] os = (Optional[]) new Optional[]{Optional.empty()}; + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java index 2231276f3e8d..7119f4483e05 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java @@ -86,6 +86,7 @@ public class InlineMethodTest extends LightRefactoringTestCase { public void testCallInFor() { doTest(); } public void testSCR20655() { doTest(); } + public void testGenericArrayCreation() { doTest(); } public void testFieldInitializer() { doTest(); }