don't complete Arrays.asList when Set is expected (IDEA-194812)

This commit is contained in:
peter
2018-07-02 17:09:29 +02:00
parent 4d58a018cf
commit 8d183dee3a
4 changed files with 22 additions and 2 deletions
@@ -27,6 +27,7 @@ import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Consumer;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.PlatformIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.codeInsight.completion.ReferenceExpressionCompletionContributor.createExpression;
@@ -41,12 +42,14 @@ class FromArrayConversion {
final PsiType itemType,
final Consumer<LookupElement> result,
@Nullable PsiElement qualifier,
final PsiType expectedType) throws IncorrectOperationException {
@NotNull PsiType expectedType) throws IncorrectOperationException {
final String methodName = getArraysConversionMethod(itemType, expectedType);
if (methodName == null) return;
final String qualifierText = ReferenceExpressionCompletionContributor.getQualifierText(qualifier);
final PsiExpression conversion = createExpression("java.util.Arrays." + methodName + "(" + qualifierText + prefix + ")", element);
if (!expectedType.isAssignableFrom(conversion.getType())) return;
final String presentable = "Arrays." + methodName + "(" + qualifierText + prefix + ")";
String[] lookupStrings = {StringUtil.isEmpty(qualifierText) ? presentable : prefix, prefix, presentable, methodName + "(" + prefix + ")"};
result.consume(new ExpressionLookupItem(conversion, PlatformIcons.METHOD_ICON, presentable, lookupStrings) {
@@ -18,6 +18,7 @@ package com.intellij.codeInsight.completion;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiType;
import com.intellij.codeInsight.ExpectedTypeInfo;
import org.jetbrains.annotations.NotNull;
/**
* @author peter
@@ -31,7 +32,7 @@ public class JavaSmartCompletionParameters {
myExpectedType = expectedType;
}
public PsiType getExpectedType() {
@NotNull public PsiType getExpectedType() {
return myExpectedType.getType();
}
@@ -0,0 +1,10 @@
import java.util.Set;
class Abc {
void foo(String... array) {
Set<String> s = <caret>
}
}
@@ -22,6 +22,7 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.util.ThrowableRunnable;
import com.intellij.util.containers.ContainerUtil;
@SuppressWarnings({"ALL"})
public class SecondSmartTypeCompletionTest extends LightFixtureCompletionTestCase {
@@ -229,4 +230,9 @@ public class SecondSmartTypeCompletionTest extends LightFixtureCompletionTestCas
configure();
myFixture.assertPreferredCompletionItems(0, "b.superclass", "b.b", "b.a");
}
public void testNoAsListWhenSetExpected() {
configure();
assertNull(ContainerUtil.find(myFixture.getLookupElements(), e -> LookupElementPresentation.renderElement(e).getItemText().contains("asList")));
}
}