From 14759e531a1c0a682ac112104db8e57e7410c0b7 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 13 Oct 2017 13:12:17 +0700 Subject: [PATCH] IDEA-180417 Generated code ("Replace with collect") is invalid follow-up Fixed for groupingBy as well --- .../streamMigration/CollectMigration.java | 7 ++++++- .../collect/afterGroupingByPrimitive.java | 11 +++++++++++ .../collect/beforeGroupingByPrimitive.java | 12 ++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByPrimitive.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java index 309ffaeb1030..cd105afa3ab5 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java @@ -193,7 +193,7 @@ class CollectMigration extends BaseStreamApiMigration { @Nullable PsiLocalVariable getTargetVariable() { return myTargetVariable; } - String generateIntermediate() { return ""; } + abstract String generateIntermediate(); StreamEx targetReferences() { List usedElements = usedElements().toList(); @@ -415,6 +415,11 @@ class CollectMigration extends BaseStreamApiMigration { return false; } + @Override + String generateIntermediate() { + return myDownstream.myElement.getType() instanceof PsiPrimitiveType ? ".boxed()" : ""; + } + @Override public String generateTerminal() { String downstreamCollector = myDownstream.generateCollector(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByPrimitive.java new file mode 100644 index 000000000000..1a243d2c0ee4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByPrimitive.java @@ -0,0 +1,11 @@ +// "Replace with collect" "true" +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class Main { + public void test() { + String[] values = {"a", "b", "c"}; + Map> map = IntStream.range(0, values.length).boxed().collect(Collectors.groupingBy(i -> "X" + i, Collectors.mapping(i -> values[i], Collectors.toList()))); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByPrimitive.java new file mode 100644 index 000000000000..7f95a02c8c4a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByPrimitive.java @@ -0,0 +1,12 @@ +// "Replace with collect" "true" +import java.util.*; + +public class Main { + public void test() { + String[] values = {"a", "b", "c"}; + Map> map = new HashMap<>(); + for (int i = 0; i < values.length; i++) { + map.computeIfAbsent("X" + i, k -> new ArrayList<>()).add(values[i]); + } + } +}