inline method: erase type for array creation (IDEA-194441)

This commit is contained in:
Anna Kozlova
2018-06-25 10:34:14 +03:00
parent fd66719ce0
commit b62710799a
4 changed files with 28 additions and 5 deletions
@@ -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);
@@ -0,0 +1,13 @@
import java.util.Optional;
class Test
{
void x() {
Optional<String>[] os = arr<caret>ay(Optional.empty());
}
public static <T> T[] array(T... values) {
return values;
}
}
@@ -0,0 +1,10 @@
import java.util.Optional;
class Test
{
void x() {
Optional<String>[] os = (Optional<String>[]) new Optional[]{Optional.empty()};
}
}
@@ -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(); }