From ee6b6e00dfef3a47b0bbeb87230b187ebf4ba1ea Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 26 Apr 2016 15:29:36 +0200 Subject: [PATCH] smart completion: detect cases when inference can infer only trivial Object bound (IDEA-153970) --- .../src/com/intellij/codeInsight/CodeInsightUtil.java | 2 +- .../resolve/graphInference/PsiGraphInferenceHelper.java | 3 ++- .../codeInsight/completion/SmartType18CompletionTest.java | 4 ---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java index 16b30c387940..393299c68966 100644 --- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java @@ -373,7 +373,7 @@ public class CodeInsightUtil { arg, true, PsiUtil.getLanguageLevel(context)); - if (PsiType.NULL.equals(substitution) || substitution instanceof PsiWildcardType) continue; + if (PsiType.NULL.equals(substitution) || substitution != null && substitution.equalsToText(CommonClassNames.JAVA_LANG_OBJECT) || substitution instanceof PsiWildcardType) continue; if (substitution == null) { result.consume(createType(inheritor, facade.getElementFactory().createRawSubstitutor(inheritor), arrayDim)); return true; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiGraphInferenceHelper.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiGraphInferenceHelper.java index f78c1075a3e9..0d27f4719162 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiGraphInferenceHelper.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiGraphInferenceHelper.java @@ -117,7 +117,8 @@ public class PsiGraphInferenceHelper implements PsiInferenceHelper { leftTypes = new PsiType[] {arg}; rightTypes = new PsiType[]{param}; } - final PsiTypeParameter[] typeParams = new PsiTypeParameter[] {typeParam}; + final PsiTypeParameterListOwner owner = typeParam.getOwner(); + final PsiTypeParameter[] typeParams = owner != null ? owner.getTypeParameters() : new PsiTypeParameter[] {typeParam}; final InferenceSession inferenceSession = new InferenceSession(typeParams, leftTypes, rightTypes, PsiSubstitutor.EMPTY, myManager, null); if (inferenceSession.isProperType(inferenceSession.substituteWithInferenceVariables(param)) && inferenceSession.isProperType(inferenceSession.substituteWithInferenceVariables(arg))) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java index 78f5bdff569f..6ff7aa17c75d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java @@ -17,12 +17,9 @@ package com.intellij.codeInsight.completion; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.lookup.Lookup; -import com.intellij.idea.Bombed; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; -import java.util.Calendar; - public class SmartType18CompletionTest extends LightFixtureCompletionTestCase { @Override protected String getBasePath() { @@ -186,7 +183,6 @@ public void testConvertToObjectStream() { checkResultByFile("/" + getTestName(false) + "-out.java"); } - @Bombed(user = "anna/peter", month = Calendar.MAY, day = 4) public void testOnlyCompatibleTypes() { configureByTestName(); assertOrderedEquals(myFixture.getLookupElementStrings(), "get2");