diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/FromArrayConversion.java b/java/java-impl/src/com/intellij/codeInsight/completion/FromArrayConversion.java index ae0e4ea177b5..6f1998c01765 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/FromArrayConversion.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/FromArrayConversion.java @@ -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 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) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionParameters.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionParameters.java index 9796a359b44c..a862c13896f0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionParameters.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionParameters.java @@ -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(); } diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoAsListWhenSetExpected.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoAsListWhenSetExpected.java new file mode 100644 index 000000000000..92932a60975b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoAsListWhenSetExpected.java @@ -0,0 +1,10 @@ +import java.util.Set; + +class Abc { + + void foo(String... array) { + Set s = + } + + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SecondSmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SecondSmartTypeCompletionTest.java index 1569eb10dfd3..dd0da9391e0b 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SecondSmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SecondSmartTypeCompletionTest.java @@ -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"))); + } }