lambda: accept intersection type when exactly one conjunct is functional

This commit is contained in:
Anna Kozlova
2014-04-22 20:02:37 +02:00
parent 4a34bd569b
commit a55db18089
2 changed files with 24 additions and 10 deletions
@@ -97,18 +97,17 @@ public class LambdaHighlightingUtil {
@Nullable
public static String checkInterfaceFunctional(PsiType functionalInterfaceType) {
if (functionalInterfaceType instanceof PsiIntersectionType) {
if (!LambdaUtil.isFunctionalType(functionalInterfaceType)) {
int count = 0;
for (PsiType type : ((PsiIntersectionType)functionalInterfaceType).getConjuncts()) {
if (checkInterfaceFunctional(type) == null) {
count++;
}
}
if (count > 1) {
return "Multiple non-overriding abstract methods found in " + functionalInterfaceType.getPresentableText();
int count = 0;
for (PsiType type : ((PsiIntersectionType)functionalInterfaceType).getConjuncts()) {
if (checkInterfaceFunctional(type) == null) {
count++;
}
}
if (count > 1) {
return "Multiple non-overriding abstract methods found in " + functionalInterfaceType.getPresentableText();
}
return null;
}
final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType);
final PsiClass aClass = resolveResult.getElement();
@@ -18,3 +18,18 @@ class Test {
Object o5 = (Runnable & A) <error descr="Multiple non-overriding abstract methods found in Runnable & A">() -> {}</error>;
}
}
class Test1 {
interface A {
<X> void foo();
}
interface B {
void foo();
}
{
Object c0 = (A & B) ()->{};
}
}