mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lambda: accept Object when return type is void
This commit is contained in:
+4
-3
@@ -878,13 +878,14 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
|
||||
if (argumentList != null && PsiUtil.getLanguageLevel(argumentList).isAtLeast(LanguageLevel.JDK_1_8)) {
|
||||
for (PsiExpression expression : argumentList.getExpressions()) {
|
||||
if (expression instanceof PsiLambdaExpression) {
|
||||
if (((PsiLambdaExpression)expression).getParameterList().getParametersCount() > 0){
|
||||
return getFailedInferenceConstraint(typeParameter);
|
||||
}
|
||||
final PsiType functionalInterfaceType = PsiLambdaExpressionImpl.getFunctionalInterfaceType(((PsiLambdaExpression)expression), false);
|
||||
if (functionalInterfaceType == null || PsiUtil.resolveClassInType(functionalInterfaceType) == typeParameter){
|
||||
return getFailedInferenceConstraint(typeParameter);
|
||||
}
|
||||
final PsiType functionalInterfaceReturnType = LambdaUtil.getFunctionalInterfaceReturnType(functionalInterfaceType);
|
||||
if (((PsiLambdaExpression)expression).getParameterList().getParametersCount() > 0 && functionalInterfaceReturnType != PsiType.VOID) {
|
||||
return getFailedInferenceConstraint(typeParameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+13
@@ -1,3 +1,4 @@
|
||||
import java.lang.String;
|
||||
import java.util.*;
|
||||
class Test4 {
|
||||
interface I<K> {
|
||||
@@ -33,4 +34,16 @@ class Test6 {
|
||||
bar(<error descr="Incompatible return type <null> in lambda expression">() -> null</error>);
|
||||
bar(() -> {});
|
||||
}
|
||||
}
|
||||
|
||||
class Test7 {
|
||||
interface I<K> {
|
||||
void foo(String s);
|
||||
}
|
||||
|
||||
static <T> void bar(I<T> i){}
|
||||
|
||||
{
|
||||
bar(x -> {});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user