suggest functional: ensure only exact types are suggested for primitives

SAM types with primitive parameters should be checked for exact matching, boxed types accept passing primitives
This commit is contained in:
Anna Kozlova
2017-06-08 17:49:07 +03:00
parent 3d73c0eb92
commit 84747a178a
2 changed files with 7 additions and 4 deletions
@@ -106,7 +106,10 @@ public class FunctionalInterfaceSuggester {
}
for (int i = 0; i < interfaceMethodParameters.length; i++) {
if (!TypeConversionUtil.isAssignable(parameters[i].getType(), substitutor.substitute(interfaceMethodParameters[i].getType()))) {
PsiType paramType = parameters[i].getType();
PsiType interfaceParamType = substitutor.substitute(interfaceMethodParameters[i].getType());
if (!(interfaceParamType instanceof PsiPrimitiveType
? paramType.equals(interfaceParamType) : TypeConversionUtil.isAssignable(paramType, interfaceParamType))) {
return null;
}
}
@@ -117,7 +120,7 @@ public class FunctionalInterfaceSuggester {
return null;
}
if (returnType instanceof PsiPrimitiveType && !returnType.equals(interfaceMethodReturnType)) {
if (interfaceMethodReturnType instanceof PsiPrimitiveType && !interfaceMethodReturnType.equals(returnType)) {
return null;
}
@@ -39,8 +39,8 @@ public class FunctionalInterfaceSuggesterTest extends LightCodeInsightFixtureTes
.stream()
.map(type -> type.getCanonicalText())
.collect(Collectors.toList());
Assert.assertTrue(suggestedTypes.containsAll(Arrays.asList("java.util.function.IntToDoubleFunction",
Assert.assertEquals(4, suggestedTypes.size());
Assert.assertTrue(suggestedTypes.containsAll(Arrays.asList("java.util.function.ToDoubleFunction<java.lang.Double>",
"java.util.function.DoubleUnaryOperator")));
Assert.assertFalse(suggestedTypes.contains("java.util.function.LongToIntFunction"));
}
}