mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't complete Arrays.asList when Set is expected (IDEA-194812)
This commit is contained in:
@@ -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) {
|
||||
|
||||
+2
-1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import java.util.Set;
|
||||
|
||||
class Abc {
|
||||
|
||||
void foo(String... array) {
|
||||
Set<String> s = <caret>
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+6
@@ -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")));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user