From b7688efea7cb0bc3a08c4ee5614967f331979b70 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 17 Sep 2018 09:28:52 +0700 Subject: [PATCH] TerminalOperation: check arguments count for "collectingAndThen" collector. Fixes EA-127467 - AIOOBE: TerminalOperation.fromCollector --- .../codeInspection/streamToLoop/TerminalOperation.java | 1 + .../quickFix/streamToLoop/afterCollectingAndThen.java | 6 ++++++ .../quickFix/streamToLoop/beforeCollectingAndThen.java | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java index 86b7cacf7251..c85b03ca421a 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java @@ -193,6 +193,7 @@ abstract class TerminalOperation extends Operation { fn = FunctionHelper.create(collectorArgs[0], 0); return fn == null ? null : new ToCollectionTerminalOperation(resultType, fn, null); case "collectingAndThen": { + if (collectorArgs.length != 2) return null; PsiExpression collectorCall = collectorArgs[0]; PsiType downstreamResultType = PsiUtil.substituteTypeParameter(collectorCall.getType(), "java.util.stream.Collector", 2, false); if (downstreamResultType == null) return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterCollectingAndThen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterCollectingAndThen.java index 10563528a1e8..57b3d4614c02 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterCollectingAndThen.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterCollectingAndThen.java @@ -56,4 +56,10 @@ public class Main { } Map> map = Collections.unmodifiableMap(result); } + + void incomplete(List people) { + List list1 = people.stream().collect( // comment + Collectors.collectingAndThen(Collectors.toList())); + } + } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeCollectingAndThen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeCollectingAndThen.java index c9c93790c906..1a44903f725d 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeCollectingAndThen.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeCollectingAndThen.java @@ -36,4 +36,10 @@ public class Main { Collectors.collectingAndThen(Collectors.groupingBy(String::length), m -> Collections.unmodifiableMap(m))); } + + void incomplete(List people) { + List list1 = people.stream().collect( // comment + Collectors.collectingAndThen(Collectors.toList())); + } + } \ No newline at end of file