fix Collections.emptyMap not being suggested in completion if jdk8 is used

This commit is contained in:
peter
2015-08-16 17:55:05 +02:00
parent 046fc164b4
commit 375bdad569
4 changed files with 25 additions and 14 deletions
@@ -23,9 +23,9 @@ import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupItem;
import com.intellij.codeInsight.lookup.TailTypeDecorator;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
@@ -177,20 +177,12 @@ public class SmartCompletionDecorator extends TailTypeDecorator<LookupElement> {
return false;
}
public static PsiSubstitutor calculateMethodReturnTypeSubstitutor(PsiMethod method, final PsiType expected) {
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
PsiResolveHelper helper = JavaPsiFacade.getInstance(method.getProject()).getResolveHelper();
final PsiTypeParameter[] typeParameters = method.getTypeParameters();
for (PsiTypeParameter typeParameter : typeParameters) {
PsiType substitution = helper.getSubstitutionForTypeParameter(typeParameter, method.getReturnType(), expected,
false, PsiUtil.getLanguageLevel(method));
if (PsiType.NULL.equals(substitution)) {
substitution = TypeConversionUtil.typeParameterErasure(typeParameter);
}
public static PsiSubstitutor calculateMethodReturnTypeSubstitutor(@NotNull PsiMethod method, @NotNull final PsiType expected) {
PsiType returnType = method.getReturnType();
if (returnType == null) return PsiSubstitutor.EMPTY;
substitutor = substitutor.put(typeParameter, substitution);
}
return substitutor;
PsiResolveHelper helper = JavaPsiFacade.getInstance(method.getProject()).getResolveHelper();
return helper.inferTypeArguments(method.getTypeParameters(), new PsiType[]{expected}, new PsiType[]{returnType}, LanguageLevel.HIGHEST);
}
@Nullable
@@ -0,0 +1,9 @@
import java.util.Collections;
import java.util.Map;
class Foo {
void m() {
Map<String, Integer> m = Collections.emptyMap();<caret>
}
}
@@ -0,0 +1,8 @@
import java.util.Map;
class Foo {
void m() {
Map<String, Integer> m = emptyM<caret>
}
}
@@ -150,6 +150,8 @@ public void testConvertToObjectStream() {
doTest(false);
}
public void testCollectionsEmptyMap() { doTest(true); }
private void doTest() {
doTest(true);
}