remove wrong capture treatment: the completion result is incorrect (IDEA-155188)

This commit is contained in:
peter
2016-05-03 14:25:59 +02:00
parent d76c71a4a4
commit 20f69c8111
3 changed files with 4 additions and 24 deletions
@@ -270,7 +270,10 @@ public class JavaCompletionUtil {
final int parameterIndex = lambdaExpression.getParameterList().getParameterIndex((PsiParameter)resolve);
final Set<LookupElement> set = new LinkedHashSet<LookupElement>();
final boolean overloadsFound = LambdaUtil.processParentOverloads(lambdaExpression, functionalInterfaceType -> {
PsiType qualifierType = removeTopLevelWildcards(LambdaUtil.getLambdaParameterFromType(functionalInterfaceType, parameterIndex));
PsiType qualifierType = LambdaUtil.getLambdaParameterFromType(functionalInterfaceType, parameterIndex);
if (qualifierType instanceof PsiWildcardType) {
qualifierType = ((PsiWildcardType)qualifierType).getBound();
}
if (qualifierType == null) return;
PsiReferenceExpression fakeRef = createReference("xxx.xxx", createContextWithXxxVariable(element, qualifierType));
@@ -285,17 +288,6 @@ public class JavaCompletionUtil {
return processJavaQualifiedReference(element, javaReference, elementFilter, options, matcher, parameters);
}
@Nullable
private static PsiType removeTopLevelWildcards(@Nullable PsiType qualifierType) {
if (qualifierType instanceof PsiCapturedWildcardType) {
return removeTopLevelWildcards(((PsiCapturedWildcardType)qualifierType).getWildcard());
}
if (qualifierType instanceof PsiWildcardType) {
return removeTopLevelWildcards(((PsiWildcardType)qualifierType).getBound());
}
return qualifierType;
}
private static Set<LookupElement> processJavaQualifiedReference(PsiElement element, PsiJavaReference javaReference, ElementFilter elementFilter,
JavaCompletionProcessor.Options options,
final PrefixMatcher matcher, CompletionParameters parameters) {
@@ -1,8 +0,0 @@
import java.util.stream.*;
import java.util.*;
class Foo {
void main(Stream<? super String> stream) {
stream.collect(Collectors.toMap(o -> o.sub<caret>))
}
}
@@ -249,10 +249,6 @@ class Test88 {
configureByTestName()
myFixture.assertPreferredCompletionItems(0, 'substring', 'substring', 'subSequence')
}
public void testLambdaWithCapturedSuperWildcardInAmbiguousCall() {
configureByTestName()
myFixture.assertPreferredCompletionItems(0, 'substring', 'substring', 'subSequence')
}
public void testUnexpectedLambdaInAmbiguousCall() { doAntiTest() }
public void testNoCollectorsInComment() { doAntiTest() }