stream api: fix primitive boxing (IDEA-151494)

This commit is contained in:
Anna Kozlova
2016-02-15 15:49:06 +01:00
parent b424316b32
commit 7a671c53f8
3 changed files with 26 additions and 1 deletions
@@ -508,7 +508,13 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
iteration +=".map(";
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
final PsiClass functionClass = psiFacade.findClass("java.util.function.Function", GlobalSearchScope.allScope(project));
final PsiClassType functionalInterfaceType = functionClass != null ? psiFacade.getElementFactory().createType(functionClass, parameter.getType(), expression.getType()) : null;
final PsiType[] paramTypes = {parameter.getType(), expression.getType()};
for (int i = 0; i < paramTypes.length; i++) {
if (paramTypes[i] instanceof PsiPrimitiveType) {
paramTypes[i] = ((PsiPrimitiveType)paramTypes[i]).getBoxedType(expression);
}
}
final PsiClassType functionalInterfaceType = functionClass != null ? psiFacade.getElementFactory().createType(functionClass, paramTypes) : null;
final PsiCallExpression toConvertCall = LambdaCanBeMethodReferenceInspection
.canBeMethodReferenceProblem(expression, new PsiParameter[]{parameter}, functionalInterfaceType);
final String methodReferenceText = LambdaCanBeMethodReferenceInspection.createMethodReferenceText(toConvertCall, functionalInterfaceType, new PsiParameter[]{parameter});
@@ -0,0 +1,9 @@
// "Replace with collect" "true"
import java.util.List;
import java.util.stream.Collectors;
class Sample {
public void some(List<String> from, List<Integer> to) {
to.addAll(from.stream().map(String::length).collect(Collectors.toList()));
}
}
@@ -0,0 +1,10 @@
// "Replace with collect" "true"
import java.util.List;
class Sample {
public void some(List<String> from, List<Integer> to) {
for (String key : fr<caret>om) {
to.add(key.length());
}
}
}