mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 05:21:29 +07:00
lambda: incompatible lambda parameters type check fixed according to wildcards (IDEA-99073)
This commit is contained in:
@@ -269,7 +269,8 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType);
|
||||
for (int i = 0; i < lambdaParameters.length; i++) {
|
||||
PsiParameter lambdaParameter = lambdaParameters[i];
|
||||
if (!TypeConversionUtil.isAssignable(LambdaUtil.getSubstitutor(interfaceMethod, resolveResult).substitute(parameters[i].getType()), lambdaParameter.getType())) {
|
||||
if (!TypeConversionUtil.isAssignable(lambdaParameter.getType(),
|
||||
GenericsUtil.eliminateWildcards(LambdaUtil.getSubstitutor(interfaceMethod, resolveResult).substitute(parameters[i].getType())))) {
|
||||
myHolder.add(HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, lambdaParameter, incompatibleTypesMessage));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class Test {
|
||||
public interface I<K, V> {
|
||||
public V put(K k);
|
||||
}
|
||||
|
||||
{
|
||||
final I<? super Long, CharSequence> i = (Number n) -> n.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
class Test {
|
||||
{
|
||||
<error descr="Incompatible types. Found: '<lambda expression>', required: 'java.lang.Comparable'">Comparable c = (String o)->{
|
||||
Comparable c = (<error descr="Incompatible parameter types in lambda expression">String o</error>)->{
|
||||
return 0;
|
||||
};</error>
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,10 @@ public class LambdaParamsTest extends LightDaemonAnalyzerTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testFormalParamsWithWildcards() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() throws Exception {
|
||||
doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user