method reference constraints (IDEA-123223)

This commit is contained in:
Anna Kozlova
2014-04-01 12:00:38 +02:00
parent 925b71c990
commit 5518b93bd2
3 changed files with 38 additions and 6 deletions

View File

@@ -17,7 +17,6 @@ package com.intellij.psi.impl.source.resolve.graphInference.constraints;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiImplUtil;
import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
@@ -27,7 +26,8 @@ import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
import java.util.*;
import java.util.List;
import java.util.Map;
/**
* User: anna
@@ -58,10 +58,7 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
final PsiSubstitutor substitutor = LambdaUtil.getSubstitutor(interfaceMethod, classResolveResult);
final PsiParameter[] targetParameters = interfaceMethod.getParameterList().getParameters();
final PsiType interfaceMethodReturnType = interfaceMethod.getReturnType();
PsiType returnType = substitutor.substitute(interfaceMethodReturnType);
if (myExpression.getTypeParameters().length == 0 && returnType != null) {
returnType = PsiImplUtil.normalizeWildcardTypeByPosition(returnType, myExpression);
}
final PsiType returnType = substitutor.substitute(interfaceMethodReturnType);
final PsiType[] typeParameters = myExpression.getTypeParameters();
if (!myExpression.isExact()) {
for (PsiParameter parameter : targetParameters) {

View File

@@ -0,0 +1,31 @@
import java.util.List;
import java.util.function.Function;
class FluTr<K> {
class Group {
List<Authority> getAuthorities() {
return null;
}
}
class Authority {
String getPermission() {
return null;
}
}
public void filterForPermission(final String permission) {
transformAndConcat(Group::getAuthorities)
.transform(Authority::getPermission)
.contains(permission);
}
boolean contains(String f) {
return false;
}
public final <T> FluTr<T> transform(Function<? super K,T> function) { return null; }
public <T> FluTr<T> transformAndConcat(Function<? super Group,? extends Iterable<? extends T>> function) { return null; }
}

View File

@@ -217,6 +217,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testIDEA123223() throws Exception {
doTest();
}
private void doTest() {
doTest(false);
}